DM 数据守护通过把主库产生的 Redo 日志发送至备库,并在备库重演日志,实现主备数据同步和故障切换。
本方案包含:
GRP1_RT_01GRP1_RT_02| 项目 | 主库 | 备库 |
|---|---|---|
| 主机 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 |
本次部署中监视器放在主库服务器。
| 实例名 | 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:数据库实例监听守护进程连接的端口。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
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
dmarch.inivi /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
dmarch.inivi /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
主备归档目标必须互相指向对方的实例名。
主库:
创建 /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。以 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);
以 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);
创建 /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.ini 的 MAL_HOST:MAL_DW_PORT 对应。进入到安装数据库的bin目录下,使用工具启动各个主备库上的守护进程:
./dmwatcher /dmdata/data/DAMENG1/dmwatcher.ini
启动监视器命令:
./dmmonitor /dm/data/dmmonitor.ini
监视器启动后曾出现以下信息:
组(GRP1)中没有活动实例或者监视器还未收到守护进程消息
进一步检查发现数据库查询 V$INSTANCE 显示实例名为 DMSERVER,而不是配置中的真实实例名。
dm.ini 中的 INSTANCE_NAME 已经修改,但当时运行的数据库进程仍然使用启动时加载的旧配置。配置文件被修改,并不代表运行中的实例已立即采用新值。
虚拟机重启后,数据库、watcher 和监视器重新启动,数据库进程重新读取 dm.ini,V$INSTANCE.INSTANCE_NAME 显示为正确的 GRP1_RT_01、GRP1_RT_02,watcher 随后识别到本地实例,集群恢复正常。
文章
阅读量
获赞
