Problems
4/3/26About 2 min
Problems
Split Brain 脑裂
脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的 HA,无所谓脑裂不脑裂;但对有状态服务(比如 MySQL)的 HA,必须要严格防止脑裂。(但有些生产环境下的系统按照无状态服务 HA 的那一套去配置有状态服务,结果可想而知...)
在 HA 集群系统中,假设节点 A 和节点 B 通过心跳检测对方的存活状态。在正常情况下,如果节点 A 检测不到节点 B,就会接管 B 的资源,同理 B 也可能接管 A 的资源。如果出现网络故障,就会导致 A 和 B 同时检测不到对方的存活状态,互相接管对方的资源,这样就导致了同一个资源被多个节点访问,这种情况就是脑裂。
脑裂导致的问题:
- 数据不完整性(同时读写共享资源,导致数据损坏)。
- 服务异常(共享资源被瓜分,服务起不来)。
如何解决脑裂:
- 添加冗余的心跳线,减少脑裂出现的机会。
- 启用磁盘锁,在发生脑裂的时候协助控制资源访问。
- Quorum 设置仲裁机制。
- fence 机制(当不确定某个节点的状态时,通过 fence 设备强行关闭该心跳节点,确保共享资源被释放)。
备注:
对于无状态服务的 HA,无所谓脑裂不脑裂,但对有状态服务(比如 MySQL、Redis)的 HA,必须要严格防止脑裂。
