注册
数据守护之搭建实时主备
专栏/培训园地/ 文章详情 /

数据守护之搭建实时主备

DM_831048 2024/08/22 480 0 0
摘要

实时主备

1. 环境

角色 操作系统 IP 实例 Port DW_Port Mal_Host Mal_Port Mal_DW_Port
主库 Kylin V10 192.168.0.102 / 10.0.0.102 DM1 5236 5237 192.168.0.102 5238 5239
备库 Kylin V10 192.168.0.103 / 10.0.0.103 DM2 5236 5237 192.168.0.103 5238 5239
监控 Kylin V10 192.168.0.104

2. 备份和恢复数据库

2.1. 主库

2.1.1. 创建实例

dminit PATH=/dm/data EXTENT_SIZE=32 PAGE_SIZE=16 CASE_SENSITIVE=Y CHARSET=0 DB_NAME=DMDB INSTANCE_NAME=DM1 PORT_NUM=5236

initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-11-08
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /dm/data/DMDB/DMDB01.log
 log file path: /dm/data/DMDB/DMDB02.log

write to dir [/dm/data/DMDB].
create dm database success. 2024-08-18 12:39:09

2.1.2. 注册服务

使用 root 用户注册服务

/dm/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/data/DMDB/dm.ini -p DM

Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDM.service → /usr/lib/systemd/system/DmServiceDM.service.
创建服务(DmServiceDM)完成

启动数据库服务

[dmdba@kylin ~]$ DmServiceDM start
Starting DmServiceDM:                                      [ OK ]

2.1.3. 开启归档模式

alter database mount ;
alter database add archivelog 'type=local, dest=/dm/dmarch, file_size=200, space_limit=0' ;
alter database archivelog ;
alter database open ;

2.1.4. 备份数据库

停止主库

[dmdba@kylin ~]$ DmServiceDM stop
Stopping DmServiceDM:                                      [ OK ]

脱机备份

注意,备份之前要确保 DMAP 是启动的。

dmrman CTLSTMT="backup database '/dm/data/DMDB/dm.ini' backupset '/dm/backup/DM_fuuu_01'"

dmrman V8
backup database '/dm/data/DMDB/dm.ini' backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
Processing backupset /dm/backup/DM_fuuu_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
time used: 00:00:03.659

2.2. 备库

2.2.1. 创建实例

dminit PATH=/dm/data EXTENT_SIZE=32 PAGE_SIZE=16 CASE_SENSITIVE=Y CHARSET=0 DB_NAME=DMDB INSTANCE_NAME=DM2 PORT_NUM=5236

initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-11-08
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /dm/data/DMDB/DMDB01.log
 log file path: /dm/data/DMDB/DMDB02.log

write to dir [/dm/data/DMDB].
create dm database success. 2024-08-18 23:50:28

2.2.2. 注册服务

以 root 用户注册服务

/dm/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/data/DMDB/dm.ini -p DM

2.2.3. 恢复备库

将主库的备份传输到备库主机

scp -r DM_fuuu_01/ 192.168.0.103:/dm/backup/

2.2.3.1. Restore database

dmrman ctlstmt="restore database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'"

dmrman V8
restore database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
restore successfully.
time used: 00:00:02.562

2.2.3.2. Recover database

dmrman ctlstmt="recover database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'"

dmrman V8
recover database '/dm/data/DMDB/dm.ini' from backupset '/dm/backup/DM_fuuu_01'
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
recover successfully!
time used: 453.135(ms)

2.2.3.3. Update DB magic

dmrman ctlstmt="recover database '/dm/data/DMDB/dm.ini' update db_magic"
dmrman V8
recover database '/dm/data/DMDB/dm.ini' update db_magic
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40445], file_lsn[40445]
recover successfully!
time used: 00:00:01.116

数据库恢复完成后,暂不启动。

3. 配置参数

搭建 4.0 版本的、实时主备的数据守护环境需要配置 4 个参数文件。这里要注意,虽然配置文件相同,但数据守护 4.0 版本的配置参数内容和数据守护 3.0 版本的有一些出入。

分别在 主、备 环境的数据库目录(/dm/data/DMDB)下配置以下 4 个参数文件。

3.1. dm.ini

配置数据守护时,需要修改 dm.ini 文件中的以下参数值。这里除了 INSTANCE_NAME 参数是根据不同节点来配置的,其他参数与数据守护主备库节点的配置相同。

