1 环境说明
在之前的博客我们搭建了3节点的读写分离集群,如下:
DM7 达梦 数据库 数据守护(Data Watch) (7) — 读写分离集群搭建
https://www.cndba.cn/dave/article/3677
本篇我我们对这个环境添加备库3。
配置环境说明
主机类型 | IP地址 | 实例名 | 操作系统 |
---|---|---|---|
主库 | 192.168.20.193(外部服务) 192.168.56.193(内部通信) |
GRP2_RWW_01 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
备库1 | 192.168.20.194(外部服务) 192.168.56.194(内部通信) |
GRP2_RWW_02 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
备库2 | 192.168.20.195(外部服务) 192.168.56.195(内部通信) |
GRP2_RWW_03 | NeoKylin Linux General Server release 6.0 (Dhaulagiri) |
备库3 | 192.168.20.192(外部服务) 192.168.56.192(内部通信) |
GRP2_RWW_04 | 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 |
---|---|---|---|---|---|
GRP2_RWW_01 | 5236 | 5336 | 192.168.56.193 | 5436 | 5536 |
GRP2_RWW_02 | 5237 | 5337 | 192.168.56.194 | 5437 | 5537 |
GRP2_RWW_03 | 5238 | 5338 | 192.168.56.195 | 5438 | 5538 |
GRP2_RWW_04 | 5239 | 5339 | 192.168.56.192 | 5439 | 5539 |
2 数据准备
2.1 初始化备库3
DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580
在主库使用dminit 创建GRP2_RWW_04实例:
[dave@www.cndba.cn2 GRP1_DAVE_02]$ dminit PATH=/dm/dmdbms/data DB_NAME=CNDBA INSTANCE_NAME=GRP2_RWW_04
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 2019-09-27
log file path: /dm/dmdbms/data/CNDBA/CNDBA01.log
log file path: /dm/dmdbms/data/CNDBA/CNDBA02.log
write to dir [/dm/dmdbms/data/CNDBA].
create dm database success. 2019-09-13 17:14:01
[dave@www.cndba.cn2 GRP1_DAVE_02]$
#注册服务:
[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/CNDBA/dm.ini -p GRP2_RWW_04
Move the service script file(/dm/dmdbms/bin/DmServiceGRP2_RWW_04 to /etc/rc.d/init.d/DmServiceGRP2_RWW_04)
Finished to create the service (DmServiceGRP2_RWW_04)
[root@dm2 ~]#
#启动DB:
[dave@www.cndba.cn2 bin]$ service DmServiceGRP2_RWW_04 start
Starting DmServiceGRP2_RWW_01: [ OK ]
[dave@www.cndba.cn2 bin]$
#启动归档模式:
[dave@www.cndba.cn2 CNDBA]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.480(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.905. 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.864(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 8.586(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 741.576(ms). Execute id is 0.
SQL>
2.2 使用DMRMAN备份主库
对主库进行联机备份:
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ cd /dm/dmdbms/bin
[dave@www.cndba.cn3 bin]$ ./disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 9.169(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_03';
executed successfully
used time: 00:00:01.485. Execute id is 20.
SQL>
#将备份发到备库3:
[dave@www.cndba.cn3 bin]$ cd /dm/dwbak
[dave@www.cndba.cn3 dwbak]$ ls
dave_full_02 dave_full_03
[dave@www.cndba.cn3 dwbak]$ scp -r dave_full_03 192.168.20.192:`pwd`
dmdba@192.168.20.192's password:
dave_full_03.meta 100% 73KB 72.5KB/s 00:00
dave_full_03_1.bak 100% 5120 5.0KB/s 00:00
dave_full_03.bak 100% 120MB 23.9MB/s 00:05
[dave@www.cndba.cn3 dwbak]$
2.3 还原并恢复备库
#还原数据库
[dave@www.cndba.cn2 bin]$ service DmServiceGRP2_RWW_04 stop
Stopping DmServiceGRP2_RWW_04: [ OK ]
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT
RESTORE DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[4].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[3].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[2].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[1].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[0].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running, write dmrman info.
RESTORE DATABASE CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm/dwbak/dave_full_03] START......
total 6 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 7 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 8189.784(ms)
#恢复
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT
RECOVER DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[4].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[3].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[2].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[1].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[0].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running, write dmrman info.
EP[0] max_lsn: 257098
RESTORE RLOG CHECK......
RESTORE RLOG ,gen tmp file......
RESTORE RLOG FROM BACKUPSET [/dm/dwbak/dave_full_03] START......
total 0 packages processed...
total 2 packages processed!
CMD END.CODE:[0]
EP[0] Recover LSN from 257099 to 257101.
Recover from archive log finished, time used:0.003s.
recover successfully!
time used: 7041.288(ms)
[dave@www.cndba.cn2 bin]$
3 配置新备库
3.1 配置 dm.ini
配置备库实例名 GRP1_RWW_04的dm.ini 参数:
#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RWW_04
PORT_NUM = 5239 #数据库实例监听端口
DW_PORT = 5339 #守护环境下,监听守护进程连接端口
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 次的日志重演信息
3.2 配置 dmmal.ini
拷贝一份原系统 dmmal.ini 文件,并加上自己一项,最终配置如下:
[dave@www.cndba.cn3 CNDBA]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP2_RWW_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.56.193 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5436 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.193 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP2_RWW_02
MAL_HOST = 192.168.56.194
MAL_PORT = 5437
MAL_INST_HOST = 192.168.20.194
MAL_INST_PORT = 5237
MAL_DW_PORT = 5537
[MAL_INST3]
MAL_INST_NAME = GRP2_RWW_03
MAL_HOST = 192.168.56.195
MAL_PORT = 5438
MAL_INST_HOST = 192.168.20.195
MAL_INST_PORT = 5238
MAL_DW_PORT = 5538
[MAL_INST4]
MAL_INST_NAME = GRP2_RWW_04
MAL_HOST = 192.168.56.192
MAL_PORT = 5439
MAL_INST_HOST = 192.168.20.192
MAL_INST_PORT = 5239
MAL_DW_PORT = 5539
3.3 配置 dmarch.ini
修改 dmarch.ini,配置本地归档和即时归档。
[dave@www.cndba.cn2 CNDBA]$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 1
[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_01 #即时归档目标实例名
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_02 #即时归档目标实例名
[ARCHIVE_TIMELY3]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_03 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
3.4 配置 dmwatcher.ini
修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/CNDBA/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动拉起功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
3.5 配置 dmwatcher.ctl
同一个守护进程组,直接拷贝主库的 dmwatcher.ctl 文件到本地数据文件目录。
3.6 注册守护进程
[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/CNDBA/dmwatcher.ini -p CNDBA
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceCNDBA to /etc/rc.d/init.d/DmWatcherServiceCNDBA)
Finished to create the service (DmWatcherServiceCNDBA)
[root@dm2 ~]#
3.7 启动备库
以 mount 方式启动备库
dmserver /dm/dmdbms/data/CNDBA/dm.ini mount
3.8 设置 OGUID
启动命令行工具 disql,登录备库设置 OGUID 值。
[dave@www.cndba.cn2 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239
Server[LOCALHOST:5239]:mode is primary, state is mount
login used time: 9.732(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(453332);
DMSQL executed successfully
used time: 17.328(ms). Execute id is 1.
3.9 修改数据库模式
启动命令行工具 disql,登录备库修改数据库为 Standby 模式:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 9.774(ms). Execute id is 2.
SQL> ALTER DATABASE STANDBY;
executed successfully
used time: 7.611(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 7.376(ms). Execute id is 3.
SQL>
4 动态添加 MAL 配置
本小节的步骤需要分别连接原系统中每个实例单独执行:
1.允许手工修改服务器的模式和状态。
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 10.275(ms). Execute id is 21.
SQL>
2.退出原系统所有守护进程。
注意守护进程退出后,需要等待对应实例 dm.ini 中配置的 DW_ERROR_TIME 时间后才允许后续操作,否则未超过故障认定时间,服务器认为守护进程仍然处于活动状态,不允许手工修改服务器为 mount 状态。
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ service DmWatcherServicedm3 stop
Stopping DmWatcherServicedm3: [ OK ]
[dave@www.cndba.cn3 GRP1_LOCAL_03]$
3.修改数据库状态为 MOUNT。
SQL> ALTER DATABASE MOUNT;
executed successfully
used time: 00:00:01.926. Execute id is 0.
SQL>
4.重新修改 ALTER_MODE_STATUS 值为 0,不允许手工修改服务器的模式和状态
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 13.684(ms). Execute id is 2.
SQL>
5.动态增加 mal 中 GRP1_RWW_04 的相关配置信息
SQL> SF_MAL_CONFIG(1,0);
DMSQL executed successfully
used time: 1.051(ms). Execute id is 23.
SQL> SF_MAL_INST_ADD('MAL_INST4','GRP2_RWW_04','192.168.56.192',5439,'192.168.20.192', 5239, 5539);
DMSQL executed successfully
used time: 1.916(ms). Execute id is 24.
SQL> SF_MAL_CONFIG_APPLY();
DMSQL executed successfully
used time: 2.593(ms). Execute id is 25.
SQL> SF_MAL_CONFIG(0,0);
DMSQL executed successfully
used time: 0.913(ms). Execute id is 26.
SQL>
在其他节点重复以上步骤。
5 动态添加归档配置
分别连接原系统中的所有实例(此时处于 MOUNT 状态),动态添加 dmarch.ini 中归档节点
SQL> alter database add archivelog ‘DEST=GRP2_RWW_04, TYPE=TIMELY’;
6 修改监视器 dmmonitor.ini
在 dmmonitor.ini 中添加新增的备库 GRP1_RWW_04:
MON_DW_IP = 192.168.0.144:52144
7 启动所有守护进程以及监视器
分别启动主库和备库(包括 GRP1_RWW_04)的所有守护进程,最后启动监视器。
[dave@www.cndba.cn2 ~]$ service DmWatcherServiceCNDBA start
Starting DmWatcherServiceCNDBA: [ OK ]
[dave@www.cndba.cn2 ~]$
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ service DmWatcherServicedm3 start
Starting DmWatcherServicedm3: [ OK ]
[dave@www.cndba.cn3 GRP1_LOCAL_03]$
[dave@www.cndba.cn4 CNDBA]$ service DmWatcherServicedm4 start
Starting DmWatcherServicedm4: [ OK ]
[dave@www.cndba.cn4 CNDBA]$
[dave@www.cndba.cn5 CNDBA]$ service DmWatcherServicedm5 start
Starting DmWatcherServicedm5: [ OK ]
[dave@www.cndba.cn5 CNDBA]$
[dmdba@monitor data]$ service DmMonitorServicedave start
Starting DmMonitorServicedave: [ OK ]
[dmdba@monitor data]$
8 验证
8.1 数据同步测试
#主库:
[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 9.332(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> create table yueshan as select * from sysobjects;
executed successfully
used time: 47.511(ms). Execute id is 27.
SQL>
#备库1,同步正常:
[dave@www.cndba.cn4 CNDBA]$ disql SYSDBA/SYSDBA@LOCALHOST:5237
Server[LOCALHOST:5237]:mode is standby, state is open
login used time: 9.617(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select count(1) from yueshan;
LINEID COUNT(1)
---------- --------------------
1 1276
used time: 6.754(ms). Execute id is 7.
SQL>
#备库2,同步正常:
[dave@www.cndba.cn5 CNDBA]$ disql SYSDBA/SYSDBA@LOCALHOST:5238
Server[LOCALHOST:5238]:mode is standby, state is open
login used time: 9.059(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select count(1) from yueshan;
LINEID COUNT(1)
---------- --------------------
1 1276
used time: 6.476(ms). Execute id is 7.
SQL>
#备库4,同步正常:
[dave@www.cndba.cn2 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239
Server[LOCALHOST:5239]:mode is standby, state is open
login used time: 9.175(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> select count(1) from yueshan;
LINEID COUNT(1)
---------- --------------------
1 1276
used time: 6.491(ms). Execute id is 1.
SQL>
8.2 查看进程状态
SQL> select * from V$MAL_LINK_STATUS;
LINEID SRC_SITE DEST_SITE CTL_LINK_STATUS DATA_LINK_STATUS
---------- ----------- ----------- --------------- ----------------
1 GRP2_RWW_04 GRP2_RWW_01 CONNECTED CONNECTED
2 GRP2_RWW_04 GRP2_RWW_02 CONNECTED CONNECTED
3 GRP2_RWW_04 GRP2_RWW_03 CONNECTED CONNECTED
used time: 2.335(ms). Execute id is 2.
SQL>
SQL> select arch_dest,arch_type from V$ARCH_SEND_INFO;
LINEID ARCH_DEST ARCH_TYPE
---------- ----------- -----------
1 GRP2_RWW_04 5
2 GRP2_RWW_03 5
3 GRP2_RWW_02 5
used time: 0.624(ms). Execute id is 34.
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。