在之前讲DW 主备类型的博客中我们了解到了第四种DW主备类型,异步主备:
DM7 达梦 数据库 数据守护(Data Watch) (2) — 主备类型
https://www.cndba.cn/dave/article/3666
异步备库一般用于历史数据统计、周期报表等对数据实时性要求不高的业务场合。异步归档时机可以选择在源库空闲的时候,可避免源库的业务高峰期同步数据对性能的影响。
每个 Primary 或者 Standby 模式的库,都可以配置最多 8 个异步备库。配置了异步备库的 Primary 或者 Standby 模式的库,统称为源库。可以在实时主备、MPP 主备和读写分离集群的主库和备库上配置异步备库,异步备库可级联配置,异步备库本身也可以作为源库配置异步备库。理论上守护系统中可配置的异步备库的数目只受 MAL 系统最大节点数(2048)的限制,但监视器上最多监视 16 个异备。
一个异步备库只能有一个源库,这个限制由用户在配置时保证。配置异步备库十分简单,确保源库和异步备库之间的 MAL 链路是正常的,在源库的 dm.ini 中打开定时器TIMER_INI 开关,同时配置文件 dmtimer.ini,由定时器定时触发源库发送归档日志到异步备库即可。异步归档的最小触发间隔是 1 分钟。
我们以之前实时主备环境为基础,配置异步主备:
DM7 达梦 数据库 数据守护(Data Watch) (6) — 实时主备环境搭建
https://www.cndba.cn/dave/article/3675
在这个实时主备的架构中,我们有一个主库一个备库。
1 环境说明
DM 软件安装和之前环境一样。我们在主库上在新增一个异步的备份,实例名:GRP1_LOCAL_03。 新环境如下:
配置环境说明
主机类型 | IP地址 | 实例名 | 操作系统 |
---|---|---|---|
主库 | 192.168.20.191(外部服务) 192.168.56.191(内部通信) |
GRP1_DAVE_01 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
备库 | 192.168.20.192(外部服务) 192.168.56.192(内部通信) |
GRP1_DAVE_02 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
异步备库 | 192.168.20.193(外部服务) 192.168.56.193(内部通信) |
GRP1_LOCAL_03 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
监控 | 192.168.56.190 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
端口规划
实例名 | PORT_NUM | DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
GRP1_DAVE_01 | 5236 | 5336 | 192.168.56.191 | 5436 | 5536 |
GRP1_DAVE_02 | 5237 | 5337 | 192.168.56.192 | 5437 | 5537 |
GRP1_LOCAL_03 | 5238 | 5338 | 192.168.56.193 | 5438 | 5538 |
因为之前2节点的数据守护环境已经搭建好,我们这里需改直接修改原有配置。
2 数据准备
在新节点上初始化数据库环境。
2.1 创建主库实例
DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580
在新的备库上创建实例:GRP1_LOCAL_03。
[dave@www.cndba.cn3 ~]$ dminit PATH=/dm/dmdbms/data DB_NAME=GRP1_LOCAL_03 INSTANCE_NAME=GRP1_LOCAL_03
initdb V7.6.0.95-Build(2018.09.13-97108)ENT
db version: 0x7000a
file dm.key not found, use default license!
License will expire in 14 day(s) on 2029-03-27
log file path: /dm/dmdbms/data/GRP1_LOCAL_03/GRP1_LOCAL_0301.log
log file path: /dm/dmdbms/data/GRP1_LOCAL_03/GRP1_LOCAL_0302.log
write to dir [/dm/dmdbms/data/GRP1_LOCAL_03].
create dm database success. 2029-03-13 09:28:17
[dave@www.cndba.cn3 ~]$
#注册服务:
[root@dm3 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/GRP1_LOCAL_03/dm.ini -p GRP1_LOCAL_03
Move the service script file(/dm/dmdbms/bin/DmServiceGRP1_LOCAL_03 to /etc/rc.d/init.d/DmServiceGRP1_LOCAL_03)
Finished to create the service (DmServiceGRP1_LOCAL_03)
[root@dm3 ~]#
#启动DB:
[dave@www.cndba.cn3 ~]$ service DmServiceGRP1_LOCAL_03 start
Starting DmServiceGRP1_LOCAL_03: [ OK ]
[dave@www.cndba.cn3 ~]$
#启动归档模式:
[dave@www.cndba.cn3 bin]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 11.249(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> alter database mount;
executed successfully
used time: 00:00:01.766. Execute id is 0.
SQL> alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 2.975(ms). Execute id is 0.
SQL>alter database archivelog;
executed successfully
used time: 9.097(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 656.739(ms). Execute id is 0.
SQL>
2.2 使用DMRMAN备份主库
对主库进行备份,这里采用在线备份:
[dave@www.cndba.cn1 ~]$ cd /dm/dmdbms/bin
[dave@www.cndba.cn1 bin]$ ./disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 9.531(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> backup database full backupset '/dm/dwbak/dave_full_02';
executed successfully
used time: 00:00:01.242. Execute id is 4.
SQL>
#将备份分发到对应的备库:
[dave@www.cndba.cn1 dmdbms]$ cd /dm/dwbak/
[dave@www.cndba.cn1 dwbak]$ ls
dave_full_01 dave_full_02
[dave@www.cndba.cn1 dwbak]$ scp -r dave_full_02 192.168.20.193:`pwd`
dmdba@192.168.20.193's password:
dave_full_02_1.bak 100% 40KB 39.5KB/s 00:00
dave_full_02.bak 100% 40MB 39.7MB/s 00:01
dave_full_02.meta 100% 73KB 72.5KB/s 00:00
[dave@www.cndba.cn1 dwbak]$
2.3 还原并恢复备库
[dave@www.cndba.cn3 dwbak]$ service DmServiceGRP1_LOCAL_03 stop
Stopping DmServiceGRP1_LOCAL_03: [ OK ]
[dave@www.cndba.cn3 dwbak]$
#还原数据库
[dave@www.cndba.cn3 dwbak]$ cd /dm/dmdbms/bin
[dave@www.cndba.cn3 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/GRP1_LOCAL_03/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_02'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT
RESTORE DATABASE '/dm/dmdbms/data/GRP1_LOCAL_03/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_02'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[4].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[3].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[2].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[1].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[0].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running, write dmrman info.
RESTORE DATABASE CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm/dwbak/dave_full_02] START......
total 4 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 5 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 8223.742(ms)
[dave@www.cndba.cn3 bin]$
#恢复数据库:
[dave@www.cndba.cn3 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/GRP1_LOCAL_03/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_02'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT
RECOVER DATABASE '/dm/dmdbms/data/GRP1_LOCAL_03/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_02'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[4].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[3].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[2].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[1].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running...[0].
checking if the database under system path [/dm/dmdbms/data/GRP1_LOCAL_03] is running, write dmrman info.
EP[0] max_lsn: 79653
RESTORE RLOG CHECK......
RESTORE RLOG ,gen tmp file......
RESTORE RLOG FROM BACKUPSET [/dm/dwbak/dave_full_02] START......
total 0 packages processed...
total 2 packages processed!
CMD END.CODE:[0]
EP[0] Recover LSN from 79654 to 79656.
Recover from archive log finished, time used:0.004s.
recover successfully!
time used: 7027.651(ms)
[dave@www.cndba.cn3 bin]$
3 配置主库 GRP1_DAVE_01
3.1 配置 dm.ini
在原有配置 dm.ini的基础上,打开定时器配置,其他配置不变。
#配置有异步归档时,打开定时器,定时同步归档到异备库
TIMER_INI = 1
3.2 配置 dmmal.ini
在原有配置 dmmal.ini的基础上,增加异步备库 GRP1_LOCAL_03 的 mal 配置项。
[MAL_INST3]
MAL_INST_NAME = GRP1_LOCAL_03 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.56.193 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5438 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.193 #实例的对外服务 IP 地址
MAL_INST_PORT = 5238 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5538 #实例对应的守护进程监听 TCP 连接的端口
3.3 配置 dmarch.ini
在原有配置 dmarch.ini的基础上,增加异步归档的配置项。
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_03 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和 dmtimer.ini 中的名称一致
3.4 配置 dmtimer.ini
配置 dmtimer.ini,用于定时触发实例发送归档日志到异步备库。
下面示例中定时器配置为每天分钟触发主库发送归档日志到异步备库,可以根据实际情况再做调整。
[RT_TIMER] #和 dmarch.ini 中的 ARCH_TIMER_NAME 一致
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 1
START_TIME = 00:00:00
END_TIME = 00:00:00
DURING_START_DATE = 2019-09-13 12:00:00
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT TIMER
IS_VALID = 1
4 配置备库 GRP1_DAVE_02
备库上没有异步归档配置,但是由于 dmmal.ini 必须配置一致,因此需要修改备库上的 dmmal.ini 配置,其他已有的配置项不需要改动。
4.1 配置 dmmal.ini
dmmal.ini 中需要增加到异步备库 GRP1_LOCAL_03 的 mal 配置项,可以直接拷贝主库 dmmal.ini修改后的 dmmal.ini 文件到本地目录。
4.2 其他配置说明
如果配置异步备库时,实时主备环境已经配置完成,这里对实时备库不需要再做其他配置,由于在配置异步备库之前实时主备环境已经被正常关闭,此处可以使用 mount 方式将实时备库重新启动,并启动实时备库的守护进程。
5 配置异步备库 GRP1_LOCAL_03
5.1 配置 dm.ini
配置备库的实例名 GRP1_LOCAL_03的dm.ini 参数如下:
#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_LOCAL_03
PORT_NUM = 5238 #数据库实例监听端口
DW_PORT = 5338 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
5.2 配置 dmmal.ini
同一个守护进程组中,所有主备库必须使用相同的 dmmal.ini 配置文件,这里可以直接拷贝主库配置 dmmal.ini的 dmmal.ini 文件到本地的目录中。
[dave@www.cndba.cn1 GRP1_DAVE_01]$ scp dmmal.ini 192.168.20.193:/dm/dmdbms/data/GRP1_LOCAL_03
dmdba@192.168.20.193's password:
dmmal.ini 100% 1179 1.2KB/s 00:00
[dave@www.cndba.cn1 GRP1_DAVE_01]$
5.3 配置 dmarch.ini
本地守护类型的备库只需要配置本地归档。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch #本地归档文件路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
5.4 配置 dmwatcher.ini
修改 dmwatcher.ini 配置守护进程,配置为本地守护类型,异步备库不具备故障自动切换等功能,DW_MODE 配置并不起作用,此处配置为 MANUAL 即可,另外异步备库不需要配置 dmwatcher.ctl 控制文件。
[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/GRP1_LOCAL_03/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dmserver #命令行方式启动
5.5 启动异步备库
以 mount 方式启动备库
./dmserver /dm/dmdbms/data/GRP1_LOCAL_03/dm.ini mount
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
5.6 设置 OGUID
启动命令行工具 DIsql,登录异步备库设置 OGUID 值。
[dave@www.cndba.cn3 bin]$ disql SYSDBA/SYSDBA@LOCALHOST:5238
Server[LOCALHOST:5238]:mode is primary, state is mount
login used time: 10.335(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 14.904(ms). Execute id is 1.
系统通过 OGUID 值确定一个守护进程组,由用户保证 OGUID 值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的 OGUID 值。
5.7 修改数据库模式
启动命令行工具 DIsql,登录异备库修改数据库为 Standby 模式。
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 10.846(ms). Execute id is 2.
SQL> ALTER DATABASE STANDBY;
executed successfully
used time: 21.071(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 7.190(ms). Execute id is 3.
SQL>
5.8 注册并启动守护进程
#注册:
[root@dm3 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/GRP1_LOCAL_03/dmwatcher.ini -p GRP1_LOCAL_03
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceGRP1_LOCAL_03 to /etc/rc.d/init.d/DmWatcherServiceGRP1_LOCAL_03)
Finished to create the service (DmWatcherServiceGRP1_LOCAL_03)
[root@dm3 ~]#
#启动:
[dave@www.cndba.cn3 bin]$ service DmWatcherServiceGRP1_LOCAL_03 start
Starting DmWatcherServiceGRP1_LOCAL_03: [ OK ]
[dave@www.cndba.cn3 bin]$
6 配置监视器
6.1 修改配置文件
在原有配置监视器的配置基础上,需要增加到异步备库守护进程的“IP:PORT”信息,否则监视器无法收到异步备库消息,其他配置项不需要改动。
修改 dmmonitor.ini 配置确认监视器,增加到 GRP1_LOCAL_03 守护进程的MON_DW_IP 配置项,需要找到 dmmal.ini 中实例 GRP1_LOCAL_03 的配置项信息,MON_DW_IP 中的 IP 信息和 dmmal.ini 配置项中的 MAL_HOST 一致,PORT 信息和dmmal.ini 配置项中的 MAL_DW_PORT 配置项保持一致。
[dmdba@monitor ~]$ cat /dm/dmdbms/data/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/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.56.191:5536
MON_DW_IP = 192.168.56.192:5537
MON_DW_IP = 192.168.56.193:5538
6.2 重启监视器
[dmdba@monitor ~]$ service DmMonitorServicedave stop
Stopping DmMonitorServicedave: [ OK ]
[dmdba@monitor ~]$ service DmMonitorServicedave start
Starting DmMonitorServicedave: [ OK ]
[dmdba@monitor ~]$
7 验证
7.1 主库创建测试数据
[dave@www.cndba.cn1 GRP1_DAVE_01]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 8.368(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> create table huaining as select * from sysobjects;
executed successfully
used time: 26.935(ms). Execute id is 3.
SQL>
7.2 实时备库查询
#同步正常:
[dave@www.cndba.cn2 GRP1_DAVE_02]$ disql SYSDBA/SYSDBA@LOCALHOST:5237
Server[LOCALHOST:5237]:mode is standby, state is open
login used time: 7.845(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select count(1) from huaining;
LINEID COUNT(1)
---------- --------------------
1 1278
used time: 6.625(ms). Execute id is 1.
SQL>
7.3 异步备库查询
#也同步过来了:
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ disql SYSDBA/SYSDBA@LOCALHOST:5238
Server[LOCALHOST:5238]:mode is standby, state is open
login used time: 9.020(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select count(1) from huaining;
LINEID COUNT(1)
---------- --------------------
1 1278
used time: 7.269(ms). Execute id is 1.
SQL>
7.4 查看进程信息
#主节点查询:
#查看守护进程:
SQL> select * from v$dmwatcher;
LINEID N_GROUP GROUP_NAME INST_NAME DW_TYPE DW_MODE AUTO_RESTART DW_STATUS DW_SUB_STATUS LAST_MSG_TIME SWITCH_COUNT CTL_NUM INST_NUM
---------- ----------- ---------- ------------ ------- ------- ------------ --------- --------------- --------------------------- ------------ ----------- -----------
MAX_CONN_NUM
------------
1 1 GRP1 GRP1_DAVE_01 GLOBAL AUTO 1 OPEN SUB_STATE_START 2019-09-13 16:18:46.000000 0 1 1
2
used time: 2.680(ms). Execute id is 4.
#查看MAL:
SQL> select * from v$mal_link_status;
LINEID SRC_SITE DEST_SITE CTL_LINK_STATUS DATA_LINK_STATUS
---------- ------------ ------------- --------------- ----------------
1 GRP1_DAVE_01 GRP1_DAVE_02 CONNECTED CONNECTED
2 GRP1_DAVE_01 GRP1_LOCAL_03 CONNECTED CONNECTED
used time: 1.803(ms). Execute id is 5.
SQL>
#查看定时器:
SQL> select * from V$DM_TIMER_INI;
LINEID TIMER_NAME TYPE FREQ_INTERVAL FREQ_SUB_INTERVAL FREQ_MINUTE_INTERVAL START_TIME END_TIME DURING_START_DATE
---------- ---------- ----------- ------------- ----------------- -------------------- --------------- --------------- ---------------------------
DURING_END_DATE NO_END_DATE_FLAG DESCRIBE IS_VALID
--------------------------- ---------------- -------- --------
1 RT_TIMER 2 1 0 1 00:00:00 00:00:00 2019-09-13 12:00:00.000000
9999-12-31 23:59:59.000000 Y RT TIMER Y
used time: 2.143(ms). Execute id is 6.
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。