脑裂可能出现在集群层crs、数据库层
脑裂出现在集群层时:
节点间无法通过内联网探知对方的心跳时,通过查看表决磁盘,看是否还有对方写的信息(每个实例每秒钟往表决盘发一次心跳信息),如果表决盘上有对方信息,表示对方还活着。
脑裂出现在数据库层时:
实例间进程通信超时,控制文件代替表决磁盘看是否还有对方写的信息。
脑裂驱逐策略:
1.集群数少的被驱逐。
2.节点号大的被驱逐
脑裂出现在集群层时:
节点间无法通过内联网探知对方的心跳时,通过查看表决磁盘,看是否还有对方写的信息(每个实例每秒钟往表决盘发一次心跳信息),如果表决盘上有对方信息,表示对方还活着。
脑裂出现在数据库层时:
实例间进程通信超时,控制文件代替表决磁盘看是否还有对方写的信息。
脑裂驱逐策略:
1.集群数少的被驱逐。
2.节点号大的被驱逐
3.负载高的被驱逐
示例1
如果两个节点私网有问题,但是都能访问所有votedisk,那么就会选择策略中的2 ,将节点号大的驱逐。
如果多个节点,私网出现问题时,节点间形成一个或多个子集群,驱逐的时候会将节点数多的子集群驱逐。
说明
发生脑裂后,节点被驱逐,那么被驱逐的节点就会重启,重启后如果正常那么就加回到集群中,如果不正常,就一直停滞在当前状态。有一种情况,如果被驱逐的节点重启后正常,但心跳网丢包严重(miscount)那么该节点可能会无限重启