keepalived脑裂问题

1. keepalived脑裂

在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

类似于elasticsearch的脑裂

2.脑裂的原因

  • 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)。
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
  • 因心跳线间连接的设备故障(网卡及交换机)。
  • 因仲裁的机器出问题(采用仲裁的方案)。
  • 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
  • Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
  • vrrp实例名字不一致、优先级一致

3. 应对策略

  • 添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率
  • 启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
  • 设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
  • 利用脚本检测、报警
[root@lb02 scripts]# vim check_keepalived.sh
#!/bin/bash
while true
do
if [ `ip a show eth0 |grep 10.0.0.3|wc -l` -ne 0 ]
then    echo "keepalived is error!"
else    echo "keepalived is OK !"
fi
done
发布了68 篇原创文章 · 获赞 57 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览