主库

INSTANCE_NAME                   = DM1
PORT_NUM                        = 5236
DW_INACTIVE_INTERVAL            = 60
ALTER_MODE_STATUS               = 0
ENABLE_OFFLINE_TS               = 2
MAL_INI                         = 1
ARCH_INI                        = 1
RLOG_SEND_APPLY_MON             = 64

备库

INSTANCE_NAME                   = DM2
PORT_NUM                        = 5236
DW_INACTIVE_INTERVAL            = 60
ALTER_MODE_STATUS               = 0
ENABLE_OFFLINE_TS               = 2
MAL_INI                         = 1
ARCH_INI                        = 1
RLOG_SEND_APPLY_MON             = 64

3.2. dmmal.ini

dmmal.ini 是 MAL 系统的配置文件,各主备库的 dmmal.ini 配置必须完全一致。默认没有 dmmal.ini 文件,需要单独创建并添加以下内容。

主库、备库配置文件内容到致。

vi dmmal.ini

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DM1
MAL_HOST = 192.168.0.102
MAL_PORT = 5238
MAL_INST_HOST = 192.168.0.102
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5240
[MAL_INST2]
MAL_INST_NAME = DM2
MAL_HOST = 192.168.0.103
MAL_PORT = 5238
MAL_INST_HOST = 192.168.0.103
MAL_INST_PORT = 5236
MAL_DW_PORT = 5239
MAL_INST_DW_PORT = 5240

3.3. dmarch.ini

在两个主备节点的环境中,数据同步的 ARCH_DEST 互相写对方的实例。比如,当前是 DM1,则对应的 ARCH_DEST 写 DM2。
如果之前已经启用了归档,那么该文件已经存在;如果未启用归档,也需要手工创建文件并添加内容。

主库开启了归档,文件已存在:

$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /dm/dmarch
        ARCH_FILE_SIZE       = 200
        ARCH_SPACE_LIMIT     = 0
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1

修改为:

# ARCH_WAIT_APPLY = 1

[ARCHIVE_REALTIME]
        ARCH_TYPE = REALTIME
        ARCH_DEST = DM2
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /dm/dmarch
        ARCH_FILE_SIZE       = 200
        ARCH_SPACE_LIMIT     = 0
        # ARCH_FLUSH_BUF_SIZE  = 0
        # ARCH_HANG_FLAG       = 1
  • ARCH_DEST
    主机写备机的实例名,备机写主机的实例名。

备库

# ARCH_WAIT_APPLY = 1

[ARCHIVE_REALTIME]
        ARCH_TYPE = REALTIME
        ARCH_DEST = DM1
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /dm/dmarch
        ARCH_FILE_SIZE       = 200
        ARCH_SPACE_LIMIT     = 0
        # ARCH_FLUSH_BUF_SIZE  = 0
        # ARCH_HANG_FLAG       = 1

3.4. dmwatcher.ini

守护进程配置文件。
除了异步主备,其他类型的主备必须配置为全局守护类型。

在两个主备节点都创建并添加以下内容:

[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID=10086
INST_INI = /dm/data/DMDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

4. 修改数据库模式

将主、备库修改为配置状态。

4.1. 主库

启动到 mount 状态

[dmdba@dm1 DMDB]$ DmServiceDM start mount
Starting DmServiceDM:                                      [ OK ]

登录数据库,此时处于 "处于普通配置状态"。

修改参数 ALTER_MODE_STATUS

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1) ;
DMSQL 过程已成功完成

设置 OGUID

SQL> SP_SET_OGUID(10086) ;
DMSQL 过程已成功完成

设置为主库

SQL> alter database primary ;
操作已执行

修改参数 ALTER_MODE_STATUS

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0) ;
DMSQL 过程已成功完成

重新登录后,提示 "处于主库配置状态"

$ disql
disql V8

服务器[LOCALHOST:5236]:处于主库配置状态

4.2. 备库

启动数据库到 mount 状态

[dmdba@dm2 DMDB]$ DmServiceDM start mount
Starting DmServiceDM:                                      [ OK ]

登录数据库,此时处于 "处于普通配置状态"。

修改参数 ALTER_MODE_STATUS

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1) ;
DMSQL 过程已成功完成

设置 OGUID

SQL> SP_SET_OGUID(10086) ;
DMSQL 过程已成功完成

设置为备库

