
一、Keepalived 真正的风险点在哪里
这里在完成基础高可用之后,马上引出了“问题”章节。
这说明 Keepalived 真正难的地方,不是把 VIP 漂起来,而是:
- 出现异常时能不能及时切换
- 切换逻辑会不会出错
- 主备状态会不会判断失真
其中最典型的问题就是“脑裂”。
二、什么是脑裂
这里将脑裂的现象总结得很直接:
- 主备两台机器上同时都有 VIP
这就意味着:
- 原本应该只有一个对外入口
- 现在变成了两个节点都认为自己是主
这种情况会直接带来流量混乱,甚至导致访问异常和业务不可预测。
三、脑裂通常是怎么发生的
这里列出几类常见原因:
- 备节点误以为主节点已经挂了
- 但实际上主节点并没有真正挂掉
- 防火墙、SELinux、Keepalived 配置错误
- 网络物理线路异常
从本质上讲,脑裂就是:
- VRRP 心跳判断失真
- 主备两边对“谁还活着”的认知不一致
四、脑裂通常怎么处理
这里可以看到两个思路。
第一种是偏保守的方式:
- 做监控
- 只要备节点上出现 VIP 就告警
第二种更激进:
- 如果备节点已经认为主挂了
- 那就通过联动手段让主真的退出服务
虽然第二种方式更强硬,但它背后的目的其实就是避免“双主并存”。
五、为什么默认 Keepalived 还不够
这里指出了一个很关键的现实问题:
- Keepalived 默认只会在主机挂掉或网络断开时切换
- 它默认不会关心某个业务服务本身是不是还活着
这意味着:
- 如果主机还在
- 但 Nginx 已经挂掉
Keepalived 仍可能继续把 VIP 保留在这个故障节点上。
对用户来说,这种状态和“高可用失效”几乎没有区别。
六、案例:让 Nginx 挂掉时自动触发 Keepalived 切换
目标非常清楚:
- 当 Nginx 服务不在了
- Keepalived 也跟着停止
- 让 VIP 漂到备节点
核心思路分两步:
1、写脚本检查服务
2、在 Keepalived 中调用这个脚本
6.1 监控脚本怎么写
示例脚本如下:
#!/bin/bash
#author: ZQ
#desc: 监控 nginx 端口数量
port_cnt=$(ss -lntup | grep nginx | wc -l)
if [ $port_cnt -eq 0 ]; then
systemctl stop keepalived
fi
这段脚本的逻辑非常直接:
- 先检查 Nginx 端口或进程是否存在
- 如果数量为 0
- 就停止 Keepalived
一旦 Keepalived 停止,当前主节点就会放弃 VIP,备节点自然有机会接管。
6.2 别忘了给脚本执行权限
这里接着执行:
chmod +x check_ngx.sh
这是必须的,否则 Keepalived 虽然配置了脚本,也没法真正执行。
七、Keepalived 里如何接入监控脚本
这里通过 vrrp_script 和 track_script 把脚本真正挂进 Keepalived:
global_defs {
router_id lb01
}
vrrp_script check_ngx {
script /server/script/check_ngx.sh
interval 2
weight 1
user root
}
vrrp_instance vip_3 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.3 dev eth0 label eth0:0
}
track_script {
check_ngx
}
}
这里最关键的两部分是:
vrrp_script:定义脚本本身track_script:把脚本挂到某个vrrp_instance上
interval 2 则表示每隔 2 秒执行一次检查。
八、如何验证这个监控联动真的生效
验证方式是:
1、重启 Keepalived
systemctl restart keepalived.service
2、单独打开一个窗口看日志
tailf /var/log/messages
3、在主节点上关闭 Nginx
systemctl stop nginx
如果日志中能看到 Keepalived 随之退出,且 VIP 漂移到备节点,就说明脚本监控链路已经打通。
九、小结
Keepalived 在生产里最容易被忽略的一点是:
主机活着,不代表服务活着。
这里这部分的价值就在于把高可用从“机器级”推进到了“服务级”:
- 先理解脑裂是什么
- 再知道脑裂为什么会发生
- 最后通过脚本监控业务服务,让 VIP 漂移更符合真实业务状态
对 Nginx、LB 这类服务来说,这种增强配置往往比单纯把 Keepalived 装起来更重要。





暂无评论内容