注册
达梦数据库DW异步同步主备集群部署
培训园地/ 文章详情 /

达梦数据库DW异步同步主备集群部署

谷顾咕 2026/06/30 385 0 0

如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配置多个异步备库用于分担统计报表等任务

本篇将在原有实时主备集群的基础上新增一个异步备库节点,架构图如下

主机名 IP 数据库名(db_name) 实例名(instance_name) 角色
DW-SS1 192.168.20.36 dmdb dmdb1 主库
DW-SS2 192.168.20.37 dmdb dmdb2 实时同步备库
DW-YB1 192.168.20.38 dmdb dmdb3 异步同步备库

注意事项:

  1. 修改原有的配置文件前一律建议先做备份
  2. 若无特别说明,以下操作均使用 dmdba 用户执行

1. 主库DW-SS1配置

1.1 修改dm.ini

在原有dm.ini文件的基础上启用定时器

vi /dmdb/dmdata/dmdb/dm.ini TIMER_INI=1

1.2 修改dmmal.ini

在原有dmmal.ini基础上增加异步备库DW-YB1的MAL配置项

vi /dmdb/dmdata/dmdb/dmmal.ini [MAL_INST3] MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP MAL_PORT = 61143 #MAL系统监听TCP连接的端口 MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址 MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致 MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口

1.3 修改dmarch.ini

在原有dmarch.ini基础上增加异步备库DW-YB1的MAL配置项

vi /dmdb/dmdata/dmdb/dmarch.ini [ARCHIVE_ASYNC] ARCH_TYPE = ASYNC #异步归档类型 ARCH_DEST = dmdb3 #异步归档目标实例名 ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致

如果异步备库为 DMDSC 集群,则 ARCH_DEST 中需要配置 DMDSC 集群中所有节点实例名称,不同实例名之间使用“/”分隔。假设 DMDSC 集群中包含两个节点实例,实例名分别为 DSC01 和 DSC02,则需要配置 ARCH_DEST=DSC01/DSC02

1.4 配置dmtimer.ini

dmtimer.ini 用于配置定时器,用于数据守护中记录异步备库的定时器信息中记录异步复制的定时器信息。dmtimer.ini 的配置项如下

配置项 配置含义
[TIMER_NAME1] 定时器名称。例如,名为 RT 的定时器,名称书写方式为[RT]
TYPE 定时器调度类型:1:执行一次。时间上只需要指定 DURING_START_DATE 即可,不需要指定 START_TIME、END_TIME 和 DURING_END_DATE2:按日执行3:按周执行4:按月执行的第几天5:按月执行的第一周6:按月执行的第二周7:按月执行的第三周8:按月执行的第四周9:按月执行的最后一周10: 按 REPEAT_INTERVAL 指定的日历表达式的频率进行。不再需要通过 START_TIME、END_TIME、DURING_START_DATE 和 DURING_END_DATE 指定时间
FREQ_MONTH_WEEK_INTERVAL 间隔月或周数。这个列的可选值与上面的不同调度类型有关。表示执行的频率。说明如下:当 TYPE=1 时,这个值无效,系统不会做检查。当 TYPE=2 时,表示每隔几天执行,值的有效范围为 1 到 100。当 TYPE=3 时,表示的是每隔几个星期执行,值的有效范围为 1 到 100。当 TYPE=4 时,表示每几个月中的某一天执行,值的有效范围为 1 到 100。当 TYPE 为 5、6、7、8 或 9 时,都表示每几个月的某一周执行,值的有效范围为 1 到 100
FREQ_SUB_INTERVAL 间隔天数。这个列的可选值与上面的不同调度类型有关。表示执行的频率,在 FREQ_MONTH_WEEK_INTERVAL 基础上,继续指定更为精细的频率。说明如下:当 TYPE=1 或 2 时,这个值无效,系统不会做检查。当 TYPE=3 时,表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。具体如何取值,请用户参考如下规则。因为每周有七天,所以 DM 用七位二进制来表示选中的日子。从最低位开始算起,依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则 0。例如:选中周二和周六,7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 就取值 68。当 TYPE=4 时,表示将在一个月的第几天执行,此时这个列的有效值范围为 1 到 31当 TYPE 为 5、6、7、8 或 9 时,都表示将在某一周内第几天执行,有效值为 1 到 7,分别表示从周一到周日
FREQ_MINUTE_INTERVAL 间隔分钟数。当 TYPE 为 2、3、4、5、6、7、8 或 9 时,在 FREQ_MONTH_WEEK_INTERVALHE 和 FREQ_SUB_INTERVAL 的基础上,继续指定更为精细的频率。表示一天内每隔多少分钟执行一次。取值范围 0~1440,0 表示一天内执行一次
REPEAT_INTERVAL 当 TYPE 为 10 时使用,用来指定的日历表达式。语法详见《DM8 系统包使用手册》手册 DBMS_SCHEDULER 包中关于 REPEAT_INTERVAL 的介绍
START_TIME 定时器开始时间,TIME 类型。例如:20:59:59.999999
END_TIME 定时器结束时间,TIME 类型
DURING_START_DATE 指定定时器的有效日期范围的起始日期,必须是有效的日期字符串,不可以为空。TIMESTAMP 类型。例如:2021-12-15 10:00:00
DURING_END_DATE 指定定时器的有效日期范围的结束日期,当 NO_END_DATE_FLAG=1 时可以为空。当 NO_END_DATE_FLAG=0 时不可以为空,必须是有效的日期字符串,同时必须晚于 DURING_START_DATE 日期。TIMESTAMP 类型
NO_END_DATE_FLAG 是否无结束日期标记。1 是,0 否
DESCRIBE 定时器描述
IS_VALID 定时器有效标记,缺省为 0。0:表示已关闭定时器1:表示已启用定时器