SQL> alter database standby ;
操作已执行

修改参数 ALTER_MODE_STATUS

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0) ;
DMSQL 过程已成功完成

重新登录后,提示 "处于备库配置状态"

[dmdba@dm2 DMDB]$ disql
disql V8

服务器[LOCALHOST:5236]:处于备库配置状态

5. 守护进程

5.1. 注册和启动守护进程服务

可以先注册服务,然后直接以服务启动守护进程。

分别在主库、备库注册服务

/dm/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm/data/DMDB/dmwatcher.ini -p DM

Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDM.service → /usr/lib/systemd/system/DmWatcherServiceDM.service.
创建服务(DmWatcherServiceDM)完成

以服务启动守护进程:

systemctl start DmWatcherServiceDM.service
systemctl status DmWatcherServiceDM.service

守护进程启动后,会自动将实例由 MOUNT 状态启动到 OPEN 状态。
此时,在新窗口登录主库和备库,分别显示 "处于主库打开状态"、"处于备库打开状态"

5.2. 以前台方式启动守护进程(不推荐)

主库

[dmdba@dm1 DMDB]$ dmwatcher /dm/data/DMDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

备库

[dmdba@dm2 DMDB]$ dmwatcher /dm/data/DMDB/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

6. 监视器

实际生产环境为了确保数据守护高可用的正常运行,需要独立的服务器来部署监视器,监视器上只需要安装达梦数据库软件。

监视器有两种运行模式:监控模式和确认模式。为了实现自动故障切换,必须配置确认监视器,确认监视器也包含监控模式的功能。可以配置 8 个监视器,但只能有 1 个确认监视器。

6.1. 配置 确认监视器

将 /dm/data/dmon 作为监视器目录。

mkdir -p /dm/data/dmon/log

创建参数文件 dmmonitor.ini

vi /dm/data/dmon/dmmonitor.ini

MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/data/dmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 10086
MON_DW_IP = 192.168.0.102:5239
MON_DW_IP = 192.168.0.103:5239

启动确认监视器:

[dmdba@dmmonitor dmon]$ dmmonitor /dm/data/dmon/dmmonitor.ini
[monitor]         2024-08-19 02:32:46: DMMONITOR[4.0] V8
[monitor]         2024-08-19 02:32:47: DMMONITOR[4.0] IS READY.

[monitor]         2024-08-19 02:32:47:
#--------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DM1), THE FIRST LINE IS SELF INFO.

DW_CONN_TIME         MON_CONFIRM    MID            MON_IP                   MON_VERSION
2024-08-19 02:32:47  TRUE           1224653305     ::ffff:192.168.0.104     DMMONITOR[4.0] V8

#--------------------------------------------------------------------------------#

[monitor]         2024-08-19 02:32:47: 收到守护进程(DM1)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 02:32:47  OPEN           OK        DM1              OPEN        PRIMARY   VALID    2        40689           40689

[monitor]         2024-08-19 02:32:47: 收到守护进程(DM2)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 02:32:48  OPEN           OK        DM2              OPEN        STANDBY   VALID    2        40689           40689

此时,监视器是在前台启动,在当前窗口中,可以执行监视器的监控和管理命令。

可以输入 help 查看帮助:

#=======================================================================================================#

help
达梦守护监视器当前支持以下命令:
用法说明:
命令中的[group_name]和[db_name],在组名或库名不唯一的情况下,需要指定名称,组名和库名之间用'.'分隔.
对于show monitor命令,如果db_name未指定,则按照监视器ini的配置顺序,使用组中第一个活动的守护进程获取连接信息,
#=======================================================================================================#
#-----------------------------------系统全局命令---------------------------------------------------------#
1.help                                                            --显示帮助信息
2.exit                                                            --退出监视器
3.show version                                                    --显示监视器自身版本信息
4.show global info                                                --显示所有组的全局信息
5.show database [group_name.]db_name                              --显示指定库的详细信息
6.show [group_name]                                               --显示指定组的详细信息,如果未指定组名,则显示所有组的详细信息
7.show i[nterval] n                                               --每隔n秒自动显示所有组的详细信息
8.q                                                               --取消自动显示
9.list [[group_name.]db_name]                                     --列出指定组的库对应的守护进程配置信息,如果都未指定,则列出所有守护进程配置信息
10.show open info [group_name.]db_name                            --显示指定库的OPEN历史信息
11.show arch send info [group_name.]db_name                       --查看源库到指定组的指定库的归档同步信息(包含恢复间隔信息)
12.show apply stat [group_name.]db_name                           --查看指定组的指定库的日志重演信息
13.show monitor [group_name[.]] [db_name]                         --列出连接到指定守护进程的所有监视器信息
14.show state                                                     --显示当前监视器所在监视器配置组的所有监视器的状态信息
......

