注册
DM8 数据守护实时主备部署
专栏/技术分享/ 文章详情 /

DM8 数据守护实时主备部署

歪比巴卜 2026/08/28 95 0 0
摘要

DM8 数据守护实时主备部署

1. 部署目标与工作原理

DM 数据守护通过把主库产生的 Redo 日志发送至备库,并在备库重演日志,实现主备数据同步和故障切换。

本方案包含:

  • 主库:GRP1_RT_01
  • 实时备库:GRP1_RT_02
  • 两个守护进程:分别监控本机数据库
  • 一个确认监视器:负责自动故障切换确认

2. 示例环境规划

2.1 主机与目录

项目 主库 备库
主机 IP 192.168.52.144 192.168.52.145
实例名 GRP1_RT_01 GRP1_RT_02
数据守护组 GRP1 GRP1
数据库端口 32141 32142
DM 安装目录 /home/dmdba/dmdbms/bin /home/dmdba/dmdbms/bin
数据目录 /dmdata/data/DAMENG1 /dmdata/data/DAMENG1
OGUID 453331 453331

本次部署中监视器放在主库服务器。

2.2 端口规划

实例名 PORT_NUM MAL_INST_DW_PORT MAL_PORT MAL_DW_PORT
GRP1_RT_01 32141 33141 61141 52141
GRP1_RT_02 32142 33142 61142 52142

说明:

  • PORT_NUM:数据库对外服务端口。
  • MAL_PORT:数据库之间 MAL 通信端口。
  • MAL_DW_PORT:对应守护进程的监听端口,监视器连接此端口。
  • MAL_INST_DW_PORT:数据库实例监听守护进程连接的端口。

3. 配置主备数据库

3.1 配置 dm.ini

主库:修改以下参数,位置在 /dmdata/data/DAMENG1/dm.ini

INSTANCE_NAME = GRP1_RT_01 PORT_NUM = 32141 DW_INACTIVE_INTERVAL = 60 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 MAL_INI = 1 ARCH_INI = 1 RLOG_SEND_APPLY_MON = 64

备库: 修改以下参数,位置在/dmdata/data/DAMENG1/dm.ini

INSTANCE_NAME = GRP1_RT_02 PORT_NUM = 32142 DW_INACTIVE_INTERVAL = 60 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2 MAL_INI = 1 ARCH_INI = 1 RLOG_SEND_APPLY_MON = 64

3.2 配置 dmmal.ini

主备两端使用内容完全相同的 dmmal.ini

vi /dmdata/data/DAMENG1/dmmal.ini
MAL_CHECK_INTERVAL = 5 ##MAL链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 ##判定MAL链路断开的时间 [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 ##实例名,和dm.ini中的INSTANCE_NAME一致 MAL_HOST = 192.168.52.144 ##MAL系统监听TCP连接的IP地址 MAL_PORT = 61141 ##MAL系统监听TCP连接的端口 MAL_INST_HOST = 192.168.52.144 ##实例的对外服务IP地址 MAL_INST_PORT = 32141 ##实例的对外服务端口,和dm.ini中的PORT_NUM一致 MAL_DW_PORT = 52141 ##实例本地的守护进程监听TCP连接的端口 MAL_INST_DW_PORT = 33141 ##实例监听守护进程TCP连接的端口 [MAL_INST2] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 192.168.52.145 MAL_PORT = 61142 MAL_INST_HOST = 192.168.52.145 MAL_INST_PORT = 32142 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

3.3 配置主库 dmarch.ini

vi /dmdata/data/DAMENG1/dmarch.ini
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ##实时归档类型 ARCH_DEST = GRP1_RT_02 ##实时归档目标实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

3.4 配置备库 dmarch.ini

vi /dmdata/data/DAMENG1/dmarch.ini
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME ARCH_DEST = GRP1_RT_01 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0

主备归档目标必须互相指向对方的实例名。

3.5. 配置主库守护进程

主库:

创建 /dmdata/data/DAMENG1/dmwatcher.ini

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

备库:

vi /dmdata/data/DAMENG1/dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL ##全局守护类型 DW_MODE = AUTO ##自动切换模式 DW_ERROR_TIME = 10 ##远程守护进程故障认定时间 INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 ##本地实例故障认定时间 INST_OGUID = 453331 ##守护系统唯一OGUID值 INST_INI = /dmdata/data/DAMENG1/dm.ini ##dm.ini配置文件路径 INST_AUTO_RESTART = 1 ##打开实例的自动启动功能 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver ##命令行方式启动 RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阈值,默认关闭
  • INST_OGUID 必须与数据库和监视器的 OGUID 一致。
  • INST_INI 必须指向本机实际启动使用的 dm.ini

4. 设置 OGUID 和主备角色

4.1 主库

以 Mount 方式启动主库:

./dmserver /dmdata/data/DAMENG1/dm.ini mount

启动命令行工具 DIsql,登录主库设置 OGUID 值,修改数据库为 PRIMARY 模式:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>sp_set_oguid(453331); SQL>ALTER DATABASE PRIMARY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

image.png

4.2 备库

以 Mount 方式启动备库:

./dmserver /dmdata/data/DAMENG1/dm.ini mount

启动命令行工具 DIsql,登录备库设置 OGUID 值,修改数据库为 STANDBY 模式:

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>sp_set_oguid(453331); SQL>alter database standby; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

image.png

5. 配置单实例监视器

创建 /dmdata/data/dmmonitor.ini

vi  /dmdata/data/dmmonitor.ini
MON_DW_CONFIRM = 1 ##确认监视器模式 MON_LOG_PATH = /dmdata/data/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.52.144:52141 MON_DW_IP = 192.168.52.145:52142

注意事项:

  • MON_DW_IP 必须与 dmmal.iniMAL_HOST:MAL_DW_PORT 对应。

6. 启动守护进程

进入到安装数据库的bin目录下,使用工具启动各个主备库上的守护进程:

./dmwatcher /dmdata/data/DAMENG1/dmwatcher.ini

image.png

7. 启动监视器

启动监视器命令:

./dmmonitor /dm/data/dmmonitor.ini

image.png

8. 遇到的问题以及处理

8.1 故障现象

监视器启动后曾出现以下信息:

组(GRP1)中没有活动实例或者监视器还未收到守护进程消息

image.png

进一步检查发现数据库查询 V$INSTANCE 显示实例名为 DMSERVER,而不是配置中的真实实例名。

image.png

8.2 原因分析

dm.ini 中的 INSTANCE_NAME 已经修改,但当时运行的数据库进程仍然使用启动时加载的旧配置。配置文件被修改,并不代表运行中的实例已立即采用新值。

虚拟机重启后,数据库、watcher 和监视器重新启动,数据库进程重新读取 dm.iniV$INSTANCE.INSTANCE_NAME 显示为正确的 GRP1_RT_01GRP1_RT_02,watcher 随后识别到本地实例,集群恢复正常。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服