DM V8主备数据库复制的实现
一、背景
1.1需求
近期A系统持续受业务连续性的困扰,决定搭建DMV8数据库的高可用技术,最终选择了主备实时系统,满足所要达到应对主节点服务器硬件故障、主数据中心机房不可用的场景。
官方技术手册有相关描述实时主备系统的的组成,主要包括:由主数据库、实时备份数据库(备数据库)、守护进程和监视器组成。
1.2实时数据复制
翻译成大白话就是将REDO LOG打包通过复制功能,从主数据库向备数据库实时复制,备数据库将REDO LOG 写入到本地的联机REDO日志文件,通过REDO LOG回放完成数据的同步。
1.3实时同步取决于网络
显而易见,此技术是数据库层面的,要依托于成熟的IP网络。主数据库是通过网络将相关LOG传输到备节点,就要求网络质量非常高,且带宽足够大。同时备数据库的对REDO LOG回放有一定时间要求,也就是可能存在于数据库表中数据并非实时,这种情况尽可能将备数据库的服务器配置成高些,提升RLOG的回放速度。
1.4 定义
MAL系统:MAL 系统是基于 TCP 协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。 DM 通过 MAL 系统实现 Redo 日志传输,以及其他一些实例间的消息通讯。
OGUID:配置成主备数据库复制的组ID
二、规划
2.1相关信息
(1)基本信息
(2)扩展信息
2.2系统示意图
三、主备实时数据库配置
3.1前置条件
3.1.1主备库均打开ARCHIVELOG模式
分别执行:
sql>alter database mount;
sql>alter database archivelog;
sql>alter database open;
sql>alter database add archivelog ‘DEST=/home/dmdba,TYPE=local,FILE_SIZE=512,SPACE_LIMIT=40960’
3.1.2主备库配置ORGUID
sql>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
sql>sp_set_oguid(453331);
sql>SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
3.2 主数据库的配置
说明:以下直接用vi dm.ini编辑即可
3.2.1配置dm.ini
INSTANCE_NAME = DAMENG1
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60 (接收守护进程消息超时时间为60秒)
ALTER_MODE_STATUS = 0 (禁止手工方式修改实例模式/状态/OGUID)
ENABLE_OFFLINE_TS = 2 (禁止备库 OFFLINE 表空间)
MAL_INI = 1 (打开 MAL 系统)
3.2.2配置dmmal.ini
官方文档特别强调,在配置 MAL 系统时各主备库的 dmmal.ini 配置必须完全一致,其中 MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME =DAMENT1
MAL_HOST = 10.1.1.1 (MAL 系统监听IP 地址)
MAL_PORT = 50000
MAL_INST_HOST = 192.168.1.1 (实例的对外服务 IP 地址)
MAL_INST_PORT = 5236
MAL_DW_PORT = 50001
MAL_INST_DW_PORT = 50002
[MAL_INST2]
MAL_INST_NAME =DAMENT2
MAL_HOST = 10.1.1.2 (MAL 系统监听IP 地址)
MAL_PORT = 50000
MAL_INST_HOST = 192.168.1.2 (实例的对外服务 IP 地址)
MAL_INST_PORT = 5236
MAL_DW_PORT = 50001
MAL_INST_DW_PORT = 50002
3.2.3配置 dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO (自动切换模式)
DW_ERROR_TIME = 30 (远程守护进程故障认定时间)
INST_RECOVER_TIME = 60 (主库守护进程启动恢复的间隔时间)
INST_ERROR_TIME = 30 (本地实例故障认定时间)
INST_OGUID = 453331 (OGUID组ID)
INST_INI = /home/dmdba/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
3.2.4启动主数据库
#systemctl start DmServiceDMSERVER1
#disql sysdba/
Sql>alter database mount;
说明:此处为数据库仍为mount,由后面守护进程来加载启动
3.2.5修改数据库为primary
Sql>alter database primary;
3.3 备数据库的配置
说明:以下直接用vi dm.ini编辑即可
3.3.1配置dm.ini
INSTANCE_NAME = DAMENG2
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60 (接收守护进程消息超时时间为60秒)
ALTER_MODE_STATUS = 0 (禁止手工方式修改实例模式/状态/OGUID)
ENABLE_OFFLINE_TS = 2 (禁止备库 OFFLINE 表空间)
MAL_INI = 1 (打开 MAL 系统)
3.3.2配置dmmal.ini
官方文档特别强调,在配置 MAL 系统时各主备库的 dmmal.ini 配置必须完全一致,其中 MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME =DAMENT1
MAL_HOST = 10.1.1.1 (MAL 系统监听IP 地址)
MAL_PORT = 50000
MAL_INST_HOST = 192.168.1.1 (实例的对外服务 IP 地址)
MAL_INST_PORT = 5236
MAL_DW_PORT = 50001
MAL_INST_DW_PORT = 50002
[MAL_INST2]
MAL_INST_NAME =DAMENT2
MAL_HOST = 10.1.1.2 (MAL 系统监听IP 地址)
MAL_PORT = 50000
MAL_INST_HOST = 192.168.1.2 (实例的对外服务 IP 地址)
MAL_INST_PORT = 5236
MAL_DW_PORT = 50001
MAL_INST_DW_PORT = 50002
3.3.3配置 dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO (自动切换模式)
DW_ERROR_TIME = 30 (远程守护进程故障认定时间)
INST_RECOVER_TIME = 60 (主库守护进程启动恢复的间隔时间)
INST_ERROR_TIME = 30 (本地实例故障认定时间)
INST_OGUID = 453331 (OGUID组ID)
INST_INI = /home/dmdba/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
3.3.4启动备数据库
#systemctl start DmServiceDMSERVER2
#disql sysdba/
Sql>alter database mount;
说明:此处为数据库仍为mount,由后面守护进程来加载启动
3.3.5修改数据库为standby
Sql >SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
Sql >alter database standby;
Sql >SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
四、配置实例监控器与启动主备库模式
4.1配置实例监控器
4.1.1配置监视器dmmonitor.ini
说明:配置文件中的MON_DW_IP和PORT要与dmmal.ini 中的MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL =10
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 10.1.1.1:50001
MON_DW_IP = 10.1.1.2.1.2:50001
4.2启动监视器守护进程
$dmwatcher /home/dmdba/dmdbms/DAMENG/dmwatcher.ini
注意:我是加了环境变量到.bash_profile,方便执行相关命令
4.3启动监视器
$dmmonitor /home/dmdba/dmdbms/DAMENG/dmmonitor.ini
注意:我是加了环境变量到.bash_profile,方便执行相关命令
五、总结
前面在3.2.5、3.3.5分别提到数据库是处理mount状态,在4.2步时由dmwatcher加载并启动数据库状态为open。
此文档省去数据库的安装等过程,只展现了主备库配置过程还算容易,关键是后续的维护。
至此,整体配置完成,DM数据库仍在学习当中,难免有指令遗漏问题,同时文章中如有不妥之处还望大家指正。