什么是脑裂?
在高可用(
HA
)系统中,当联系
2
个节点的
“
心跳线
”
断开时,本来为一整体、动作协调的
HA
系统,
就分裂成为
2
个独立的个体。
由于相互失去了联系,都以为是对方出了故障。两个节点上的
HA
软件像
“
裂脑人
”
一样,争抢
“
共享
资源
”
、争起
“
应用服务
”
,就会发生严重后果。共享资源被瓜分、两边
“
服务
”
都起不来了;或者两边
“
服务
”
都起来了,但同时读写
“
共享存储
”
,导致数据损坏
都有哪些原因导致脑裂?
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,
ip
配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了
iptables
防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件
Bug
等。
如何解决
keepalived
脑裂问题?
在实际生产环境中,我们从以下方面防止脑裂:
同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是
好的,依然能传送心跳消息
当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如
stonith
、
fence
)相当于备
节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源
做好对脑裂的监控报警
解决常见方案:
如果开启防火墙,一定要让心跳消息通过,一般通过允许
IP
段的形式解决
可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
开发检测程序通过监控软件检测脑裂