高可用集群架构设计:主备节点与VIP漂移
单台服务器承载关键业务时,硬件故障、系统宕机、网络中断都会直接造成服务不可用。服务器高可用集群的标准做法是双机热备加负载均衡:两台节点通过心跳互检,由Keepalived基于VRRP协议维护一个虚拟IP(VIP),正常时VIP绑定在主节点,主节点失活后备节点在秒级内接管VIP,客户端无感知。前端再由HAProxy对后端服务做负载均衡与健康检查,单台应用节点故障时自动摘除流量。
集群拓扑中,VIP对外提供服务,Keepalived运行在两台节点上,HAProxy反向代理后端两台应用节点。主备切换只迁移VIP,不迁移会话数据,会话一致性由Redis或Cookie会话保持解决。
Keepalived双机热备配置:VRRP虚拟路由器协议实战
两台服务器安装keepalived后,主节点配置如下:
global_defs {
router_id NGINX_01
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/usr/local/bin/check_nginx.sh"
interval 2
weight -20
fall 2
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass yunthe_ha
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0
}
track_script {
chk_nginx
}
}
备份节点的state改为BACKUP,priority改为90,其余一致。track_script中的健康检查脚本每2秒执行一次,nginx存活返回0,否则返回1;检测失败时该节点优先级自动扣20分,主节点失活或降级后,备份节点广播抢占VIP。
健康检查脚本check_nginx.sh常用写法:
#!/bin/bash
if pgrep -x nginx > /dev/null; then
exit 0
else
systemctl restart nginx
sleep 2
pgrep -x nginx && exit 0 || exit 1
fi
HAProxy负载均衡与健康检查配置
HAProxy在每台节点上提供七层转发,配置将后端两台应用节点的80端口编入同组,启用roundrobin调度与主动健康检查:
listen web_cluster 0.0.0.0:8080
mode http
balance roundrobin
option httpchk GET /healthz
timeout connect 3s
timeout server 30s
server app-01 192.168.1.11:8080 check inter 3s rise 2 fall 3
server app-02 192.168.1.12:8080 check inter 3s rise 2 fall 3
check参数开启主动探活:每3秒请求一次/healthz,连续2次成功标记up,连续3次失败标记down,失败节点自动从轮询池摘除,恢复后自动回池。
故障切换验证与脑裂防护
切换验证通过关停主节点nginx或断网模拟:主节点nginx异常后,vrrp_script触发优先级降低,备节点在数秒内接替VIP,业务访问无中断。脑裂指心跳中断导致两台同时认为自己是主节点,防护手段包括:VRRP使用独立网段心跳避免与应用流量争抢;组播不可用环境下改用单播(unicast_src_ip/unicast_peer);外部仲裁脚本发现双主时强制重启低优先级节点。集群上线前应做完整的断电、断网、进程级故障演练,并配合Prometheus对VIP漂移时间做告警监控。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-gao-ke-yong-ji-qun-shi-zhan-keepalived-shuang-ji/