达梦数据守护(Data Watch)是达梦数据库集成化的高可用解决方案,通过主备节点间的Redo日志实时同步保证数据一致性,实现数据库的快速切换与灾难恢复。本次测试旨在于DW守护集群在不同配置组合下的高可用能力,重点验证确认监视器和 DW_MODE参数对故障自动切换的影响,以及监视器自身的高可用性。
- 验证确认监视器开启/关闭状态下,主库故障时的自动切换能力;
- 验证 DW_MODE = AUTO 与 MANUAL 两种模式下的故障响应差异;
- 验证多实例确认监视器的高可用性(监视器自身故障时的自动选举);
- 验证备库故障、网络隔离等异常场景下集群的稳定性;
- 验证脑裂场景的防护与恢复机制。
本次测试采用一主一备+监视器的标准数据守护集群架构,多实例监视器测试场景下监视器部署3个节点。
配置:dmwatcher.ini: DW_MODE = AUTO;dmmonitor.ini: MON_DW_CONFIRM = 1
故障模拟:杀掉主库数据库进程(kill -9 <dmserver_pid>)
预期结果:备库自动接管成为新主库
结果展示 执行前:
执行后:
实际结果:符合预期。确认监视器收到主库故障信息后自动接管集群,将备库切换为Primary模式,数据库服务持续可用
恢复验证:原主库重启后自动作为备库加入集群,数据同步正常
配置:同上
故障模拟:同时杀掉主库数据库进程和守护进程(kill -9 <dmserver_pid> <dmwatcher_pid>)
预期结果:备库自动接管
结果展示 执行前:
执行后:
实际结果:符合预期,确认监视器检测到主库完全不可用后,仍能完成自动切换
恢复验证:原主库实例与守护进程重新启动后,自动以备库身份加入集群
配置:DW_MODE = AUTO,确认监视器关闭(MON_DW_CONFIRM = 0或无监视器)
故障模拟:杀掉主库数据库进程
预期结果:不会自动切换
结果展示 执行前:
执行后:
实际结果 符合预期。守护进程虽能检测到主库进程挂掉并自动拉起,但主备不会切换
说明 自动切换除需DW_MODE=AUTO外,还必须配置确认监视器且保持存活
配置:DW_MODE = MANUAL, MON_DW_CONFIRM = 1
故障模拟:杀掉主库进程及主库守护进程
预期结果:不会自动切换
结果展示 执行前:
执行后:
实际结果:符合预期。集群维持在故障状态,需人工通过监视器执行Takeover命令手动切换
说明:MANUAL模式适用于需要严格管控切换流程的场景
注:均为AUTO+确认关系器
场景描述:单实例确认监视器进程故障或服务器宕机
影响分析:无法继续进行集群的故障自动接管和备库故障确认,自动切换功能失效
结果展示:可参考3.1.3无确认监视器+AUTO模式
结论:单实例监视器存在单点故障风险,生产环境建议部署多实例确认监视器
配置:3节点多实例监视器,基于RAFT协议实现
工作原理:多个监视器实例中只有一个作为确认监视器(主)提供服务,其余作为备监视器存在
故障模拟:主监视器节点故障
预期结果:自动从备监视器中选举新的主监视器
结果展示 执行前:
执行后:leader切换到mon3
实际结果:符合预期。系统自动完成选举,新的确认监视器继续提供服务
说明:多实例监视器实现了监视器自身的业务连续性
场景:主监视器故障后,新选举的监视器检测到数据库节点异常
故障模拟:主监视器节点故障+主库故障
预期结果:自动从备监视器中选举新的主监视器+主备自动切换
结果展示:MON3可以正常执行切换
实际结果:符合预期。新主监视器自动将对应数据库节点升主,实现监视器和数据库服务的高可用联动
说明
场景:主监视器故障后,新选举的监视器检测到数据库节点异常
故障模拟:关闭MON1和MON2
预期结果:剩余监视器无法正常提供服务
结果展示:
实际结果:符合预期
说明:超过半数监视器关闭,剩余监视器无法正常提供服务,符合raft多数派原则
文章
阅读量
获赞
