脑裂的前提条件:
- 集群
- 存在角色转换
HA集群:
心跳网络故障,两个实例同时把共享存储挂载上,进行操作。
规避方法:
提供稳定的网络,内网网卡、交换机冗余;
引入磁盘锁,dm.ini中提供配置参数HA_INST_CHECK_IP和HA_INST_CHECK_PORT,防止两个实例同时启动;
DM数据守护集群:
非自动切换模式下不会发生脑裂,除非人工误操作。
自动切换模式下,必须引入仲裁,在第三台机器上部署监视器;
有确认监视器的情况下,主机内网网卡故障,与监视器和备机的mal断开,此时主机suspend,尝试failover,但是由于收不到监视器的确认信息,所以无法进入failover处理流程,一直处于suspend状态;监视器与备机收不到主机的消息,备机自动接管成主,当主机内网恢复后,主机自动shutdown abort,过一段时间再被守护进程自动拉起,成备机模式。不会出现双主都活动的情况。
理论情况下,主备集群出现脑裂的唯一可能情况是人为误操作。
人工操作之前一定要确认原主机已经异常关闭了,设置dm.ini参数ALTER_MODE_STATUS为0能一定程度上避免人工误操作。
DMDSC集群:
两节点DSC集群,内网故障,由于无法判断哪台机器的网络故障,所以编号大的节点会自动自杀,并退出集群;
三节点及以上的DSC集群,内网故障,可以判断出哪台节点网络异常,故障节点会自动自杀并退出集群;
DMTDD集群:
日志层作为计算层的仲裁节点;目录节点作为日志层的仲裁节点;
为避免出现集群脑裂:
1. 必须提供稳定可靠的网络,网卡、交换机冗余;
2. 启用磁盘锁;
3. 引入仲裁机制