脑裂现象
在HA集群中,当连接两个节点的"心跳线"断开时,本来为一个整体、动作协调的HA集群,就分裂为两个独立的部分(以4节点HA集群为例,可能分裂为1+3或者2+2的形式)
,导致HA集群中共享资源被瓜分,进而导致服务在两个独立的部分都起不来,或者能起来但因为对共享存储同时进行读写操作造成数据损坏,这种情况被称为脑裂现象。
脑裂产生的原因
HA集群中产生脑裂现象的原因有很多种,常见原因如下:
- HA集群中各节点之间心跳链路发生故障,如链路老化、异常断开等,进而导致各节点之间无法正常通信。
- 连接心跳链路的设备发生故障,如网卡、交换机等。
- 心跳链路的网卡配置不正确或者冲突导致无法传输心跳信息。
- HA集群中开启的iptables防火墙阻挡了节点之间心跳消息的传输。
- 如果HA集群中采用了仲裁方案,但仲裁设备发生了故障。
预防脑裂的措施
1.冗余通信法
HA集群中各节点之间通过串行电缆或者以太网电缆搭建两条心跳链路(或者多条,但需根据实际情况权衡是否有必要)
,同时对该两条链路的连通情况进行监听,一旦其中一条心跳链路发生故障,立即切换到另外一条心跳链上,保证各节点之间心跳信息的正常传输,同时,给用户客户端发送告警并让其做出异常链路恢复处理,减少"脑裂"现象的发生几率。
2.设置仲裁机制
当在HA集群中两个节点之间出现分歧现象,彼此互不释放已占有的资源,这时可通过仲裁机制让第三方仲裁者
(又称仲裁设备
)来决定听谁的,谁该释放掉资源。
例如,设置仲裁IP(如网关IP),当心跳链路完全断开时,两个节点都各自ping一下仲裁IP,如果不通,则表明断点就出现在本端上,本端应该释放掉已占有的资源。
3.设置Fence机制
HA集群中可通过Fence设备
(又称Stonith设备
)来设置Fence机制,即当HA集群不能确定某个节点的状态时,可通过Fence设备强行将该节点关机、重启或断开心跳连接,进而确保该节点已占有的资源被完全释放出来。