脑裂是指同一个守护进程组中同时出现两个或者多个活动主库,并且这些主库都接收用户请求,提供完整的数据库服务。一旦发生脑裂,将无法保证数据一致性,会对数据安全造成严重后果。
DM数据守护系统为预防脑裂做了大量工作,例如故障自动切换模式的数据守护必须配置确认监视器。确认监视器启动故障切换之前,会进行严格的条件检查,避免脑裂发生。守护进程一旦检测到脑裂发生,会马上强制退出主库,等待用户干预,避免数据差异进一步扩大。
故障自动切换与手动切换是集群主机出现故障时两种不同的处理方式。自动切换是指当主机发生故障时,集群自行进行备机接管的操作,从现有符合接管条件的备机中挑选一台备机切换为主机状态继续对外提供服务;手动切换是指当主机发生故障时,等待人为干预,不自动进行状态的切换。
自动切换必须满足以下两个条件:
DM数据守护集群系统为预防脑裂做了大量工作,仅有在未确认原主机状态的情况下,手动进行备机强制接管才可能导致脑裂的情况。后续挑选部分场景进行测试验证。
故障场景 | 处置流程 | 是否会导致脑裂 |
---|---|---|
备机实例故障 | 主机做完故障处理后继续正常对外提供服务; | 否 |
主机实例故障 | 备机不会进行自动接管;若主机实例被守护进程成功拉起,则继续作为主机对外提供服务;若无法被守护进程拉起,则集群无法正常提供读写服务,仅备机能对外提供只读服务; | 否 |
主机内网故障/备机内网故障 | 主机做完故障处理后正常对外提供服务; | 否 |
主机内网故障,在未确认主机实例是否故障的情况下,手动进行备机强制接管 | 若原主机实例未故障,则集群中会出现两个open primary状态的实例,集群出现脑裂; | 是 |
故障场景 | 处置流程 | 是否会导致脑裂 |
---|---|---|
备机实例故障 | 主机做完故障处理后正常对外提供服务; | 否 |
主机实例故障 | 备机自动接管,成为新的主机继续对外提供服务; | 否 |
主机内网故障 | 备机自动接管,成为新的主机继续对外提供服务;原主机变为suspend状态,待内网恢复后原主机会变为standby状态; | 否 |
备机内网故障 | 主机做完故障处理后正常对外提供服务; | 否 |
主机实例故障且监视器服务故障或未启动 | 主机变为suspend状态,且备机无法进行自动接管,集群无法正常对外提供读写服务; | 否 |
主机内网故障且监视器服务故障或未启动,此时人为进行备机强制接管 | 此时会出现两个PRIMARY状态的实例,但其中一个实例为SUSPEND状态,无法正常对外提供读写服务,不构成脑裂; | 否 |
对于集群的故障处理,需要当成一个整体进行分析,处理一个节点时,必须清楚其他节点的状态。为了避免出现集群脑裂的情况,我们建议:
测试环境:
数据库版本: V8. 1-2-162-2022.11.14-174506-20018-ENT Pack2
服务器环境:
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)
Kernel:
4.19.90-24.4.v2101.ky10.aarch64
Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524
###################################################
心跳网网段:192.168.18.xx
业务网网段:192.168.104.xx
集群不会进行状态切换,待故障主机被守护进程自动拉起后,集群正常对外提供服务,不会发生脑裂。
主机做完故障处理后继续正常对外提供服务,不会发生脑裂。
在上述4.1.2场景的基础上手动进行备机强制接管的操作,此时会出现两个OPEN PRIMARY状态的实例,且均能正常对外提供服务,集群出现脑裂。
备机进行自动接管,原主机被守护进程拉起后以备机状态重加入集群,不会发生脑裂。
备机自动接管,成为新的主机继续对外提供服务;原主机变为suspend状态,待内网恢复后原主机会以standby状态重加入集群,不会发生脑裂。
主机变为suspend状态,且备机无法进行自动接管,集群无法正常对外提供读写服务。
在上述4.2.3场景的基础上手动进行备机强制接管的操作,会出现两个PRIMARY模式的实例,但其中一个实例状态为SUSPEND,该节点无法正常对外提供读写服务,不构成脑裂。
文章
阅读量
获赞