目录

脑裂(Split Brain)

在 HA(高可用)系统中,当联系主、从节点之间的 “心跳线路” 断开时,本来作为一个整体、动作协调的 HA 系统,就分裂成为两个独立的节点,即两者都认为自己是 Master。导致两个 “Master” 本能的争抢资源、互相冲突,继而导致严重的后果。

对于无状态的 HA 系统而言,无所谓脑裂的存在,但对有状态的 HA 系统而言,必须要严格防止脑裂的产生。

脑裂的原因

产生脑裂的原因,归根结底是 “心跳线路” 的网络故障,通常有以下几种情况:

  • 硬件损坏:网卡、网线、交换机损坏等。
  • 软件配置错误:IP 冲突、防火墙不放行、软件 BUG 等。
防止脑裂的办法

实际上,双节点的主从 HA 架构很难做到 100% 防脑裂的效果,升级为 3 冗余架构才能从根源上解决问题。

  • 心跳链路冗余:物理/虚拟网卡 Bond。

  • 设置第三方仲裁:根据实际情况设置 “冲裁机构”,当双方出现争议时,由仲裁者做决定。例如:设置参考 IP(e.g. GW IP),当心跳链路断开时,双方各自 ping 都一下,不通则表明断点出现在本端。在 Keepalived 场景中,可以让 check_script 周期性的 ping 参考 IP,如果不通则 “service keepalived stop”。

  • 使用 Fence 机制:当检测到裂脑时强行关闭一个心跳节点。相当于备节点接收不到心跳消患时,就通过单独的线路发送关机命令关闭主节点的电源。

Fence 技术

Fence 技术的目的是解决高可用集群在出现极端条件下出现的运行保障问题,例如:脑裂问题。Fence 的核心思路是:隔离不需要的主机,当一台主机和集群失去联系时,将其隔离,以防止脑裂。

实现了 Fence 技术的设备称之为 Fence 设备,或者 Stonith (Shoot The Other Node In The Head,打爆另一个节点的头)设备。通常可以将一台虚拟机作为 Fence 设备。

Keepalived vs Pacemaker

综上,可以看出 Keepalived 并不适用于是状态的 HA 系统,而 Pacemaker 是一个不错的替代方案。Pacemkaer 自带的 3 节点仲裁机制,集群的所有节点中的多数选出一个协调者,集群的所有指令都由这个协调者发出,可以完美的杜绝脑裂问题,同时也支持 Fence 功能。

参考文档

https://www.cnblogs.com/kevingrace/p/7205846.html