达梦数据库集群在线剔除异步备库实验
如果你维护过达梦数据库的数据守护集群,应该对“异步备库”这种角色不陌生。它平时安静地挂在集群里,负责容灾归档或离线查询,存在感不算高;可一旦某台备库所在硬件需要升级、机房链路要调整,或者节点要腾出来做其他用途,麻烦事就来了:怎么在集群运行着、主库业务不能中断的情况下,把一台异步备库干净利落地摘出去?我最近在一个三节点的达梦数据库演示环境里,完整走了一遍“集群在线剔除异步备库”的流程,中间踩了几个坑,也把相关原理重新捋了一遍。这篇就把实验思路、可执行步骤和排障记录整理出来,给正在做达梦集群维护的人一个直接能抄的操作框架。
1. 这个实验到底在解决什么
1.1 异步备库的角色并不只是“多一个副本”
达梦数据守护集群中,备库大体分为实时备库和异步备库。实时备库追求主备数据基本同步,主库产生的重做日志会尽快传到备库并应用,故障切换时数据损失窗口很小。异步备库则不同,它允许主库和备库之间存在一定的时间差或日志量差,主库通常按归档周期或批次把日志传过去,备库再慢慢回放。这种设计带来的好处是网络压力小、跨机房部署灵活;代价是如果主库突然故障,异步备库在切换后很可能丢一部分最近的数据。
所以生产环境中异步备库的定位一般很明确:要么承担异地容灾的“兜底”角色,要么作为数据分析、报表查询、备份导出的数据源,而不是默认的快速接管节点。明白了这层定位,就能理解为什么会有“在线剔除”这种操作需求。它不是随便删一台节点那么简单,背后涉及同步链路、守护进程、监控器配置、OGUID 标识等一系列状态变更。
1.2 “在线剔除”和直接停备库是两码事
我在不少维护群里看到有人问:备库不用了,直接把实例停掉不就行了?单机环境确实可以这么任性,但集群环境不行。达梦的数据守护集群中,每一台节点都被守护进程和监视器纳管,形成了统一的分布式状态机。如果只是把异步备库的数据库实例关掉,而没有对集群做任何“告知”,后续可能出现三类问题:
- 守护进程会认为该节点发生了故障,反复尝试连接或拉起实例,监控大屏上出现红色告警;
- 主库到该备库之间的日志发送链路还在,长时间无法送达时,归档队列、本地归档空间可能被异常占用;
- AUTO 模式下,集群状态机可能因为节点失联而触发切换评估,本来只想安静撤掉一台备库,结果把主备角色都搅动了。
“在线剔除”的核心,是让集群主动把目标节点从守护拓扑和同步链路中摘除,再让被剔除节点安全退化为独立库或重新初始化。整个过程应该做到主库业务不中断、其他备库同步不受影响、监控视图恢复干净。
1.3 这份实验记录适合谁看
如果你是达梦数据库的一线运维人员,正在规划集群缩容、备库替换或硬件迁移,这篇文章可以直接拿来当操作前检查单。如果你是刚接触达梦数据守护的 DBA,文章里的角色解释、配置项梳理和故障排查思路也能帮你建立对集群拓扑的整体认知。我尽量把思考过程也写出来,不光是列出“点哪里点哪里”,更希望能讲清楚每一步为什么这么做。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 先看懂集群的“组织架构”,操作才不会跑偏
2.1 主库、备库、守护进程、监视器各管什么
达梦数据守护集群里有几个很容易混的角色。数据库实例负责提供数据库服务,真正存数据;守护进程 dmwatcher 跑在每台节点旁边,负责监控本机数据库实例状态,并和同组的守护进程交换心跳信息;监视器 dmmonitor 是全局的管理入口,能看到所有节点状态,也可以下发切换、启停等控制指令,其中具有
