注册
DSC异步备库与实时备库动态切换指南
培训园地/ 文章详情 /

DSC异步备库与实时备库动态切换指南

🍀 2026/06/15 753 0 0

DSC异步备库与实时备库动态切换完全指南

前言

在达梦数据库DSC(Data Sharing Cluster)高可用架构中,备库根据日志同步方式的不同,分为实时备库异步备库两种类型:

类型 同步方式 数据延迟 性能影响 适用场景
实时备库 实时同步 毫秒级 较大 对数据一致性要求高的核心业务
异步备库 定时同步 分钟/小时级 较小 容灾备份、报表分析、网络带宽受限场景

在实际运维中,业务需求可能会发生变化,例如:

  • 某异步备库需要提升为实时备库,用于读写分离或快速切换
  • 某实时备库因网络带宽紧张,需要降级为异步备库

传统做法需要重建备库,耗时耗力。本文介绍如何在不重建集群的前提下,动态完成两种角色的平滑切换。


一、核心原理简述

1.1 归档配置的作用

达梦DSC集群通过归档日志(Archivelog)实现主备之间的数据同步。归档配置定义在 dmarch.ini 文件中,每条归档记录包含:

  • dest:目标实例
  • typ:归档类型(realtime 实时 / async 异步)
  • arch_timer_name:异步定时器名称(仅异步归档需要)

1.2 守护进程的角色

守护进程(DW Daemon)负责:

  • 监控本地数据库状态
  • 与对端守护进程通信
  • 执行归档日志的发送与接收

守护进程类型(DW_TYPE):

  • GLOBAL:全局守护进程,适用于实时备库
  • LOCAL:本地守护进程,适用于异步备库

1.3 切换的本质

角色切换的本质是修改归档配置守护进程类型,使主备之间的日志同步行为发生改变。


二、异步备库 → 实时备库 切换

2.1 适用场景

  • 异步备库需要升级为实时备库,用于高可用切换
  • 需要基于该备库搭建读写分离环境
  • 网络条件改善,可以承受实时同步的开销

2.2 操作前提

  • ✅ DSC所有节点正常,无故障节点
  • ✅ 所有节点处于 OPEN 状态
  • ✅ 异步备库上的数据与主库基本一致(建议先手动同步一次)

2.3 操作流程图

备份异步归档 → 归档删除异步归档 → 停止异步守护进程 → 修改DW_TYPE → 增加实时归档 → 加入集群 → 重启守护进程 → 验证

2.4 详细操作步骤

步骤1:确认初始状态

通过监视器查看当前集群架构,确认:

  • 主库实例名(如:SDNXDSC0/SDNXDSC1)
  • 实时备库实例名(如:SDNXDSC00/SDNXDSC11)
  • 待转换的异步备库实例名(如:SDNXDSC000/SDNXDSC111)

步骤2:删除主备库中的异步归档(删除前需将异步归档备份出来)

分别连接到主库实时备库,执行删除命令:

-- 主库 SDNXDSC0 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 主库 SDNXDSC1 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 实时备库 SDNXDSC00 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 实时备库 SDNXDSC11 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111';

⚠️ 注意:必须四个实例都执行,否则会导致归档配置不一致。

步骤3:停止异步备库守护进程

在异步备库所在服务器上执行:

# 停止守护进程(具体命令根据部署方式调整) DmWatcherDSC000 stop

步骤4:修改异步备库守护进程配置

编辑 dm.ini 文件(或守护进程配置文件),修改:

DW_TYPE = GLOBAL # 从 LOCAL 改为 GLOBAL

步骤5:修改异步备库的归档配置

连接到异步备库,增加指向主库实时备库的实时归档:

-- 添加指向主库的实时归档 alter database add archivelog 'dest=SDNXDSC0/SDNXDSC1, typ=realtime, arch_failover=1'; -- 添加指向实时备库的实时归档 alter database add archivelog 'dest=SDNXDSC00/SDNXDSC11, typ=realtime, arch_failover=1';

参数说明:

  • dest:目标实例组,支持逗号分隔多个实例
  • typ=realtime:实时归档模式
  • arch_failover=1:启用故障切换,当目标实例不可用时自动切换到其他实例

步骤6:启动异步备库守护进程

DmWatcherDSC000 start

步骤7:将原异步备库加入集群

分别连接到主库实时备库,添加指向原异步备库的实时归档:

-- 主库 SDNXDSC0 alter database add archivelog 'dest=SDNXDSC000/SDNXDSC111, typ=realtime, arch_failover=1'; -- 主库 SDNXDSC1 alter database add archivelog 'dest=SDNXDSC000/SDNXDSC111, typ=realtime, arch_failover=1'; -- 实时备库 SDNXDSC00 alter database add archivelog 'dest=SDNXDSC000/SDNXDSC111, typ=realtime, arch_failover=1'; -- 实时备库 SDNXDSC11 alter database add archivelog 'dest=SDNXDSC000/SDNXDSC111, typ=realtime, arch_failover=1';

步骤8:重启所有守护进程

依次重启所有实例的守护进程(顺序不限):

# 重启主库守护进程 DmWatcherDSC0 restart DmWatcherDSC1 restart # 重启实时备库守护进程 DmWatcherDSC00 restart DmWatcherDSC11 restart

步骤9:验证切换结果

通过监视器查看集群状态:

dmmonitor path=/dm/dmmonitor/dmmonitor.ini

在监视器中执行:

show database GRP1;

确认原异步备库的状态:

  • DW_TYPE 变为 GLOBAL
  • 归档类型变为 realtime
  • 日志同步延迟接近 0

2.5 注意事项

  • ⏱️ 切换完成后,主库可能会短暂进入 SUSPEND 状态,这是正常的恢复过程,几秒后会自动恢复。
  • 🔄 如果切换失败,不要重复操作,应先排查原因,必要时恢复到原始状态。
  • 📁 建议操作前备份所有节点的 dmarch.ini 文件。

三、实时备库 → 异步备库 切换

3.1 适用场景

  • 网络带宽紧张,需要降低同步频率
  • 该备库仅用于容灾备份,无需实时同步
  • 需要将该备库资源释放用于其他分析任务

3.2 操作前提

  • ✅ 确认该实时备库当前不是主库
  • ✅ 确认有其他实时备库可以承担实时同步任务(如有需要)
  • ✅ 确认异步定时器已正确配置

3.3 操作流程图

分离备库 → 删除实时归档 → 停止守护进程 → 修改DW_TYPE → 删除自身归档 → 添加异步归档 → 重启守护进程 → 验证

3.4 详细操作步骤

步骤1:确认初始状态

通过监视器确认当前集群中所有实例的角色和状态。

步骤2:在监视器中分离待转换的备库

# 登录监视器 dmmonitor path=/dm/dmmonitor/dmmonitor.ini # 执行分离命令 detach database GRP1.SDNXDSC000

⚠️ 分离后,该备库暂时脱离集群,不再接收日志。

步骤3:删除主库和实时备库中的实时归档

分别连接到主库其他实时备库,删除指向待转换备库的实时归档:

-- 主库 SDNXDSC0 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 主库 SDNXDSC1 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 实时备库 SDNXDSC00 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111'; -- 实时备库 SDNXDSC11 alter database delete archivelog 'dest=SDNXDSC000/SDNXDSC111';

步骤4:停止待转换备库的守护进程

DmWatcherDSC000 stop

步骤5:修改守护进程配置

编辑配置文件,修改:

DW_TYPE = LOCAL # 从 GLOBAL 改为 LOCAL

步骤6:删除待转换备库中的原实时归档

连接到待转换的备库,删除指向主库和其他实时备库的归档:

-- 删除指向主库的归档 alter database delete archivelog 'dest=SDNXDSC0/SDNXDSC1'; -- 删除指向实时备库的归档 alter database delete archivelog 'dest=SDNXDSC00/SDNXDSC11';

步骤7:启动该备库的守护进程

DmWatcherDSC000 start

步骤8:在主库和实时备库中添加异步归档

分别连接到主库其他实时备库,添加异步归档配置:

alter database add archivelog 'dest=SDNXDSC000/SDNXDSC111, type=ASYNC, arch_timer_name=RT_TIMER';

参数说明:

  • type=ASYNC:异步归档模式
  • arch_timer_name:指定定时器名称,用于控制同步频率

步骤9:重启所有守护进程

重启主库、实时备库、以及刚转换的异步备库的守护进程。

步骤10:验证切换结果

通过监视器确认:

  • 该备库的 DW_TYPE 变为 LOCAL
  • 归档类型变为 async
  • 日志同步按定时器配置进行

3.5 注意事项

  • 切换为异步备库后,需要确认只有一个源库向其发送日志,否则会导致日志连续性校验异常。
  • 异步同步的频率由 arch_timer_name 对应的定时器配置决定,需提前在 dmarch.ini 中配置好。

四、常见问题与排查

Q1:切换过程中发生主备切换怎么办?

现象:操作未完成时,原主库宕机或发生自动切换。

影响:老主库认为异步备库已变为实时备库,而新主库仍认为它是异步备库,导致配置不一致。

解决

  1. 立即停止所有操作
  2. 通过监视器确认当前主库
  3. 以新主库为准,重新评估当前配置
  4. 必要时重新执行切换流程

Q2:级联异步备库如何切换?

问题:级联异步备库(源库是另一个异步备库)转换为实时备库后,可能被提升为主库,此时需要向原源库同步数据。

要求:转换前必须确保该备库上配置了定时器(arch_timer_name)。

Q3:切换后异步备库出现多个源库

现象:异步备库收到多个不同源库发送的日志包,导致连续性校验失败。

原因:切换前该备库的 dmarch.ini 中存在多个异步归档配置未被清理。

解决

  1. 停止该备库守护进程
  2. 手动编辑 dmarch.ini,只保留一个源库的异步归档
  3. 重启守护进程

Q4:切换后实时备库无法追上主库

原因:主库写入压力大,或网络带宽不足。

解决

  • 检查网络延迟和带宽
  • 临时降低主库写入负载
  • 必要时重新初始化备库

五、最佳实践建议

5.1 操作前准备

  • ✅ 完整备份所有节点的配置文件(dmarch.inidm.ini
  • ✅ 在测试环境中完整演练一遍流程
  • ✅ 确认当前集群无故障、无切换任务
  • ✅ 准备回滚方案(如果操作失败,能否恢复原始配置)

5.2 操作中注意

  • 📌 严格按照顺序执行,不要跳过任何步骤
  • 📌 每条命令执行后确认成功,再执行下一条
  • 📌 记录操作时间点和执行结果,便于事后审计

5.3 操作后验证

  • 📌 通过监视器查看所有节点状态
  • 📌 执行测试插入,验证日志同步是否正常
  • 📌 检查各节点 dmarch.ini 是否与预期一致

六、总结

通过本文介绍的动态切换方法,可以在不重建集群、不停业务的前提下,灵活调整DSC环境中的备库角色。

切换方向 核心操作 耗时
异步 → 实时 修改DW_TYPE + 增加实时归档 约 5-10 分钟
实时 → 异步 分离备库 + 修改DW_TYPE + 增加异步归档 约 5-10 分钟

掌握这些技巧,可以大幅提升DSC集群的运维效率和灵活性。


附录:相关命令速查表

操作 命令
删除归档 alter database delete archivelog 'dest=实例名'
添加实时归档 alter database add archivelog 'dest=实例名, typ=realtime, arch_failover=1'
添加异步归档 alter database add archivelog 'dest=实例名, type=ASYNC, arch_timer_name=定时器名'
分离备库 detach database 集群名.实例名
查看集群状态 show database 集群名

📌 本文基于达梦DSC实际运维经验总结,不同版本命令可能有细微差异,请以官方文档为准。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服