show 命令:

#================================================================================#

show
2024-08-19 02:40:02
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG
GRP1             10086       TRUE            AUTO            FALSE


<<DATABASE GLOBAL INFO:>>
DW_IP          MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.0.102  5239         2024-08-19 02:40:01  GLOBAL    VALID     OPEN           DM1              OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID

EP INFO:
INST_IP        INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG
192.168.0.102  5236       OK        DM1              OPEN        PRIMARY   0          0            REALTIME  VALID       4840            40689           4840            40689           NONE

<<DATABASE GLOBAL INFO:>>
DW_IP          MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.0.103  5239         2024-08-19 02:40:02  GLOBAL    VALID     OPEN           DM2              OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID

EP INFO:
INST_IP        INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG
192.168.0.103  5236       OK        DM2              OPEN        STANDBY   0          0            REALTIME  VALID       4840            40689           4840            40689           NONE

DATABASE(DM2) APPLY INFO FROM (DM1), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4840, 4840, 4840], (RLSN, SLSN, KLSN)[40689, 40689, 40689], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (40689)

#================================================================================#

6.2. 将 确认监视器 注册为服务

在监视器主机,以 root 用户注册服务。

/dm/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /dm/data/dmon/dmmonitor.ini -p DM

Created symlink /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDM.service → /usr/lib/systemd/system/DmMonitorServiceDM.service.
创建服务(DmMonitorServiceDM)完成

启动监视器服务

systemctl start DmMonitorServiceDM.service
systemctl status DmMonitorServiceDM.service

