当数据同步链路也要求高可用时,DMDRS 主备架构就是你的“双保险”。本文手把手带你完成 CPT 和 EXEC 的主备部署。
在数据迁移与同步的生产环境中,单点故障永远是悬在头上的剑。源端数据库挂了怎么办?目标端写入模块宕了又该如何?DMDRS 的主备方案正是为了解决这些问题而生的——它让数据捕获(CPT)和执行(EXEC)模块都具备“一主一备”的容灾能力,在主节点异常时,备节点可以无缝接替,最大限度减少数据复制中断。
本文将第四章的完整内容进行梳理,从原理、规划、配置到切换验证,形成一份可直接落地的操作手册。无论你是跨机部署还是同机部署,都能找到对应的方案。
1.1 什么是 DMDRS 主备?
DMDRS 主备由两个功能相同的服务组成:
主节点:正常承担 CPT 或 EXEC 任务。
备节点:实时同步主节点的状态和检查点信息,待命切换。
当主节点因故障、维护等原因无法工作时,备节点在满足切换条件后自动或手动接管工作,保证数据同步链路不中断。
1.2 三种典型部署模式
模式 说明 适用场景
源端 CPT 主备 源数据库为 DM8 主备/DSC 集群时,CPT 模块高可用 源端需要高可用
目标端 EXEC 主备 目标数据库为 DM8 主备时,EXEC 模块高可用 目标端需要高可用
全链路主备 CPT 和 EXEC 同时主备 对连续性要求极高的生产环境
1.3 部署形态
跨机部署:主备节点分别部署在不同物理机/虚拟机上,物理隔离,高可用性更高(推荐生产环境)。
同机部署:主备节点共享同一台机器,通过不同端口区分,节省资源(适合测试或中小规模生产)。
1.4 主备切换条件
自动切换需同时满足以下阈值(否则无法切换):
条件 阈值 说明
主节点访问备节点的时间间隔 ≤ 5 分钟 心跳超时则无法切换
主备同步时延 ≤ 1 小时 数据延迟过大不允许切换
检查点差值(DM8) ≤ 100,000 差值过大可能丢数据
检查点差值(Oracle) ≤ 20,000 同上
2.1 硬件与网络要求
项目 跨机部署 同机部署
服务器 两台独立机器 单台机器
内存 ≥8GB/台 ≥16GB(共享)
磁盘 充足(日志/缓存) 充足
网络 主备互通,CPT↔EXEC 互通 端口不冲突即可
2.2 源端 DM8 数据库准备(关键步骤)
在搭建主备前,源端 DM8 必须开启归档和附加日志,否则 CPT 无法正常解析日志。
– 1. 开启归档(以 dmdba 执行)
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG ‘DEST=/dmdata/arch,TYPE=LOCAL,FILE_SIZE=2048,SPACE_LIMIT=102400’;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
– 2. 开启逻辑附加日志(核心)
CALL SP_SET_PARA_VALUE(1, ‘RLOG_APPEND_LOGIC’, 1);
– 3. 开启系统表逻辑附加日志(避免离线字典加载失败)
CALL SP_SET_PARA_VALUE(1, ‘RLOG_APPEND_SYSTAB_LOGIC’, 1);
说明:RLOG_APPEND_LOGIC的值含义:1=仅主键列,2=所有列,3=ROWID。通常设为 1 即可。若 DM8 版本不支持RLOG_APPEND_SYSTAB_LOGIC,可执行 DMDRS 自带的ddl_sql_dm8.sql脚本创建辅助触发器。
2.3 同步用户创建
源端(DMDRS 用户):
CREATE USER DMDRS IDENTIFIED BY Dameng123;
GRANT DBA TO DMDRS; – 生产环境可按最小权限收窄
目标端(TEST_DB 用户):
CREATE USER TEST_DB IDENTIFIED BY Dameng123;
GRANT DBA TO TEST_DB;
2.4 DMDRS 代理安装(所有节点)
在每个节点(主备 CPT 节点、主备 EXEC 节点)上安装 DMDRS 代理组件(组件2)。以 root 创建目录,然后以 dmdba 用户执行安装包,交互式选择语言、安装路径、组件类型(选“仅代理”)、数据库驱动路径、本机 IP 和端口等。
在开始配置之前,必须先规划好以下关键信息,这是成败的第一步。
3.1 规划示例(本文实战环境)
配置项 CPT 主节点 CPT 备节点 EXEC 主节点 EXEC 备节点
机器 IP 192.168.21.135 192.168.21.131 192.168.21.139 192.168.21.139
部署模式 跨机 跨机 同机 同机
mgr_port 5345 5347 5345 5346
siteid 1 1 2 2
服务名 cpt_dm8_master cpt_dm8_slave exec_dm8 exec_dm8_slave
工作目录 bin_cpt_master_5345 bin_cpt_slave_5347 bin_exec_5345 bin_exec_slave_5346
核心原则:
siteid在整个管理平台下全局唯一,同一主备组内主备节点的siteid必须相同。
同机部署时,端口(mgr_port)不能冲突。
CPT 和 EXEC 的siteid必须不同(本例 CPT=1,EXEC=2)。
4.1 EXEC 主节点配置(139:5345)
关键片段:
<base>
<mgr_port>5345</mgr_port>
<siteid>2</siteid>
</base>
<exec>
<name>exec_dm8</name>
<login>
<dbtype>dm8</dbtype>
<server>192.168.21.135</server> <!-- 指向目标端 DM8 主库 -->
<user>TEST_DB</user>
<pwd>Dameng123</pwd>
<port>5237</port>
</login>
<cluster>
<mode>master</mode>
<standby>
<item>
<ip>192.168.21.139</ip>
<port>5346</port> <!-- 备节点 mgr_port -->
<target_name>exec_dm8_slave</target_name>
</item>
</standby>
</cluster>
</exec>
4.2 EXEC 备节点配置(139:5346)
<base>
<mgr_port>5346</mgr_port>
<siteid>2</siteid> <!-- 与主节点相同 -->
</base>
<exec>
<name>exec_dm8_slave</name> <!-- 与主节点 standby 的 target_name 一致 -->
<login> <!-- 同样指向主库,不指向备库 -->
<server>192.168.21.135</server>
…
</login>
<cluster>
<mode>slave</mode> <!-- 备节点无需配置 standby -->
</cluster>
</exec>
注意:EXEC 备节点也指向同一个目标主库,这样无论 DM8 主备如何切换,EXEC 主备都写入同一个主库,保证数据一致。
5.1 CPT 主节点配置(135:5345)
<base>
<mgr_port>5345</mgr_port>
<siteid>1</siteid>
</base>
<cpt>
<name>cpt_dm8_master</name>
<enable_sys_dict>0</enable_sys_dict> <!-- 跳过系统表字典检查 -->
<login>
<dbtype>dm8</dbtype>
<server>192.168.21.135</server> <!-- 连接源端主库 -->
<user>DMDRS</user>
<pwd>Dameng123</pwd>
<port>5237</port>
</login>
<send>
<ip>192.168.21.139</ip> <!-- 目标端 EXEC 主节点 IP -->
<port>5345</port> <!-- EXEC 主节点 mgr_port -->
<target_name>exec_dm8</target_name>
<map>
<item>DMDRS.==TEST_DB.</item>
</map>
</send>
<cluster>
<mode>master</mode>
<standby>
<item> <ip>192.168.21.131</ip> <!-- CPT 备节点 IP -->
<port>5347</port> <!-- CPT 备节点 mgr_port -->
<target_name>cpt_dm8_slave</target_name>
</item>
</standby>
</cluster>
</cpt>
5.2 CPT 备节点配置(131:5347)
<base>
<mgr_port>5347</mgr_port>
<siteid>1</siteid> <!-- 与主节点相同 -->
</base>
<cpt>
<name>cpt_dm8_slave</name> <!-- 与主节点 standby 的 target_name 一致 -->
<enable_sys_dict>0</enable_sys_dict>
<login>
<server>192.168.21.131</server> <!-- 连接源端备库(注意 IP 不同) -->
…
</login>
<send> <!-- 投递目标与主节点完全相同 -->
<ip>192.168.21.139</ip>
<port>5345</port>
<target_name>exec_dm8</target_name>
…
</send>
<cluster>
<mode>slave</mode> <!-- 备节点无需 standby -->
</cluster>
</cpt>
关键差异:
CPT 主节点连接源端主库,CPT 备节点连接源端备库(各司其职)。
投递目标(send)二者一致,都指向 EXEC 主节点。
启动顺序有讲究:先备后主,确保主节点启动时能立即感知备节点。
#1. 启动 EXEC 备节点(139)
cd /data/dmdrs5/bin_exec_dm8_slave_5346
export LD_LIBRARY_PATH=/data/dmdrs5/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
nohup ./drsvr exec.xml >> exec_slave.log 2>&1 &
#2. 启动 EXEC 主节点(139)
cd /data/dmdrs5/bin_exec_dm8_5345
nohup ./drsvr exec.xml >> exec.log 2>&1 &
#3. 启动 CPT 备节点(131)
cd /data/dmdrs5/bin_cpt_dm8_slave_131
nohup ./drsvr cpt.xml >> cpt_slave.log 2>&1 &
#4. 启动 CPT 主节点(135)
cd /data/dmdrs5/bin_cpt_dm8_master_135
nohup ./drsvr cpt.xml >> cpt_master.log 2>&1 &
每个节点启动后,可tail -f对应日志,看到CMD>提示符即表示成功。
使用drcsl工具连接各模块查看集群状态。
CPT 主备状态(在主节点执行)
cd /data/dmdrs5/bin_cpt_dm8_master_135
./drcsl cpt.xml
CSL> connect
CSL> show cpt_dm8_master cluster
预期输出:| 节点 | 状态 | IP | 端口 |
| 主节点 | MASTER | 192.168.21.135 | 5345 |
| 备节点 | SLAVE | 192.168.21.131 | 5347 |
EXEC 主备状态(在主节点执行)
cd /data/dmdrs5/bin_exec_dm8_5345
./drcsl exec.xml
CSL> connect
CSL> show exec_dm8 cluster
预期输出:| 节点 | 状态 | IP | 端口 |
| 主节点 | MASTER | 192.168.21.139 | 5345 |
| 备节点 | SLAVE | 192.168.21.139 | 5346 |
在 CPT 主节点控制台操作:
cd /data/dmdrs5/bin_cpt_dm8_master_135
./drcsl cpt.xmlC
SL> connect
CSL> alter cpt_dm8_master set lsn # 设置起始 LSN
CSL> alter cpt_dm8_master add table “sch.name=‘DMDRS’ and tab.name=‘EMPL1’” DROP|CREATE|INSERT|INDEX
CSL> show cpt_dm8_master load status # 查看装载进度
CSL> show cpt_dm8_master load table all
CSL> start cpt_dm8_master # 启动增量同步
CSL> show cpt_dm8_master state # 应显示 “CPT已经启动完成”
1.源端主库插入数据(135):
INSERT INTO DMDRS.EMPL1 VALUES (100, ‘DMDRS主备同步验证’, 30, 9999.00);COMMIT;
2.源端备库查询(131)——验证 DM8 主备同步是否正常。
3.目标端查询(139,指向目标主库)——验证 DRS 同步是否成功。
若三者数据一致,说明全链路主备同步正常。
10.1 手动切换(维护场景)
1.停止当前主节点服务(kill 进程或stop命令)。
2.在备节点控制台执行切换命令(具体命令请参考官方文档,通常为switchover)。
3.更新应用连接配置(如有)。
4.验证新主节点状态。
10.2 自动切换条件
系统会在满足以下所有条件时自动切换:
条件 阈值
主节点访问备节点间隔 ≤ 5 分钟
同步时延 ≤ 1 小时
检查点差值(DM8) ≤ 100,000
11.1 CPT 启动报 DRS-5125(离线字典加载失败)
原因:系统表缺少附加日志配置。解决:
CALL SP_SET_PARA_VALUE(1, ‘RLOG_APPEND_SYSTAB_LOGIC’, 1);
或执行ddl_sql_dm8.sql脚本。
11.2 主节点执行命令报 DRS-3221(备节点不允许执行)
原因:配置文件中mode误设为slave。解决:检查并修正为master,清理缓存后重启。
11.3 备节点端口占用(DRS-3000)
netstat -tlnp | grep 5347 # 查看占用进程
kill -9 <PID> # 杀掉残留进程
rm -rf <工作目录>//CACHE_ <工作目录>//LLOG_ # 清理缓存
11.4 CPT 连接 EXEC 失败(DRS-2226)
确认 EXEC 进程运行正常。
确认防火墙放通对应端口。
确认 CPT 的send.target_name与 EXEC 的name严格匹配。
检查项 验证方法 预期结果
CPT 主节点状态 show cluster MASTER
CPT 备节点状态 show cluster SLAVE
EXEC 主节点状态 show cluster MASTER
EXEC 备节点状态 show cluster SLAVE
全量装载成功 show load status 错误对象 = 0
增量同步运行 show state CPT已经启动完成
数据一致性 源端插入,目标端查询 数据一致
对比项 跨机部署 同机部署
物理隔离 ✅ 完全隔离 ❌ 共享硬件
高可用性 高 中等(单点故障风险)
资源占用 独立资源 主备共享
端口规划 可相同(IP不同) 必须不同
适用场景 生产环境 测试/中小规模生产
建议:生产环境优先采用跨机部署,确保真正的物理容灾。
DMDRS 主备搭建看似步骤繁多,但只要理清了siteid 唯一性、主备 mode 配置、端口规划、启动顺序这几个核心要点,操作起来其实非常顺畅。本文以一套完整的跨机+同机混合环境为例,带你走通了从零到一的完整过程。
在实际生产环境中,请务必先在测试环境验证整个流程,再逐步推广到生产。记住那句老话:“高可用不是有了备机就够,而是切换时数据不丢、业务不感知。”希望这篇指南能帮你稳稳地建好这条“双保险”链路。
文章
阅读量
获赞
