达梦数据库级联备库灾备方案
概述
本篇文档主要是基于双机房环境下,一主一实时备库一订阅备库一级联订阅备库四节点架构的环境搭建。
环境搭建
架构图
环境信息
主库A | 备库B | 订阅备库C | C级联订阅备D | 监视器 | |
---|---|---|---|---|---|
ip | 192.168.43.132 | 192.168.43.133 | 192.168.43.135 | 192.168.43.134 | 192.168.43.135 |
INSTANCE_NAME | DMSERVER1 | DMSERVER2 | GRP1_LOCAL_01 | SUBSCRIBE2 | |
PORT_NUM | 5236 | 5236 | 5236 | 5237 | |
MAL_INST_PORT | 5236 | 5236 | 5236 | 5237 | |
MAL_INST_DW_PORT | 45121 | 45101 | 33143 | 33144 | |
MAL_DW_PORT | 65121 | 65101 | 52143 | 52144 | |
MAL_PORT | 55121 | 55101 | 61143 | 61144 | |
软件安装路径 | /home/dmdba/dmdbms | /home/dmdba/dmdbms | /home/dmdba/dmdbms | /home/dmdba/dmdbms | /home/dmdba/dmdbms |
数据库实例路径 | /home/dmdba/dmdata | /home/dmdba/dmdata | /home/dmdba/dmdata | /home/dmdba/dmdata | /home/dmdba/dmdata |
DB_NAME | DAMENG | DAMENG | DAMENG | DMTEST | |
Oguid | 453331 |
搭建步骤
搭建实时主备A、B(手动切换)
这里搭好实时主备后,主库做一个全库备份拷贝到C和D服务器上。
搭建订阅备库C及级联订阅备库D
搭建订阅备库C
配置/etc/dm_svc.conf
这里配置服务名中login_mode为3,这样订阅备库C会优先从实时备库中同步数据,减少对主库的影响,但同时会产生一定的数据差。
TIME_ZONE=(480)
LANGUAGE=(CN)
GRP1=(192.168.43.132:5236,192.168.43.133:5236)
[GRP1]
TIME_ZONE=(+480)
LOGIN_MODE=(3) ##优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式
SWITCH_TIME=(3)
SWITCH_INTERVAL=(1000)
初始化C库,并修改配置文件
参照达梦单机安装手册安装C库
#使用A库的备份对C库进行还原
restore database ‘/home/dmdba/dmdata/DAMENG/dm.ini’ from backupset ‘/home/dmdba/fullbak0428’;
recover database ‘/home/dmdba/dmdata/DAMENG/dm.ini’ from backupset ‘/home/dmdba/fullbak0428’;
recover database ‘/home/dmdba/dmdata/DAMENG/dm.ini’ update db_magic;
配置dm.ini,开启arch_ini和TIMER_INI
#配置有订阅归档时,打开定时器,定时同步归档到订阅备库
INSTANCE_NAME = GRP1_LOCAL_01
PORT_NUM = 5236
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
TIMER_INI = 1 #dmtimer.ini
配置dmarch.ini
订阅备库配置本地归档和订阅归档。
订阅备库通过在 ARCH_DEST 中配置一个 disql 登录串来指定源库。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 20480
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCHIVE_SUBSCRIBE1]
ARCH_TYPE = SUBSCRIBE
ARCH_SUBSCRIBE_MODE = 3
ARCH_DEST = SYSDBA/SYSDBA@GRP1
ARCH_TIMER_NAME = SUBSCRIBE_TIMER
ARCH_THRESHOLD_PER_SECOND = 0
ARCH_SEND_DELAY = 0
配置dmtimer.ini
订阅备库需要开启定时器。
下面示例中定时器配置为每天每10s 触发订阅备库获取源库的归档日志,可以根据实际情况再做调整。
#dm.ini
TIMER_TRIG_CHECK_INTERVAL = 1 #设置服务器端每1秒检查触发器
#dmtimer.ini
[SUBSCRIBE_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致
TYPE= 10
FREQ_MONTH_WEEK_INTERVAL=
FREQ_SUB_INTERVAL=
FREQ_MINUTE_INTERVAL=
REPEAT_INTERVAL= FREQ=SECONDLY;INTERVAL=10 #每10秒触发一次C库向源库获取归档并重演
START_TIME=
END_TIME=
DURING_START_DATE=
DURING_END_DATE=
NO_END_DATE_FLAG= 1
DESCRIBE= RT TIMER
IS_VALID= 1
配置 dmmal.ini
订阅备库与主库之间并不依赖 dmmal.ini 进行通讯,但为了配置守护进程和监视器,需要配置dmmal.ini进行通信,下面文件内容四个节点要保持相同。(前面实时主备AB的dmmal.ini文件需要补充CD节点的mal信息)。
修改订阅备库 dmmal.ini,设置如下
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.43.132
MAL_PORT = 55121
MAL_INST_HOST = 192.168.43.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.43.133
MAL_PORT = 55101
MAL_INST_HOST = 192.168.43.133
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_01
MAL_HOST = 192.168.43.135
MAL_PORT = 61143
MAL_INST_HOST = 192.168.43.135
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
[MAL_INST4]
MAL_INST_NAME = SUBSCRIBE2 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.43.134 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61144 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.43.134 #实例的对外服务 IP 地址
MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52144 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33144 #实例监听守护进程 TCP 连接的端口
配置 dmwatcher.ini
[GRP1]
DW_TYPE = LOCAL #守护进程模式为本地守护类型
DW_MODE = MANUAL
DW_ERROR_TIME = 15
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 15
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdata/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
注册守护进程服务:
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdata/DAMENG/dmwatcher.ini -p dw2
启动至mount并修改模式
./dmserver /home/dmdba/dmdata/DAMENG/dm.ini mount
启动命令行工具 DIsql,设置 OGUID 值,然后修改数据库模式
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(453331); – 设置 OGUID
ALTER DATABASE STANDBY; – 修改数据库模式
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
然后启动守护进程,守护进程启动后,进入 Startup 状态,此时实例处于 Mount 状态,订阅备库的守护进程会将本地实例自动 Open,并切换守护进程自身为 Open 状态。
./DmServicedmserver2 start
./DmWatcherServicedw2 start
搭建级联订阅备库D
初始化D库,并修改配置文件
参照达梦单机安装手册安装D库
#使用A库的备份对D库进行还原
restore database ‘/home/dmdba/dmdata/DMTEST/dm.ini’ from backupset ‘/home/dmdba/fullbak0428’;
recover database ‘/home/dmdba/dmdata/DMTEST/dm.ini’ from backupset ‘/home/dmdba/fullbak0428’;
recover database ‘/home/dmdba/dmdata/DMTEST/dm.ini’ update db_magic;
配置dm.ini,开启arch_ini和TIMER_INI
#配置有订阅归档时,打开定时器,定时同步归档到订阅备库
INSTANCE_NAME = SUBSCRIBE2
PORT_NUM = 5237
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
TIMER_INI = 1 #dmtimer.ini
配置dmarch.ini
订阅备库配置本地归档和订阅归档。
订阅备库通过在 ARCH_DEST 中配置一个 disql 登录串来指定源库。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/DAMENG/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 20480
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCHIVE_SUBSCRIBE1]
ARCH_TYPE = SUBSCRIBE
ARCH_SUBSCRIBE_MODE = 3
ARCH_DEST = SYSDBA/SYSDBA@192.168.43.135:5236 #连接订阅备库C库作为源库
ARCH_TIMER_NAME = SUBSCRIBE_TIMER
ARCH_THRESHOLD_PER_SECOND = 0
ARCH_SEND_DELAY = 0
配置dmtimer.ini
订阅备库需要开启定时器。
下面示例中定时器配置为每天每10s 触发订阅备库获取源库的归档日志,可以根据实际情况再做调整。
#dm.ini
TIMER_TRIG_CHECK_INTERVAL = 1 #设置服务器端每1秒检查触发器
#dmtimer.ini
[SUBSCRIBE_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致
TYPE= 10
FREQ_MONTH_WEEK_INTERVAL=
FREQ_SUB_INTERVAL=
FREQ_MINUTE_INTERVAL=
REPEAT_INTERVAL= FREQ=SECONDLY;INTERVAL=10 #每10秒触发一次C库向源库获取归档并重演
START_TIME=
END_TIME=
DURING_START_DATE=
DURING_END_DATE=
NO_END_DATE_FLAG= 1
DESCRIBE= RT TIMER
IS_VALID= 1
配置 dmmal.ini:
#保持和其他节点的dmmal.ini文件一致,参照2.2.2.1.2.5章节dmmal.ini配置。
配置 dmwatcher.ini:
[GRP1]
DW_TYPE = LOCAL #本地模式
DW_MODE = MANUAL
DW_ERROR_TIME = 15
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 15
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdata/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
使用root注册dmwatcher服务
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/dmdata/DMTEST/dmwatcher.ini -p dw2
启动至mount并修改模式
./dmserver /home/dmdba/dmdata/DMTEST/dm.ini mount
启动命令行工具 DIsql,设置 OGUID 值,然后修改数据库模式
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(453331); – 设置 OGUID
ALTER DATABASE STANDBY; – 修改数据库模式
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
然后启动守护进程,守护进程启动后,进入 Startup 状态,此时实例处于 Mount 状态,订阅备库的守护进程会将本地实例自动 Open,并切换守护进程自身为 Open 状态。
./DmServiceDMSERVER start
./DmWatcherServicedw2 start
配置监视器(手动切换)
vi /home/dmdba/dmdata/DAMENG/dmmonitor.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_DW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.43.133:65101
MON_DW_IP = 192.168.43.132:65121
MON_DW_IP = 192.168.43.135:52143
MON_DW_IP = 192.168.43.134:52144
注:确认监视器需修改dmmonitor_auto.ini,此处略
#使用root用户注册非确认监视器服务
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmmonitor -monitor_ini /home/dmdba/dmdata/DAMENG/dmmonitor.ini -p GRP1
#启动监视器服务
DmMonitorServiceGRP1 start
A主B备C订阅备D级联订阅备四节点集群搭建完毕的相关配置文件可参考附件。
重启集群所有服务,查看集群状态
前台启动非确认监视器,方便检查状态,非确认监视器可以有多个
cp dmmonitor.ini dmmonitor_manual.ini
/home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdata/DAMENG/dmmonitor_manual.ini
登录监视器查看集群状态
Login
Show
Tip
集群状态正常
主要注意以下几个字段
WSTATUS:实例是否处于open状态
INAME:实例名
INST_OK:实例状态是否ok
IMODE:实例模式为primary 或standby
RTYPE:归档类型
RSTAT:归档状态是否有效
FLSN:已经写入联机日志文件的最大 LSN 值
如果是备库模式会显示备库重演的信息
REDOS_PARALLEL_NUM:备库并行重演线程数
RLSN:备库针对主库此节点已经重演到的 LSN 值
SLSN:备库可重演到的最大 LSN
KLSN:非自动切换模式下,备库保持不重演最大 LSN
状态检查:由上图观察各节点的flsn号是否一致,或是否在缩小,只要差值在缩小在变动说明集群正常。从监视器日志看订阅备库显示的源库都为DMSERVER1,即主库,实际上订阅备库的源库可以从V$SUBSCRIBE_HISTORY视图查看。
(另外还可以分别登录主备库查询v$rlog视图,查看主备库的当前日志事务号 LSN 的情况。)
登录备库C可以查看订阅源库连接的为备库B DMSERVER2
select * from v$arch_status;
select source_inst_name from V$SUBSCRIBE_HISTORY;
登录主库A新建表,验证在B\C\D查询数据是否同步。
https://eco.dameng.com