● DmMonitorServiceDM.service - DM Data Watch Monitor Service(DmMonitorServiceDM).
   Loaded: loaded (/usr/lib/systemd/system/DmMonitorServiceDM.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-08-19 03:19:31 CST; 4s ago
  Process: 18560 ExecStart=/dm/bin/DmMonitorServiceDM start (code=exited, status=0/SUCCESS)
 Main PID: 18583 (dmmonitor)
    Tasks: 12
   Memory: 21.5M
   CGroup: /system.slice/DmMonitorServiceDM.service
           └─18583 /dm/bin/dmmonitor path=/dm/data/dmon/dmmonitor.ini

Aug 19 03:19:16 dmmonitor systemd[1]: Starting DM Data Watch Monitor Service(DmMonitorServiceDM)....
Aug 19 03:19:31 dmmonitor DmMonitorServiceDM[18560]: [40B blob data]
Aug 19 03:19:31 dmmonitor systemd[1]: Started DM Data Watch Monitor Service(DmMonitorServiceDM)..

6.3. 配置普通监视器

在4.0版本的数据守护监视器中存在一个问题,就是监视器的监控命令和管理命令只能在前台启动的监视器中执行,后台启动的监视器不能输入命令。如果只配置一个确认监视器,以前台方式启动,那么启动的命令窗口就不能关闭,并且可能会影响故障自动切换。另外,对于这种前台启动方式,人为误操作关闭监视器进程的可能性较大。

为了解决这个问题,可以配置两个监视器:确认监视器和普通监视器。确认监视器注册为服务,放置在后台自动启动,确保确认监视器一直处于工作状态,从而保证数据守护的高可用。普通监视器不需要注册成服务,只在需要时进行手工启动,执行完命令后可以关闭也可以不关闭。

编辑 dmmonitor0.ini 配置文件,供普通监视器使用:

vi /dm/data/dmon/dmmonitor0.ini

MON_DW_CONFIRM = 0
MON_LOG_PATH = /dm/data/dmon/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 10086
MON_DW_IP = 192.168.0.102:5239
MON_DW_IP = 192.168.0.103:5239

启动普通监视器查看和执行管理命令,其启动与否不会影响到数据守护的运行。

[dmdba@dmmonitor dmon]$ dmmonitor /dm/data/dmon/dmmonitor0.ini
[monitor]         2024-08-19 03:27:40: DMMONITOR[4.0] V8
[monitor]         2024-08-19 03:27:41: DMMONITOR[4.0] IS READY.

[monitor]         2024-08-19 03:27:41:
#--------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DM1), THE FIRST LINE IS SELF INFO.

DW_CONN_TIME         MON_CONFIRM    MID            MON_IP                   MON_VERSION
2024-08-19 03:27:41  FALSE          1608479132     ::ffff:192.168.0.104     DMMONITOR[4.0] V8

2024-08-19 03:24:39  TRUE           105286110      ::ffff:192.168.0.104     DMMONITOR[4.0] V8

#--------------------------------------------------------------------------------#

[monitor]         2024-08-19 03:27:41: 收到守护进程(DM1)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 03:27:41  OPEN           OK        DM1              OPEN        PRIMARY   VALID    4        41152           41152

[monitor]         2024-08-19 03:27:41: 收到守护进程(DM2)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 03:27:42  OPEN           OK        DM2              OPEN        STANDBY   VALID    4        41152           41152

7. 切换测试

在监视器中使用 switchover 命令切换主备角色。

switchover
[monitor]         2024-08-19 02:50:41: 未登录监视器或服务器公钥发生变化,请重新登录!

login
用户名:
密码:
[monitor]         2024-08-19 02:50:49: 登录监视器成功!

switchover
[monitor]         2024-08-19 02:50:58: 开始切换实例DM2
[monitor]         2024-08-19 02:50:58: 通知守护进程DM1切换SWITCHOVER状态
[monitor]         2024-08-19 02:50:58: 守护进程(DM1)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2024-08-19 02:50:59: 切换守护进程DM1为SWITCHOVER状态成功
[monitor]         2024-08-19 02:50:59: 通知守护进程DM2切换SWITCHOVER状态
[monitor]         2024-08-19 02:50:59: 守护进程(DM2)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2024-08-19 02:51:00: 切换守护进程DM2为SWITCHOVER状态成功
[monitor]         2024-08-19 02:51:00: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2024-08-19 02:51:01: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2024-08-19 02:51:01: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2024-08-19 02:51:01: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2024-08-19 02:51:01: 实例DM1开始执行ALTER DATABASE MOUNT语句
[monitor]         2024-08-19 02:51:01: 实例DM1执行ALTER DATABASE MOUNT语句成功
[monitor]         2024-08-19 02:51:01: 实例DM2开始执行SP_APPLY_KEEP_PKG()语句
[monitor]         2024-08-19 02:51:01: 实例DM2执行SP_APPLY_KEEP_PKG()语句成功
[monitor]         2024-08-19 02:51:01: 实例DM2开始执行ALTER DATABASE MOUNT语句
[monitor]         2024-08-19 02:51:01: 实例DM2执行ALTER DATABASE MOUNT语句成功
[monitor]         2024-08-19 02:51:01: 实例DM1开始执行ALTER DATABASE STANDBY语句
[monitor]         2024-08-19 02:51:02: 实例DM1执行ALTER DATABASE STANDBY语句成功
[monitor]         2024-08-19 02:51:02: 实例DM2开始执行ALTER DATABASE PRIMARY语句
[monitor]         2024-08-19 02:51:04: 实例DM2执行ALTER DATABASE PRIMARY语句成功
[monitor]         2024-08-19 02:51:04: 通知实例DM2修改所有归档状态无效
[monitor]         2024-08-19 02:51:04: 修改所有实例归档为无效状态成功
[monitor]         2024-08-19 02:51:04: 实例DM1开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2024-08-19 02:51:04: 实例DM1执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2024-08-19 02:51:04: 实例DM2开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2024-08-19 02:51:05: 实例DM2执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2024-08-19 02:51:05: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2024-08-19 02:51:05: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2024-08-19 02:51:05: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2024-08-19 02:51:05: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2024-08-19 02:51:05: 通知守护进程DM1切换OPEN状态
[monitor]         2024-08-19 02:51:05: 守护进程(DM1)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2024-08-19 02:51:06: 切换守护进程DM1为OPEN状态成功
[monitor]         2024-08-19 02:51:06: 通知守护进程DM2切换OPEN状态
[monitor]         2024-08-19 02:51:07: 守护进程(DM2)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2024-08-19 02:51:07: 切换守护进程DM2为OPEN状态成功
[monitor]         2024-08-19 02:51:07: 通知组(GRP1)的守护进程执行清理操作
[monitor]         2024-08-19 02:51:08: 清理守护进程(DM1)请求成功
[monitor]         2024-08-19 02:51:08: 清理守护进程(DM2)请求成功
[monitor]         2024-08-19 02:51:08: 实例DM2切换成功

2024-08-19 02:51:08
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG
GRP1             10086       TRUE            AUTO            FALSE


<<DATABASE GLOBAL INFO:>>
DW_IP          MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.0.103  5239         2024-08-19 02:51:09  GLOBAL    VALID     OPEN           DM2              OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID

EP INFO:
INST_IP        INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG
192.168.0.103  5236       OK        DM2              OPEN        PRIMARY   0          0            REALTIME  VALID       4845            40875           4845            40875           NONE

<<DATABASE GLOBAL INFO:>>
DW_IP          MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
192.168.0.102  5239         2024-08-19 02:51:09  GLOBAL    VALID     OPEN           DM1              OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  INVALID

EP INFO:
INST_IP        INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG
192.168.0.102  5236       OK        DM1              OPEN        STANDBY   0          0            REALTIME  INVALID     4843            40689           4843            40689           NONE

DATABASE(DM1) APPLY INFO FROM (DM2), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4843, 4843, 4843], (RLSN, SLSN, KLSN)[40689, 40689, 40689], N_TSK[0], TSK_MEM_USE[0]
REDO_LSN_ARR: (40689)


