跳到主要内容

Keepalived 与故障转移

Keepalived 原理

Keepalived 使用 VRRP(虚拟路由冗余协议)在多台服务器间共享一个虚拟 IP(VIP)。Master 持有 VIP 处理流量,Master 故障时 Backup 自动接管 VIP。

配置示例

Master: /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script "/usr/bin/systemctl is-active nginx"
interval 2
weight -20 # 检查失败时降低优先级 20
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1

authentication {
auth_type PASS
auth_pass mysecret
}

virtual_ipaddress {
10.0.0.100/24
}

track_script {
chk_nginx
}

# 切换时执行脚本(可选)
notify_master "/opt/scripts/notify.sh MASTER"
notify_backup "/opt/scripts/notify.sh BACKUP"
}
Backup: 仅修改 state 和 priority
vrrp_instance VI_1 {
state BACKUP
priority 90
# 其余配置相同
}
提示

track_script 关键:当 Nginx 挂了但主机还活着时,通过降低优先级触发 VIP 漂移,避免 VIP 指向无服务的机器。

常见故障转移方案

方案切换速度适用场景
Keepalived VIP秒级同 VLAN 内
DNS 切换分钟级(受 TTL 影响)跨机房
云 LB 健康检查秒级云环境
K8s Service秒级容器化

常见面试问题

Q1: Keepalived 脑裂怎么处理?

答案

脑裂:Master 和 Backup 都认为自己是 Master,同时持有 VIP。

  1. 原因:网络分区导致 VRRP 心跳丢失
  2. 预防
    • 使用多条心跳线路(双网卡)
    • unicast_peer 单播替代组播(更可靠)
    • 仲裁机制:通过第三方(如 ping 网关)判断网络是否正常,异常时自降 priority
  3. 检测:监控 VIP 归属,两台同时有 VIP 时告警

相关链接