12.6.6 典型故障场景与切换流程复盘
本节聚焦 Keepalived 高可用体系中的典型故障场景与切换流程,复盘从检测、仲裁到业务恢复的关键路径,补充可执行示例、排错命令与演练练习,建立可预期、可验证的切换机制。
原理草图:故障检测与切换链路#
典型故障场景一:主节点网络中断#
现象:VIP 不可达、ARP 缓存指向旧主、应用连接超时。
切换流程:
1. Backup 节点检测到 VRRP 广播丢失或健康检查失败。
2. Backup 提升为 MASTER,绑定 VIP。
3. 发送 gratuitous ARP 更新上游与客户端 ARP 缓存。
4. 应用连接自动重试,流量切换到新主。
关键配置示例(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:vip
}
garp_master_delay 1
garp_master_repeat 3
}
排错命令与解释
# 1) 查看VRRP状态与VIP绑定
ip -4 addr show dev eth0 | grep 10.0.0.100
# 2) 抓包确认VRRP心跳是否到达
tcpdump -i eth0 vrrp
# 3) 检查GARP是否发送
tcpdump -i eth0 arp and host 10.0.0.100
# 4) 查看系统日志
journalctl -u keepalived -n 200 --no-pager
复盘要点:
- VRRP 通告间隔与降级阈值需合理配置,避免假死放大。
- 上游交换机或安全设备需允许 GARP。
- TCP 长连接需配合应用侧重连策略与连接池健康检测。
演练练习
1. 主节点执行 ifdown eth0(或禁用接口)模拟网络中断。
2. 观察 VIP 是否在 3~5s 内切换到备节点。
3. 恢复网络后检查是否发生频繁抢占。
典型故障场景二:主节点应用进程异常但系统存活#
现象:系统仍在线,VIP 未切换,但业务不可用。
切换流程:
1. Keepalived 执行自定义健康检查脚本返回失败。
2. 权重降低或触发 notify 脚本,主节点降级为 BACKUP。
3. 备节点接管 VIP,并恢复业务服务。
健康检查脚本示例(/etc/keepalived/check_nginx.sh)
#!/bin/bash
# 检查HTTP端口是否可用,不可用返回1触发降级
curl -sSf http://127.0.0.1:80/healthz >/dev/null
if [ $? -ne 0 ]; then
exit 1
fi
exit 0
配置关联(/etc/keepalived/keepalived.conf)
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
fall 2
rise 2
weight -30
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
track_script {
chk_nginx
}
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:vip
}
}
排错命令与解释
# 1) 手动执行健康检查脚本
bash -x /etc/keepalived/check_nginx.sh
# 2) 查看keepalived脚本执行日志
grep -i "Script" /var/log/messages | tail -n 50
# 3) 检查应用端口
ss -lntp | grep :80
复盘要点:
- 健康检查脚本必须判定“业务可用性”,而非仅进程存在。
- 建议设置 rise/fall 防抖,避免抖动。
- 应用启动耗时长时需配合 preempt_delay 与启动完成探测。
演练练习
1. 手动停止 Nginx:systemctl stop nginx。
2. 验证 VIP 是否从主节点切换到备节点。
3. 恢复服务后确认是否发生抢占回切。
典型故障场景三:脑裂(双主)#
现象:两节点同时持有 VIP 或业务分流异常。
切换流程:
1. 网络分区导致 VRRP 通信中断。
2. 双方均提升为 MASTER 并绑定 VIP。
3. 客户端访问受网络拓扑影响出现不一致。
现象确认命令
# 两节点都出现VIP即疑似脑裂
ip -4 addr show dev eth0 | grep 10.0.0.100
# 观察VRRP报文异常
tcpdump -i eth0 vrrp
配置建议(专用心跳网卡 + 单播)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
unicast_src_ip 10.0.1.10
unicast_peer {
10.0.1.11
}
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:vip
}
}
复盘要点:
- 优化 VRRP 链路可靠性,配置专用心跳网卡。
- 使用 vrrp_garp_interval 控制 GARP 频率。
- 关键系统引入第三方仲裁或 BFD 支持。
- 数据类业务需配合复制一致性与写保护策略。
演练练习
1. 通过防火墙阻断 VRRP 流量模拟分区:
iptables -A INPUT -p vrrp -j DROP
2. 观察两端 VIP 是否同时存在。
3. 清理规则并验证恢复。
典型故障场景四:切换后回切导致业务抖动#
现象:主节点恢复后频繁抢占,业务流量抖动。
切换流程:
1. 原主恢复后基于优先级抢占 VIP。
2. 短时间内多次抢占导致连接频繁中断。
抑制回切配置示例
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
nopreempt
preempt_delay 30
virtual_ipaddress {
10.0.0.100/24 dev eth0 label eth0:vip
}
}
排错命令与解释
# 观察频繁切换日志
journalctl -u keepalived -n 200 --no-pager | grep -i "Transition"
复盘要点:
- 设置 nopreempt 或合理配置 preempt_delay。
- 通过业务稳定期后再手工或定时触发回切。
- 重要系统采用“无自动回切”的运维策略。
演练练习
1. 恢复主节点后观察是否自动抢占。
2. 修改配置为 nopreempt 后再次验证。
典型故障场景五:LVS/负载均衡后端失效#
现象:VIP 可用但服务实际不可用,流量打到失效后端。
切换流程:
1. 健康检查检测到后端失败,Keepalived 移除 Real Server。
2. 如主节点负载均衡服务异常,触发 VIP 切换。
示例:LVS 配合健康检查
virtual_server 10.0.0.100 80 {
delay_loop 2
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.201 80 {
weight 1
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
real_server 10.0.0.202 80 {
weight 1
TCP_CHECK {
connect_timeout 2
nb_get_retry 2
delay_before_retry 2
}
}
}
排错命令与解释
# 查看LVS后端状态
ipvsadm -Ln
# 验证后端可达性
curl -sS http://10.0.0.201/healthz
复盘要点:
- 区分“节点高可用”与“后端服务可用性”两层检查。
- 对 LVS/HAProxy 场景,应同步后端状态避免黑洞。
演练练习
1. 停止其中一台后端服务,观察是否被剔除。
2. 停止负载均衡服务,观察 VIP 是否切换。
典型故障场景六:配置漂移导致切换失败#
现象:备节点无法接管 VIP 或服务启动失败。
切换流程:
1. 主节点故障后,备节点尝试接管但应用未就绪。
2. VIP 虽切换但端口不可用或依赖缺失。
对比配置一致性示例
# 对比主备配置一致性
diff -u /etc/keepalived/keepalived.conf /backup/keepalived.conf
# 检查依赖服务状态
systemctl status nginx
复盘要点:
- 使用配置管理与校验机制保证主备一致性。
- 统一部署脚本与依赖版本,定期进行演练。
- 切换前后自动化检查服务端口与业务依赖。
演练练习
1. 主备安装不同版本应用,模拟漂移。
2. 触发切换验证业务是否可用。
切换流程复盘清单(适用于演练与故障回放)#
- 检测:触发条件(VRRP 通告丢失、脚本失败、资源异常)。
- 仲裁:优先级与抢占策略判断。
- 接管:VIP 绑定与 GARP 广播。
- 服务:应用启动与端口可用确认。
- 恢复:业务侧重连与稳定性观察。
- 回切:手工或自动回切策略执行。
- 验证:链路、DNS、监控告警与日志完整性确认。
复盘记录模板(示例)
故障时间: 2024-xx-xx 10:21
触发条件: VRRP心跳丢失
切换耗时: 4s
业务恢复: 8s
是否发生回切: 否
关键日志: /var/log/messages
优化建议: 调整preempt_delay为30s
关键运维建议#
- 定期演练,验证切换时延与业务恢复时间(RTO)。
- 监控 VRRP 状态、VIP 可达性、GARP 发送成功率。
- 关键路径采用双网卡、独立心跳与隔离平面。
- 将切换流程纳入变更与应急预案,形成标准化复盘模板。