#================================================================================#

[monitor]         2024-08-19 02:51:09: 守护进程(DM2)状态切换 [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 02:51:10  RECOVERY       OK        DM2              OPEN        PRIMARY   VALID    3        40875           40875

[monitor]         2024-08-19 02:51:12: 守护进程(DM2)状态切换 [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-08-19 02:51:13  OPEN           OK        DM2              OPEN        PRIMARY   VALID    3        40875           40875

8. 实时主备集群关闭和启动

8.1. 关闭

守护系统必须按照一定的顺序来关闭守护进程和数据库实例。特别是自动切换模式,如果退出守护进程或主备库的顺序不正确,可能会引起主备切换,甚至造成守护进程组分裂。

  • 手动方式关闭
    1. 关闭确认监视器(防止自动接管)。

      systemctl stop DmMonitorServiceDM.service
      systemctl status DmMonitorServiceDM.service
      

      如果还有普通监视器,使用 Ctrl+C 退出。

    2. 关闭备库守护进程(防止重启实例)。

      ps -ef |grep dm.ini
      ps -ef |grep -i dmwatcher
      systemctl stop DmWatcherServiceDM.service
      
    3. 关闭主库守护进程(防止重启实例)。

      与第 2 步中操作相同。
      

      如果 DM 实例是通过服务启动的,在关闭守护进程时,同时将数据库实例一起关闭。如果是通过 DMSERVER 启动的,还需要在DMSERVER中关闭实例。

    4. 关闭主库。

    5. 关闭备库。

注意:

  • 必须先关闭主库,再关闭备库。主库在关闭的过程中,仍然会产生REDO日志。如果先关闭备库,会导致主库发送归档日志失败,从而导致主库异常关闭。
  • 如果数据库实例是通过服务启动的,那么在关闭守护进程时会自动关闭对应的 DM 实例。但如果DM实例是通过 dmserver 命令启动的,那么还需要单独地关闭实例。

8.2. 启动

在PRIMARY和STANDBY模式下,数据库默认启动到MOUNT状态。默认情况下,守护进程启动后,会自动将MOUNT状态的实例启动到OPEN状态。
注意,这里守护进程只能从 MOUNT 状态到 OPEN 状态。如果实例因其他错误导致无法启动到MOUNT状态,那么守护进程也不会打开实例。但如果在守护进程中配置了 INST_AUTO_RESTART 实例自动启动,那么在守护进程启动后会直接启动实例,而不关心实例状态。

所以在数据守护中,如果通过服务配置了实例,那么在守护进程和监控器自动启动的情况下,整个数据守护环境会自动启动。
如果选择手动方式启动数据守护系统,那么对于守护进程、数据库实例和监视器的启动顺序也没有特殊的要求,只要进程能正常启动即可。

  1. 启动备库守护进程
  2. 启动主库守护进程
  3. 启动确认监视器

如果实例打开失败,用户则可以在监视器中使用 check open 命令查看原因。

check open INSTANCE_NAME
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服