
1) 【一句话结论】:采用多区域(地理隔离可用区)部署,结合主从复制(主写从同步)、负载均衡(请求分发),并配置自动故障转移(主节点故障时从节点接管),通过监控(Prometheus+Alertmanager)和自动化恢复(Ansible)实现7x24高可用。
2) 【原理/概念讲解】:
老师口吻解释关键组件:
3) 【对比与适用场景】:
负载均衡方案对比(表格):
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Nginx | 反向代理,支持HTTP/HTTPS | 高性能,配置灵活,支持会话粘性 | Web应用,静态资源分发 | 需手动配置会话粘性,故障时需手动调整 |
| HAProxy | 高可用负载均衡器 | 支持TCP/HTTP,健康检查 | 需高可用,支持会话保持 | 配置复杂,需主从部署 |
| LVS | Linux虚拟服务器 | 透明负载均衡,基于IP | 大规模流量,需内核支持 | 需内核模块,维护复杂 |
4) 【示例】:
假设部署在两个可用区(区域A、区域B),主节点在区域A,从节点在区域B,负载均衡器(Nginx)部署在区域A边缘。监控工具Prometheus收集主节点CPU(>90%触发告警)、内存(<10%触发告警)、请求延迟(>500ms触发告警)。当Prometheus检测到主节点CPU持续超90%且不可达时,触发Alertmanager告警,同时Keepalived将区域B的从节点提升为主节点,更新Nginx的backend配置,请求转发至新主节点。恢复时,原主节点恢复后,通过监控确认数据同步完成(延迟<1秒),再降级为从节点。
伪代码(故障转移触发):
if (cpu_usage > 90) and (is_reachable == false) then
ansible -m shell -a "systemctl stop mysql && systemctl start mysql --wsrep-new-cluster" region-b-node
curl -X PUT http://load-balancer-config/api/v1/backend -d '{"host": "region-b-node", "port": 3306, "weight": 100}'
5) 【面试口播版答案】:
“面试官您好,针对7x24高可用需求,我设计的架构核心是多区域部署+主从复制+负载均衡+自动故障转移。具体来说,首先在至少两个地理隔离的可用区(如全球不同大洲的可用区)部署服务,主节点处理写操作,从节点同步数据并分担读请求。通过Nginx作为负载均衡器,将用户请求分发到主节点,当主节点故障时,通过Keepalived检测并自动将从节点提升为主节点,同时更新负载均衡器配置,实现无感知切换。监控方面,使用Prometheus收集系统指标(CPU、内存、请求延迟),通过Alertmanager告警,当检测到主节点不可用时,触发自动化脚本(如Ansible)完成故障转移,并记录恢复日志,确保服务持续可用。”(约80秒)
6) 【追问清单】:
7) 【常见坑/雷区】: