在之前的博客我们了解到DM7 DW环境的搭建,如下:
DM7 达梦 数据库 数据守护(Data Watch) (15) — 精简版 DW实时主备搭建与切换测试
https://www.cndba.cn/dave/article/3710
本篇我们了解一下DM8中DW 实时主备的搭建与测试。
1 环境说明
本示例中组名为“GRP1”,配置为实时主备,主库命名为“DAVE1”,备库命名为“DAVE2”。
配置环境说明
主机类型 | IP地址 | 实例名 | 操作系统 |
---|---|---|---|
备库 | 192.168.20.161(外部服务) 192.168.56.161(内部通信) |
DAVE2 | Red Hat Enterprise Linux Server release 7.5 (Maipo) |
主库 | 192.168.20.162(外部服务) 192.168.56.162(内部通信) |
DAVE1 | Red Hat Enterprise Linux Server release 7.5 (Maipo) |
监视器 | 192.168.20.163(外部服务) 192.168.56.163(内部通信) |
Red Hat Enterprise Linux Server release 7.5 (Maipo) |
端口规划:
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
---|---|---|---|---|---|
DAVE1 | 5235 | 5237 | 192.168.56.161 | 5238 | 5239 |
DAVE2 | 5235 | 5237 | 192.168.56.162 | 5238 | 523 |
MAL 系统是基于 TCP 协议实现的一种内部通信机制,DM 通过 MAL 系统实现 Redo 日志传输,以及其他一些实例间的消息通讯。
守护进程(dmwatcher)是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;
监视器(dmmonitor)接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消息交互;
守护进程解析并执行监视器发起的各种命令(Switchover/Takeover/Open force 等),并在必要时通知数据库实例执行相应的操作。
MAL_DW_PORT: 守护进程监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_PORT 创建 TCP连接。监视器配置文件 dmmonitor.ini 中,MON_DW_IP 就是一组 MAL_HOST: MAL_DW_PORT。
MAL_INST_DW_PORT:实例对守护进程的监听端口,守护进程使用 MAL_HOST + MAL_INST_DW_PORT 创建到实例的 TCP 连接。
2 同步原始数据
DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580
创建主备库的数据库相同,实例名不同。
2.1 创建主库
[dave@www.cndba.cn data]$ dminit PATH=/dm/dmdbms/data DB_NAME=DAVE INSTANCE_NAME=DAVE1 PORT_NUM=5235
使用dmserver 启动数据库,在DM 数据库第一次必须正常启动,完成初始化的动作:
[dave@www.cndba.cn data]$ dmserver /dm/dmdbms/data/DAVE/dm.ini
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 startup...
Database mode = 0, oguid = 0
License will expire on 2020-09-16
file lsn: 0
ndct db load finished
ndct fill fast pool finished
iid page's trxid[1002]
NEXT TRX ID = 1003
pseg_collect_items, collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages
pseg_process_collect_items end, 0 active trx, 0 active pages, 0 committed trx, 0 committed pages
total 0 active crash trx, pseg_crash_trx_rollback begin ...
pseg_crash_trx_rollback end
purg2_crash_cmt_trx end, total 0 page purged
set EP[0]'s pseg state to inactive
pseg recv finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
trx: 2004 purged 1 pages
……
trx: 3358 purged 1 pages
systables desc init success.
ndct_db_load_info success.
nsvr_process_before_open begin.
nsvr_process_before_open success.
total 0 active crash trx, pseg_crash_trx_rollback begin ...
pseg_crash_trx_rollback end
SYSTEM IS READY.
2.2 启动归档模式
SQL> alter database mount;
executed successfully
used time: 00:00:01.812. Execute id is 0.
SQL> alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 4.907(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 14.877(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 00:00:02.010. Execute id is 0.
SQL> select arch_mode from v$database;
LINEID ARCH_MODE
---------- ---------
1 Y
used time: 7.350(ms). Execute id is 56.
SQL>
2.3 注册服务并启动实例
[root@dm8dw1 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/data/DAVE/dm.ini -p DAVE
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDAVE.service to /usr/lib/systemd/system/DmServiceDAVE.service.
Finished to create the service (DmServiceDAVE)
[root@dm8dw1 ~]#
[root@dm8dw1 ~]# systemctl start DmServiceDAVE
[root@dm8dw1 ~]# ps -ef|grep dm.ini
dmdba 763 1 0 10:21 ? 00:02:06 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/dave/dm.ini -noconsole
dmdba 11554 1 1 22:00 ? 00:00:00 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/DAVE/dm.ini -noconsole
root 11645 11088 0 22:01 pts/1 00:00:00 grep --color=auto dm.ini
[root@dm8dw1 ~]#
达梦数据库 DM8 中 注册服务 说明
https://www.cndba.cn/dave/article/3753
2.4 备份主库:
可以使用联机备份:
SQL> backup database full backupset ‘/dm/dwbak/dave_full_01’;
也可以使用DMRMAN 脱机备份,我们这里用DMRMAN 脱机备份进行:
#停止DM实例:
[root@dm8dw1 ~]# systemctl stop DmServiceDAVE
[dave@www.cndba.cn bin]$ ./dmrman
dmrman V8
RMAN> backup database '/dm/dmdbms/data/DAVE/dm.ini' full backupset '/dm/dmbakup/dbbak01';
backup database '/dm/dmdbms/data/DAVE/dm.ini' full backupset '/dm/dmbakup/dbbak01';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[56706]
BACKUP DATABASE [DAVE],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAVE],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm/dmbakup/dbbak01] END, CODE [0]......
META GENERATING......
total 8 packages processed...
total 8 packages processed...
total 8 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.099
RMAN>
2.5 创建备库备库并恢复
[dave@www.cndba.cn2 ~]$ dminit PATH=/dm/dmdbms/data DB_NAME=DAVE INSTANCE_NAME=DAVE2 PORT_NUM=5235
将主库的备份复制备库:
[dave@www.cndba.cn dm]$ scp -r dmbakup 192.168.20.162:
pwd
恢复备库:
[dave@www.cndba.cn2 bin]$ pwd
/dm/dmdbms/bin
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/DAVE/dm.ini' FROM BACKUPSET '/dm/dmbakup/dbbak01'"
dmrman V8
RESTORE DATABASE '/dm/dmdbms/data/DAVE/dm.ini' FROM BACKUPSET '/dm/dmbakup/dbbak01'
file dm.key not found, use default license!
RESTORE DATABASE CHECK......
RESTORE DATABASE,dbf collect......
RESTORE DATABASE,dbf refresh ......
RESTORE BACKUPSET [/dm/dmbakup/dbbak01] START......
total 4 packages processed...
total 8 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 8 packages processed...
total 8 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 422.846(ms)
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/DAVE/dm.ini' FROM BACKUPSET '/dm/dmbakup/dbbak01'"
dmrman V8
RECOVER DATABASE '/dm/dmdbms/data/DAVE/dm.ini' FROM BACKUPSET '/dm/dmbakup/dbbak01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[56706]
RESTORE RLOG CHECK......
CMD END.CODE:[603],DESC:[no log generates while the backupset [/dm/dmbakup/dbbak01] created]
no log generates while the backupset [/dm/dmbakup/dbbak01] created
recover successfully!
time used: 320.730(ms)
[dave@www.cndba.cn2 bin]$
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/DAVE/dm.ini' UPDATE DB_MAGIC"
dmrman V8
RECOVER DATABASE '/dm/dmdbms/data/DAVE/dm.ini' UPDATE DB_MAGIC
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[56706]
EP[0]'s apply_lsn[56706] >= end_lsn[56706]
recover successfully!
time used: 00:00:01.048
[dave@www.cndba.cn2 bin]$
3 配置主备库参数
3.1 配置 dm.ini
修改主备库参数,注意2个库的instance_name参数不同。
INSTANCE_NAME = DAVE1
#INSTANCE_NAME = DAVE2
PORT_NUM = 5235 #数据库实例监听端口
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
3.2 配置 dmmal.ini
2节点配置配置一样。具体如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DAVE1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.56.161 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5238 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.161 #实例的对外服务 IP 地址
MAL_INST_PORT = 5235 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_INST_DW_PORT = 5237 #实例监听守护进程TCP连接的端口
MAL_DW_PORT = 5239 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DAVE2
MAL_HOST = 192.168.56.162
MAL_PORT = 5238
MAL_INST_HOST = 192.168.20.162
MAL_INST_PORT = 5235
MAL_INST_DW_PORT = 5237
MAL_DW_PORT = 5239
3.3 配置 dmarch.ini
2节点都配置,ARCH_DEST分写写对方的实例。比如当前实例 DAVE1 是主库,则ARCH_DEST 配置为 DAVE2。
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DAVE2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
3.4 配置 dmwatcher.ini
2节点都配置。守护进程使用MANUAL,手工切换模式。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/DAVE/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
在DM DW4.0 之后,已经不再需要生成dmwatcher.ctl 控制文件,dmctlcvt 工具也不再支持dmwaterch.ctl 文件的生成。
[dave@www.cndba.cn DAVE]$ dmctlcvt help
DMCTLCVT V8
Format: ./dmctlcvt KEYWORD=value
Note: ctl file name must be dm.ctl or dmmpp.ctl
Keyword Explanation
--------------------------------------------------------------------------------
TYPE 1 convert ctl file(dm.ctl or dmmpp.ctl) to txt file
2 convert txt file to ctl file(dm.ctl or dmmpp.ctl)
SRC Source file
DEST Destination file
DCR_INI the path of dmdcr.ini
HELP Show this help info
Example:
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl
[dave@www.cndba.cn DAVE]$
3.5 以mount模式启动主备库
以 mount 方式启动主库
[dave@www.cndba.cn DAVE]$ dmserver /dm/dmdbms/data/DAVE/dm.ini mount
[dave@www.cndba.cn2 DAVE]$ dmserver /dm/dmdbms/data/DAVE/dm.ini mount
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
3.6 设置 OGUID
在主备库分别执行:
SQL>sp_set_oguid(453331);
3.7 修改数据库模式
主库修改数据库为 primary
SQL>alter database primary;
备库:
SQL> alter database standby;
如果当前数据库不是 normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值 为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。
#STEP 1:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 9.822(ms). Execute id is 2.
#STEP 2:
SQL> alter database standby;
executed successfully
used time: 7.475(ms). Execute id is 0.
#STEP 3:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 9.070(ms). Execute id is 3.
SQL>
4 注册并启动守护进程
在主备库进行注册:
[root@dm8dw1 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdbms/data/DAVE/dmwatcher.ini -p DAVE
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDAVE.service to /usr/lib/systemd/system/DmWatcherServiceDAVE.service.
Finished to create the service (DmWatcherServiceDAVE)
在主备库启动服务:
[root@dm8dw1 ~]# systemctl start DmWatcherServiceDAVE
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将本地实例 Open,并切换为 Open 状态。
5 配置监视器(第三台服务器)
5.1 参数文件
在监控节点的/dm/dmdbms/data/DAVE/目录下创建并修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
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 值
MON_DW_IP = 192.168.56.162:5239
MON_DW_IP = 192.168.56.161:5239
5.2 启动监视器
启动监视器:
[dave@www.cndba.cn data]$ dmmonitor /dm/dmdbms/data/dmmonitor.ini
[monitor] 2019-10-31 02:26:14: DMMONITOR[4.0] V8
[monitor] 2019-10-31 02:26:14: DMMONITOR[4.0] IS READY.
[monitor] 2019-10-31 02:26:14: Received message from(DAVE2)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:26:14 OPEN OK DAVE2 OPEN STANDBY NULL 7 71664 71664
[monitor] 2019-10-31 02:26:14: Received message from(DAVE1)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:26:14 OPEN OK DAVE1 OPEN PRIMARY VALID 7 71664 71664
#================================================================================#
show
2019-10-31 02:26:29
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 02:26:28 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN PRIMARY 0 0 REALTIME VALID 3654 71664 3654 71664 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 02:26:28 GLOBAL VALID OPEN DAVE2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN STANDBY 0 0 REALTIME VALID 3645 71664 3645 71664 NONE
DATABASE(DAVE2) APPLY INFO FROM (DAVE1):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3654, 3654, 3654], (ALSN, SLSN, KLSN)[71664, 71664, 71664], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
6 主备同步测试
主库:
[dave@www.cndba.cn DAVE]$ disql SYSDBA/SYSDBA@localhost:5235
Server[localhost:5235]:mode is primary, state is open
login used time: 10.132(ms)
disql V8
SQL> create table dave as select * from sysobjects;
executed successfully
used time: 33.758(ms). Execute id is 3.
SQL>
备库:
[dave@www.cndba.cn2 bin]$ disql SYSDBA/SYSDBA@localhost:5235
Server[localhost:5235]:mode is standby, state is open
login used time: 11.451(ms)
disql V8
SQL> select count(1) from dave;
LINEID COUNT(1)
---------- --------------------
1 1295
used time: 13.585(ms). Execute id is 1.
SQL>
7 主备切换测试
操作直接在监控器里执行。
7.1 Switchover 切换
#================================================================================#
show
2019-10-31 02:26:29
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 02:26:28 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN PRIMARY 0 0 REALTIME VALID 3654 71664 3654 71664 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 02:26:28 GLOBAL VALID OPEN DAVE2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN STANDBY 0 0 REALTIME VALID 3645 71664 3645 71664 NONE
DATABASE(DAVE2) APPLY INFO FROM (DAVE1):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3654, 3654, 3654], (ALSN, SLSN, KLSN)[71664, 71664, 71664], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
choose switchover grp1
Can choose one of the following instances to do switchover:
1: DAVE2
switchover grp1.dave2
[monitor] 2019-10-31 02:41:00: Not login dmmonitor or server public key changed, please try to login again!
login
username:SYSDBA
password:
[monitor] 2019-10-31 02:41:20: Login dmmonitor success!
switchover grp1.dave2
[monitor] 2019-10-31 02:41:32: Start to switchover instance DAVE2
[monitor] 2019-10-31 02:41:32: Notify dmwatcher(DAVE1) switch to SWITCHOVER status
[monitor] 2019-10-31 02:41:32: Dmwatcher process DAVE1 status switching [OPEN-->SWITCHOVER]
[monitor] 2019-10-31 02:41:32: Switch dmwatcher DAVE1 to SWITCHOVER status success
[monitor] 2019-10-31 02:41:32: Notify dmwatcher(DAVE2) switch to SWITCHOVER status
[monitor] 2019-10-31 02:41:32: Dmwatcher process DAVE2 status switching [OPEN-->SWITCHOVER]
[monitor] 2019-10-31 02:41:32: Switch dmwatcher DAVE2 to SWITCHOVER status success
[monitor] 2019-10-31 02:41:32: Instance DAVE1 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 6)
[monitor] 2019-10-31 02:41:32: Instance DAVE1 execute sql SP_SET_GLOBAL_DW_STATUS(0, 6) success
[monitor] 2019-10-31 02:41:32: Instance DAVE2 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 6)
[monitor] 2019-10-31 02:41:32: Instance DAVE2 execute sql SP_SET_GLOBAL_DW_STATUS(0, 6) success
[monitor] 2019-10-31 02:41:32: Instance DAVE1 start to execute sql ALTER DATABASE MOUNT
[monitor] 2019-10-31 02:41:34: Instance DAVE1 execute sql ALTER DATABASE MOUNT success
[monitor] 2019-10-31 02:41:34: Instance DAVE2 start to execute sql SP_APPLY_KEEP_PKG()
[monitor] 2019-10-31 02:41:34: Instance DAVE2 execute sql SP_APPLY_KEEP_PKG() success
[monitor] 2019-10-31 02:41:34: Instance DAVE2 start to execute sql ALTER DATABASE MOUNT
[monitor] 2019-10-31 02:41:36: Instance DAVE2 execute sql ALTER DATABASE MOUNT success
[monitor] 2019-10-31 02:41:36: Instance DAVE1 start to execute sql ALTER DATABASE STANDBY
[monitor] 2019-10-31 02:41:36: Instance DAVE1 execute sql ALTER DATABASE STANDBY success
[monitor] 2019-10-31 02:41:36: Instance DAVE2 start to execute sql ALTER DATABASE PRIMARY
[monitor] 2019-10-31 02:41:36: Instance DAVE2 execute sql ALTER DATABASE PRIMARY success
[monitor] 2019-10-31 02:41:36: Notify instance DAVE2 to change all arch status to be invalid
[monitor] 2019-10-31 02:41:36: Succeed to change all instances arch status to be invalid
[monitor] 2019-10-31 02:41:36: Instance DAVE1 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2019-10-31 02:41:36: Instance DAVE1 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2019-10-31 02:41:36: Instance DAVE2 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2019-10-31 02:41:38: Instance DAVE2 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2019-10-31 02:41:38: Instance DAVE1 start to execute sql SP_SET_GLOBAL_DW_STATUS(6, 0)
[monitor] 2019-10-31 02:41:38: Instance DAVE1 execute sql SP_SET_GLOBAL_DW_STATUS(6, 0) success
[monitor] 2019-10-31 02:41:38: Instance DAVE2 start to execute sql SP_SET_GLOBAL_DW_STATUS(6, 0)
[monitor] 2019-10-31 02:41:38: Instance DAVE2 execute sql SP_SET_GLOBAL_DW_STATUS(6, 0) success
[monitor] 2019-10-31 02:41:38: Notify dmwatcher(DAVE1) switch to OPEN status
[monitor] 2019-10-31 02:41:38: Dmwatcher process DAVE1 status switching [SWITCHOVER-->OPEN]
[monitor] 2019-10-31 02:41:38: Switch dmwatcher DAVE1 to OPEN status success
[monitor] 2019-10-31 02:41:38: Notify dmwatcher(DAVE2) switch to OPEN status
[monitor] 2019-10-31 02:41:38: Dmwatcher process DAVE2 status switching [SWITCHOVER-->OPEN]
[monitor] 2019-10-31 02:41:38: Switch dmwatcher DAVE2 to OPEN status success
[monitor] 2019-10-31 02:41:38: Notify group(GRP1)'s dmwatcher to do clear
[monitor] 2019-10-31 02:41:38: Clean request of dmwatcher processer DAVE2 success
[monitor] 2019-10-31 02:41:38: Clean request of dmwatcher processer DAVE1 success
[monitor] 2019-10-31 02:41:38: Switchover instance DAVE2 success
2019-10-31 02:41:38
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 02:41:38 GLOBAL VALID OPEN DAVE2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN PRIMARY 0 0 REALTIME VALID 3664 76945 3664 76945 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 02:41:38 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME INVALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN STANDBY 0 0 REALTIME INVALID 3662 71777 3662 71777 NONE
DATABASE(DAVE1) APPLY INFO FROM (DAVE2):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3662, 3662, 3662], (ALSN, SLSN, KLSN)[71777, 71777, 71777], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
[monitor] 2019-10-31 02:41:41: Dmwatcher process DAVE2 status switching [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:41:41 RECOVERY OK DAVE2 OPEN PRIMARY VALID 8 76945 76945
[monitor] 2019-10-31 02:41:44: Dmwatcher process DAVE2 status switching [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:41:44 OPEN OK DAVE2 OPEN PRIMARY VALID 8 76945 76945
7.2 Takeover 接管
choose takeover grp1
Group(grp1) has active primary instance, not get standby instance list any more!
将主库网络直接中断:
[root@dm8dw2 ~]# systemctl stop network
#此时可以接管了:
choose takeover grp1
Can choose one of the following instances to do takeover:
1: DAVE1
takeover dave1
[monitor] 2019-10-31 02:54:55: Username or password error, or user does not have DBA privilege!
login
username:SYSDBA
password:
[monitor] 2019-10-31 02:55:12: Login dmmonitor success!
takeover dave1
[monitor] 2019-10-31 02:55:18: Start to takeover use instance DAVE1
[monitor] 2019-10-31 02:55:18: Notify dmwatcher(DAVE1) switch to TAKEOVER status
[monitor] 2019-10-31 02:55:18: Dmwatcher process DAVE1 status switching [OPEN-->TAKEOVER]
[monitor] 2019-10-31 02:55:18: Switch dmwatcher DAVE1 to TAKEOVER status success
[monitor] 2019-10-31 02:55:18: Instance DAVE1 start to execute sql SP_SET_GLOBAL_DW_STATUS(0, 7)
[monitor] 2019-10-31 02:55:18: Instance DAVE1 execute sql SP_SET_GLOBAL_DW_STATUS(0, 7) success
[monitor] 2019-10-31 02:55:18: Instance DAVE1 start to execute sql SP_APPLY_KEEP_PKG()
[monitor] 2019-10-31 02:55:19: Instance DAVE1 execute sql SP_APPLY_KEEP_PKG() success
[monitor] 2019-10-31 02:55:19: Instance DAVE1 start to execute sql ALTER DATABASE MOUNT
[monitor] 2019-10-31 02:55:20: Instance DAVE1 execute sql ALTER DATABASE MOUNT success
[monitor] 2019-10-31 02:55:20: Instance DAVE1 start to execute sql ALTER DATABASE PRIMARY
[monitor] 2019-10-31 02:55:20: Instance DAVE1 execute sql ALTER DATABASE PRIMARY success
[monitor] 2019-10-31 02:55:23: Notify instance DAVE1 to change all arch status to be invalid
[monitor] 2019-10-31 02:55:24: Succeed to change all instances arch status to be invalid
[monitor] 2019-10-31 02:55:24: Instance DAVE1 start to execute sql ALTER DATABASE OPEN FORCE
[monitor] 2019-10-31 02:55:26: Instance DAVE1 execute sql ALTER DATABASE OPEN FORCE success
[monitor] 2019-10-31 02:55:26: Instance DAVE1 start to execute sql SP_SET_GLOBAL_DW_STATUS(7, 0)
[monitor] 2019-10-31 02:55:26: Instance DAVE1 execute sql SP_SET_GLOBAL_DW_STATUS(7, 0) success
[monitor] 2019-10-31 02:55:26: Notify dmwatcher(DAVE1) switch to OPEN status
[monitor] 2019-10-31 02:55:26: Dmwatcher process DAVE1 status switching [TAKEOVER-->OPEN]
[monitor] 2019-10-31 02:55:26: Switch dmwatcher DAVE1 to OPEN status success
[monitor] 2019-10-31 02:55:26: Notify group(GRP1)'s dmwatcher to do clear
2019-10-31 02:55:26
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 02:55:26 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN PRIMARY 0 0 REALTIME VALID 3675 79857 3675 84734 NONE
ERROR DATABASE:
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 02:54:15 GLOBAL VALID ERROR DAVE2 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN PRIMARY 0 0 REALTIME VALID 3674 79566 3674 79566 NONE
#================================================================================#
[monitor] 2019-10-31 02:55:26: Clean request of dmwatcher processer DAVE1 success
[monitor] 2019-10-31 02:55:26: Success to takeover use instance DAVE1
7.3 恢复DW环境
恢复原主库的网络后,监视器自动将原主库切换成了备库:
#================================================================================#
[monitor] 2019-10-31 02:56:39: Dmwatcher process DAVE2 status switching [NONE-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:39 OPEN OK DAVE2 OPEN PRIMARY VALID 8 79566 79566
[monitor] 2019-10-31 02:56:43: Instance DAVE2[PRIMARY, OPEN, ISTAT_SAME:TRUE] error
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:43 STARTUP ERROR DAVE2 OPEN PRIMARY VALID 8 79566 79566
[monitor] 2019-10-31 02:56:43: Dmwatcher process DAVE2 status switching [OPEN-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:43 STARTUP ERROR DAVE2 OPEN PRIMARY VALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Instance DAVE2[PRIMARY, MOUNT, ISTAT_SAME:TRUE] recover to OK
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 STARTUP OK DAVE2 MOUNT PRIMARY VALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE2 status switching [STARTUP-->UNIFY EP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 UNIFY EP OK DAVE2 MOUNT PRIMARY VALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE2 status switching [UNIFY EP-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 STARTUP OK DAVE2 MOUNT STANDBY INVALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE2 status switching [STARTUP-->UNIFY EP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 UNIFY EP OK DAVE2 MOUNT STANDBY INVALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE2 status switching [UNIFY EP-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 STARTUP OK DAVE2 OPEN STANDBY INVALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE2 status switching [STARTUP-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 OPEN OK DAVE2 OPEN STANDBY INVALID 8 79566 79566
[monitor] 2019-10-31 02:56:55: Dmwatcher process DAVE1 status switching [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:55 RECOVERY OK DAVE1 OPEN PRIMARY VALID 9 84734 84734
[monitor] 2019-10-31 02:56:59: Dmwatcher process DAVE1 status switching [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 02:56:59 OPEN OK DAVE1 OPEN PRIMARY VALID 9 84734 84734
show
2019-10-31 02:57:13
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 02:57:12 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN PRIMARY 0 0 REALTIME VALID 3676 84734 3676 84734 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 02:57:12 GLOBAL VALID OPEN DAVE2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN STANDBY 0 0 REALTIME VALID 3674 84734 3674 84734 NONE
DATABASE(DAVE2) APPLY INFO FROM (DAVE1):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3676, 3676, 3676], (ALSN, SLSN, KLSN)[84734, 84734, 84734], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
8 DW 环境启动与关闭测试
因为Global 守护类型的守护进程,会自动将数据库实例切换到 Open 状态,并将守护进程状态也切换为 Open。因此在关闭DW系统时,必须按照一定的顺序来关闭守护进程和实例。
可以在监视器中执行 Stop Instance 命令关闭数据守护系统,命令执行成功后,数据库实例正常关闭。但守护进程并没有真正退出,而是将状态切换为Shutdown 状态。
如果使用手动方式关闭数据守护系统,请严格按照以下顺序:
1) 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
2) 关闭主库守护进程(防止重启实例)
3) 关闭备库守护进程(防止重启实例)
在关闭守护进程时会自动关闭对应的DM实例。 所以我们这里只需要关闭对应的守护进程即可。
8.1 关闭DW 环境
我们这里使用手工方式关闭DW.
1.关闭监视器进程
直接ctrl + c 结束命令即可。
2.关闭主库守护进程
[root@dm8dw1 ~]# systemctl stop DmWatcherServiceDAVE
[root@dm8dw1 ~]# ps -ef|grep dm.ini
root 18324 16166 0 05:45 pts/6 00:00:00 grep --color=auto dm.ini
[root@dm8dw1 ~]#
3.关闭备库守护进程
[root@dm8dw2 ~]# systemctl stop DmWatcherServiceDAVE
[root@dm8dw2 ~]# ps -ef|grep dm.ini
root 16460 14503 0 05:46 pts/4 00:00:00 grep --color=auto dm.ini
[root@dm8dw2 ~]#
8.2 启动DW环境
8.2.1 启动备库守护进程
[root@dm8dw2 ~]# systemctl start DmWatcherServiceDAVE
[root@dm8dw2 ~]# ps -ef|grep dm.ini
dmdba 16289 1 2 05:42 ? 00:00:00 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/DAVE/dm.ini mount
root 16370 14503 0 05:42 pts/4 00:00:00 grep --color=auto dm.ini
[root@dm8dw2 ~]#
启动守护进程时会自动启动DM 实例。
8.2.2 启动主库守护进程
[root@dm8dw1 ~]# systemctl start DmWatcherServiceDAVE
[root@dm8dw1 ~]# ps -ef|grep dm.ini
dmdba 18169 1 3 05:43 ? 00:00:01 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/DAVE/dm.ini mount
root 18254 16166 0 05:43 pts/6 00:00:00 grep --color=auto dm.ini
[root@dm8dw1 ~]#
8.2.3 启动监视器
[dave@www.cndba.cn data]$ dmmonitor /dm/dmdbms/data/dmmonitor.ini
[monitor] 2019-10-31 05:44:10: DMMONITOR[4.0] V8
[monitor] 2019-10-31 05:44:11: DMMONITOR[4.0] IS READY.
[monitor] 2019-10-31 05:44:11: Received message from(DAVE1)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 05:44:11 OPEN OK DAVE1 OPEN PRIMARY VALID 10 89902 89902
[monitor] 2019-10-31 05:44:11: Received message from(DAVE2)
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2019-10-31 05:44:11 OPEN OK DAVE2 OPEN STANDBY VALID 10 89902 89902
show
2019-10-31 05:44:15
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE MANUAL FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.161 5239 2019-10-31 05:44:14 GLOBAL VALID OPEN DAVE1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE1 OPEN PRIMARY 0 0 REALTIME VALID 3682 89902 3682 89902 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.56.162 5239 2019-10-31 05:44:14 GLOBAL VALID OPEN DAVE2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5235 OK DAVE2 OPEN STANDBY 0 0 REALTIME VALID 3674 89902 3674 89902 NONE
DATABASE(DAVE2) APPLY INFO FROM (DAVE1):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[3682, 3682, 3682], (ALSN, SLSN, KLSN)[89902, 89902, 89902], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
版权声明:本文为博主原创文章,未经博主允许不得转载。