下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整

vi /dmdb/dmdata/dmdb/dmtimer.ini [RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致 TYPE = 2 FREQ_MONTH_WEEK_INTERVAL = 1 FREQ_SUB_INTERVAL = 0 FREQ_MINUTE_INTERVAL = 0 START_TIME = 00:00:00 END_TIME = 23:59:59 DURING_START_DATE = 2026-05-19 17:57:15 DURING_END_DATE = 9999-12-31 23:59:59 NO_END_DATE_FLAG = 1 DESCRIBE = RT TIMER IS_VALID = 1

1.5 修改dmmonitor.ini

添加异步同步备库DW-YB1的相关配置

vi /dmdb/dmdata/dmdb/dmmonitor.ini #以下为异步备库 MON_DW_IP = 192.168.20.38:52143

2. 实时同步备库DW-SS2配置

2.1 修改dm.ini

在原有dm.ini文件的基础上启用定时器

vi /dmdb/dmdata/dmdb/dm.ini TIMER_INI=1

2.2 修改dmmal.ini

在原有dmmal.ini基础上增加异步备库DW-YB1的MAL配置项

与主库保持一致

vi /dmdb/dmdata/dmdb/dmmal.ini [MAL_INST3] MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP MAL_PORT = 61143 #MAL系统监听TCP连接的端口 MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址 MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致 MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口

2.3 修改dmarch.ini

在原有dmarch.ini基础上增加异步备库DW-YB1的MAL配置项

vi /dmdb/dmdata/dmdb/dmarch.ini [ARCHIVE_ASYNC] ARCH_TYPE = ASYNC #异步归档类型 ARCH_DEST = dmdb3 #异步归档目标实例名 ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致

2.4 配置dmtimer.ini

配置 dmtimer.ini,用于备库切换为主库后,定时触发实例发送归档日志到异步备库

下面示例中定时器配置为每天 00:00:00 触发主库发送归档日志到异步备库,可以根据实际情况再做调整

vi /dmdb/dmdata/dmdb/dmtimer.ini [RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致 TYPE = 2 FREQ_MONTH_WEEK_INTERVAL = 1 FREQ_SUB_INTERVAL = 0 FREQ_MINUTE_INTERVAL = 0 START_TIME = 00:00:00 END_TIME = 23:59:59 DURING_START_DATE = 2026-05-19 17:57:15 DURING_END_DATE = 9999-12-31 23:59:59 NO_END_DATE_FLAG = 1 DESCRIBE = RT TIMER IS_VALID = 1

2.5 修改dmmonitor.ini

添加异步同步备库DW-YB1的相关配置

vi /dmdb/dmdata/dmdb/dmmonitor.ini #以下为异步备库 MON_DW_IP = 192.168.20.38:52143

3. 异步备库DW-YB1配置

3.1 数据库实例初始化

除 instance_name 外与主备库保持一致

dminit path=/dmdb/dmdata instance_name=dmdb3 db_name=dmdb port_num=5238 PAGE_SIZE=32 CASE_SENSITIVE=1 CHARSET=1 SYSDBA_PWD='******' SYSAUDITOR_PWD='******' SYSSSO_PWD='******'

3.2 修改dm.ini

vi /dmdb/dmdata/dmdb/dm.ini DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 TIMER_INI = 1 #打开定时器,定时同步归档到级联异步备库。本篇未涉及级联异步备库,这一步可以省略 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息 ENABLE_ENCRYPT = 0 #关闭SSL加密

3.3 配置dmmal.ini

与主库保持一致

vi /dmdb/dmdata/dmdb/dmmal.ini MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间 [MAL_INST1] MAL_INST_NAME = dmdb1 #实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.20.36 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP MAL_PORT = 61141 #MAL系统监听TCP连接的端口 MAL_INST_HOST = 192.168.20.36 #实例的对外服务IP地址 MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听TCP连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = dmdb2 MAL_HOST = 192.168.20.37 MAL_PORT = 61142 MAL_INST_HOST = 192.168.20.37 MAL_INST_PORT = 5238 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142 [MAL_INST3] MAL_INST_NAME = dmdb3 #实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.20.38 #MAL系统监听TCP连接的IP地址,若有内网IP则用内网IP,没有和MAL_INST_HOST共用对外IP MAL_PORT = 61143 #MAL系统监听TCP连接的端口 MAL_INST_HOST = 192.168.20.38 #实例的对外服务IP地址 MAL_INST_PORT = 5238 #实例的对外服务端口,和dm.ini中的PORT_NUM一致 MAL_DW_PORT = 52143 #实例对应的守护进程监听TCP连接的端口 MAL_INST_DW_PORT = 33143 #实例监听守护进程 TCP 连接的端口

3.4 配置dmarch.ini

配置本地归档和异步归档

在异步归档配置项中,ARCH_DEST 表示当前实例需要同步归档数据的目标实例名。

vi /dmdb/dmdata/dmdb/dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdb/dmarch #本地归档文件路径 ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 2048 #单位 Mb,0 表示无限制,范围 1024~4294967294M ##以下配置为级联异步备库,若不涉及则忽略 [ARCHIVE_ASYNC] ARCH_TYPE = ASYNC #异步归档类型 ARCH_DEST = GRP1_LOCAL_02#异步归档目标实例名 ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致

3.5 配置dmtimer.ini

用于定时发送归档日志到异步备库,本篇不涉及,可忽略,若需要可参考1.4配置dmtimer.ini

3.6 配置dmwatcher.ini

配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE 配置并不起作用,此处配置为 MANUAL

vi /dmdb/dmdata/dmdb/dmwatcher.ini [GRP1] DW_TYPE = LOCAL #本地守护类型 DW_MODE = MANUAL #自动切换模式(当前为手动模式) DW_ERROR_TIME = 60 #远程守护进程故障认定时间 INST_RECOVER_TIME = 120 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 60 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一OGUID值 INST_INI = /dmdb/dmdata/dmdb/dm.ini #dm.ini配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3.7 配置dmmonitor.ini

与修改后的主库一致

vi /dmdb/dmdata/dmdb/dmmonitor.ini MON_DW_CONFIRM = 0 #确认监视器模式,缺省为 0。0:监控模式 1:确认模式 MON_LOG_PATH = /dmdb/dmdbms/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP1] MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以"IP:PORT"的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.20.36:52141 MON_DW_IP = 192.168.20.37:52142 #以下为异步备库的连接信息 MON_DW_IP = 192.168.20.38:52143

3.8 配置DmService和DmWatcherService启动脚本

cp $DM_HOME/bin/service_template/DmService $DM_HOME/bin/ cp $DM_HOME/bin/service_template/DmWatcherService $DM_HOME/bin/ vi $DM_HOME/bin/DmService INI_PATH="/dmdb/dmdata/dmdb/dm.ini" START_MODE=mount vi $DM_HOME/bin/DmWatcherService INI_PATH="/dmdb/dmdata/dmdb/dmwatcher.ini"

3.9 数据库相关配置

  1. 启动数据库

    DmService start
  2. 登录数据库,设置OGUID并修改数据库模式

    disql /nolog conn sysdba/"******":5238 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); sp_set_oguid(453331); alter database standby; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

3.10 注册集群系统服务

注册服务后可配置开机自动启动集群及数据库,正常都通过服务启动集群和数据库,不使用启动脚本

##两节点root都执行 cd /dmdb/dmdbms/script/root ./dm_service_installer.sh -t dmwatcher -p dmdb -watcher_ini /dmdb/dmdata/dmdb/dmwatcher.ini

通过 systemctl 启动集群和开机自启动可在部署完成后自行处理

4. 启动或重启守护进程,登录监视器观察

##主库和实时同步备库重启DmWatcherService DmWatcherService restart ##异步备库启动DmWatcherService DmWatcherService start ##启动监视器观察集群状态,建议3台服务器都观察 dmmonitor /dmdb/dmdata/dmdb/dmmonitor.ini

image.png

异步备库部署完成,监视器已监控到DW-YB1的信息

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服