注册
DM数据库集群脑裂防护机制解析
专栏/技术分享/ 文章详情 /

DM数据库集群脑裂防护机制解析

Ariamaru 2026/07/17 179 0 0
摘要

脑裂问题本质

在共享存储或主备复制的集群架构中,脑裂是指由于心跳链路中断或节点间通信超时,导致两个或多个节点同时认为自身是唯一合法的活动节点,进而并发争用共享资源(如磁盘卷、虚拟IP、服务进程)的异常状态。此状态会引发数据双写、事务日志错乱乃至存储结构损坏,是高可用体系中最需要规避的故障模式。

通用防护策略

业界针对脑裂问题的常规设计思路包括:

  • 心跳链路冗余:部署多条独立网络路径,降低单点通信失效概率;
  • 共享资源互斥:通过磁盘锁、SCSI持久预留或分布式锁,确保同一时刻仅一个节点能操作底层存储;
  • 外部仲裁机制:引入独立的监视器或协调服务,基于多数派或租约协议裁决节点存活状态。

达梦数据库在各类集群方案中,均基于上述原则并结合自身架构进行了针对性实现。

一、DataWatch主备集群:监视器驱动的仲裁模型

DataWatch采用主备复制架构,其自动切换模式下的脑裂防护高度依赖确认监视器(Confirm Monitor)

正常监视器在线

当主节点发生故障(进程崩溃或网络隔离),备节点通过心跳超时感知异常,并向监视器上报。监视器依据预设策略和多数派确认机制,裁决是否将备节点升为主。若原主机随后恢复,守护进程会强制以shutdown abort方式终止原主机数据库服务,待其稳定后再以Standby角色重新加入集群,确保原主机永远不会再次以Primary身份激活。

监视器自身故障

若监视器宕机,而此时主节点又出现故障,集群因缺乏仲裁者而无法确认主机的真实状态。为防止错误切换,系统会将所有节点置为Suspend挂起状态,不执行任何角色变更,需人工介入修复。待监视器恢复后,集群自动恢复Open状态,原有主机保留Standby角色,备机保持Primary,杜绝双主出现。

此外,DM在dm.ini中提供ALTER_MODE_STATUS=0配置项,禁止手工修改数据库模式、状态及OGUID,从管理层面排除人为误操作引起的角色混乱风险。

二、DSC共享存储集群:基于节点优先级的强制驱逐

DSC(达梦共享集群)依赖磁盘心跳网络心跳双重健康检测,脑裂防护策略采用严格的节点编号优先级和自动驱逐机制。

  • 两节点场景:若节点DM1发生故障,系统故障处理逻辑保留节点号较小者(此处为DM1),但实际是将故障节点DM1踢出集群,存活节点DM2继续提供服务。DM1恢复后,其数据库服务会被自动停止,需DBA手动介入启动并重新加入集群,且加入后仅作为从节点。
  • 三节点场景:若DM1与DM2、DM3的网络心跳中断,但共享存储的磁盘心跳仍正常,则DM1判定自身与多数派失联,主动执行自杀(自我驱逐),避免与其余节点争抢存储。恢复后的DM1同样需人工干预,以从节点身份重新接入。

该机制确保任意时间窗口内,仅有一个节点持有共享存储的写入权限,杜绝并发写冲突。

三、TDD透明分布式集群:分层仲裁链

TDD集群分为计算层、日志层和存储层,每层均设有独立的仲裁组件,形成完整的脑裂防线。

  • 计算层:采用DSC缓存融合技术,其节点状态由日志层充当仲裁者(类似监视器角色)。计算层任一节点故障或网络分区,均由日志层统一裁决,避免计算节点同时以主控角色运行。
  • 日志层:基于主备同步,其仲裁权交由DCS目录服务(分布式协调组件)。当日志层节点发生故障或网络隔离时,DCS依据选举协议主导主备切换,禁止双主日志写入。
  • 存储层:各存储节点无状态,数据一致性通过从日志层拉取Redo日志并重演来保证。存储节点彼此不通信,亦无主控权争夺,因此天然不存在脑裂风险。

TDD架构通过分层仲裁,将脑裂防护责任明确划分,杜绝了跨层级的冲突可能。

归档模式对切换的影响

DataWatch的归档配置(REALTIME、REATIME、TIMELY)虽非脑裂防护手段,但直接影响故障切换时的数据完整性:

  • REALTIME:主库提交时仅需备库确认收到日志,备库异步重演。切换时可能丢失少量未重演日志,需人工补录。
  • REATIME:主库提交时需备库确认收到且重演完成,日志发送时机为写入联机日志前。保证了事务一致性,但增加响应延迟。
  • TIMELY:同样要求备库重演完成,但日志发送时机为写入联机日志后。对主库性能影响较小,但备库同步延迟略高。

在脑裂切换场景中,选择事务一致模式(REATIME/TIMELY)可实现零数据丢失,而高性能模式(REALTIME)则需权衡性能与RPO。

总结

DM系列集群针对脑裂问题构建了多层次防护体系:

  • DataWatch依赖外部监视器仲裁,监视器失效时采用挂起策略防止误切;
  • DSC利用磁盘心跳与节点编号实现快速自我驱逐;
  • TDD通过分层仲裁机制,将计算、日志、存储的解耦与协调分离,消除单点判断。

综合运用冗余心跳、互斥锁、仲裁节点及自动驱逐技术,DM集群能够在网络分区或节点异常时,有效保障集群角色的一致性,避免双主写入导致的存储损坏,为生产环境提供可靠的高可用基座。
https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服