提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、MPP主备是什么?
  • 二、搭建环境说明
  • 2.1 数据准备
  • 三、MPP主备搭建
  • 3.1 配置主库dm.ini
  • 3.2 配置主库dmmal.ini
  • 3.3 配置主库dmarch.ini
  • 3.3 配置主库dmwatcher.ini
  • 3.4 配置主库dmmpp.ini
  • 3.5 转换dmmpp文件
  • 3.6 配置从库dm.ini
  • 3.7 配置从库dmmal.ini
  • 3.8 配置从库dmarch.ini
  • 3.9 配置从库dmwatcher.ini
  • 3.10 配置从库dmmpp.ini
  • 3.10 拷贝dmmpp.ctl到备库
  • 3.11 从库导入数据
  • 3.9 启动主库修改参数
  • 3.10 启动从库修改参数
  • 3.11 配置单实例监视器
  • 3.12 启动主备库的守护进程
  • 3.13 启动普通监视器查看运行情况
  • 总结



前言

DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数
据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然
灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢
复数据库服务,满足用户不间断提供数据库服务的要求。
DM数据守护提供多种解决方案,可以配置成实时主备、MPP主备或读写分离集群


一、MPP主备是什么?

MPP 主备就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些
实时主备系统一起构成了 MPP 主备系统。MPP 主备系统包含多个守护进程组,每个守护进
程组都是一个相对独立的实时主备系统,具备实时主备的基本功能,可以进行主备切换、备
库接管等操作。
MPP 主备的主要目的是为 DM MPP 集群提供数据可靠性保障,备库只做数据容灾、备
份,MPP 备库并不是 MPP 集群的一部分,只是某个 MPP 节点(主库)的镜像。MPP 备库不
参与 MPP 操作,与其他 MPP 备库之间也没有任何关系,MPP 备库只能以单节点方式提供只
读服务,但不提供全局的 MPP 只读服务。

数据守护系统结构图如下:

主要由主库、备库、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

达梦 信创mongodb_dba

二、搭建环境说明

机器名

IP

初始状态

备注

dmsh1

192.168.50.20/192.168.10.5

主库

内部通信:192.168.10.5/外部通信:192.168.50.20

dmsh2

192.168.50.21/192.168.10.6

备库

内部通信:192.168.10.6/外部通信:192.168.50.21

2.1 数据准备

在搭建之前,先准备两台机器,然后先备份下主库的数据,之后需要导入到备库上
备份主库数据

SQL> backup database backupset '/opt/dmdbms/bak';
backup database backupset '/opt/dmdbms/bak';
第1 行附近出现错误[-510]:系统处于MOUNT状态.
已用时间: 0.952(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 983.540(毫秒). 执行号:0.
SQL> backup database backupset '/opt/dmdbms/bak';
操作已执行
已用时间: 00:03:15.214. 执行号:500.
SQL>

三、MPP主备搭建

3.1 配置主库dm.ini

在dm.ini配置文件中找到如下内容,修改成对应的

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = DMSERVER1 
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

3.2 配置主库dmmal.ini

[dmdba@dmsh1 DAMENG]$ cat dmmal.ini 
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
 MAL_INST_NAME = DMSERVER1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
 MAL_HOST = 192.168.10.5 #MAL 系统监听 TCP 连接的 IP 地址
 MAL_PORT = 10000 #MAL 系统监听 TCP 连接的端口
 MAL_INST_HOST = 192.168.50.20 #实例的对外服务 IP 地址
 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
 MAL_DW_PORT = 10001 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 10002 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
 MAL_INST_NAME = DMSERVER2
 MAL_HOST = 192.168.10.6
 MAL_PORT = 11000
 MAL_INST_HOST = 192.168.50.21
 MAL_INST_PORT = 5236
 MAL_DW_PORT = 11001
MAL_INST_DW_PORT = 11002

3.3 配置主库dmarch.ini

[root@dmsh1 DAMENG]# cat dmarch.ini 
ARCH_WAIT_APPLY      = 0       #模式 0为高性能 1为事务一致性 

[ARCHIVE_LOCAL1]
	ARCH_TYPE            = LOCAL        
	ARCH_DEST            = /opt/dmdbms/data/DAMENG/arch        
	ARCH_FILE_SIZE       = 64        
	ARCH_SPACE_LIMIT     = 10240        
	ARCH_FLUSH_BUF_SIZE  = 0        
	ARCH_HANG_FLAG       = 1        
[ARCHIVE_REALTIME]
	ARCH_TYPE    	     = REALTIME    #实时归档类型
	ARCH_DEST 	     = DMSERVER2   #实施归档目标实例名

3.3 配置主库dmwatcher.ini

[root@dmsh1 DAMENG]# cat dmwatcher.ini 
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3.4 配置主库dmmpp.ini

[root@dmsh1 DAMENG]# cat dmmpp.ini 
[service_name1]
mpp_seq_no = 0
mpp_inst_name = DMSERVER1
[service_name2] 
mpp_seq_no = 1
mpp_inst_name = DMSERVER2

3.5 转换dmmpp文件

[root@dmsh1 bin]# ./dmctlcvt type=2 src=/opt/dmdbms/data/DAMENG/dmmpp.ini dest=/opt/dmdbms/data/DAMENG/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!

3.6 配置从库dm.ini

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = DMSERVER2
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

3.7 配置从库dmmal.ini

跟主库dmmal.ini保持一致

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
 MAL_INST_NAME = DMSERVER1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
 MAL_HOST = 192.168.10.5 #MAL 系统监听 TCP 连接的 IP 地址
 MAL_PORT = 10000 #MAL 系统监听 TCP 连接的端口
 MAL_INST_HOST = 192.168.50.20 #实例的对外服务 IP 地址
 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
 MAL_DW_PORT = 10001 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 10002 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
 MAL_INST_NAME = DMSERVER2
 MAL_HOST = 192.168.10.6
 MAL_PORT = 11000
 MAL_INST_HOST = 192.168.50.21
 MAL_INST_PORT = 5236
 MAL_DW_PORT = 11001
MAL_INST_DW_PORT = 11002

3.8 配置从库dmarch.ini

[root@dmsh1 DAMENG]# cat dmarch.ini 
ARCH_WAIT_APPLY      = 0       #模式 0为高性能 1为事务一致性 

[ARCHIVE_LOCAL1]
	ARCH_TYPE            = LOCAL        
	ARCH_DEST            = /opt/dmdbms/data/DAMENG/arch        
	ARCH_FILE_SIZE       = 64        
	ARCH_SPACE_LIMIT     = 10240        
	ARCH_FLUSH_BUF_SIZE  = 0        
	ARCH_HANG_FLAG       = 1        
[ARCHIVE_REALTIME]
	ARCH_TYPE    	     = REALTIME    #实时归档类型
	ARCH_DEST 	         = DMSERVER2   #实施归档目标实例名

3.9 配置从库dmwatcher.ini

与主库dmwatcher.ini保持一致

[root@dmsh1 DAMENG]# cat dmwatcher.ini 
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3.10 配置从库dmmpp.ini

[root@dmsh1 DAMENG]# cat dmmpp.ini 
[service_name1]
mpp_seq_no = 0
mpp_inst_name = DMSERVER1
[service_name2] 
mpp_seq_no = 1
mpp_inst_name = DMSERVER2

3.10 拷贝dmmpp.ctl到备库

[root@dmsh1 DAMENG]# scp  dmmpp.ctl root@192.168.100.121:/opt/dmdbms/data/DAMENG/
root@192.168.100.121's password: 
dmmpp.ctl                                       100%   41KB  18.1MB/s   00:00

3.11 从库导入数据

关闭从库机器,导入主库的全备数据

[root@dmsh1 dmdbms]# scp -r bak/ root@192.168.100.121:/opt/dmdbms/bak
root@192.168.100.121's password: 
bak.bak                                                                                          100% 2735MB  13.1MB/s   03:28    
bak_1.bak                                                                                        100%  272KB   1.1MB/s   00:00    
bak.meta                                                                                         100%   93KB 483.2KB/s   00:00
RMAN> restore database '/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/opt/dmdbms/bak';
restore database '/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/opt/dmdbms/bak';
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:02:09][Remaining:00:00:00]                                 
restore successfully.
time used: 00:02:10.406
RMAN> recover database '/opt/dmdbms/data/DAMENG/dm.ini' with archivedir '/opt/dmdbms/data/DAMENG/arch'
recover database '/opt/dmdbms/data/DAMENG/dm.ini' with archivedir '/opt/dmdbms/data/DAMENG/arch'
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[38625814], file_lsn[38625814]
[Percent:100.00%][Speed:7230.00PKG/s][Cost:00:00:01][Remaining:00:00:00]                            
recover successfully!
time used: 00:00:02.005
RMAN> recover database '/opt/dmdbms/data/DAMENG/dm.ini' update db_magic;
recover database '/opt/dmdbms/data/DAMENG/dm.ini' update db_magic;
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[38628444], file_lsn[38628444]
recover successfully!
time used: 00:00:01.096

3.9 启动主库修改参数

注意:数据库除了初始化实例的时候是需要正常启动,其余的启动都需要以mount的状态启动
否则系统启动时会重构回滚表空间,生成 Redo 日志;启动后应用可能连接到数据库实例进行操作,破坏主
备库的数据一致性。

修改主库信息
注意配置完MPP后无法通过正常方式登录disql,需要配置为mpp登陆方式

[root@dmsh2 bin]# ./disql SYSDBA/SYSDBA
[-6024]:全局登录时远程节点连接失败.
disql V8
用户名:^C
[root@dmsh2 bin]# ./disql SYSDBA/SYSDBA#{MPP_TYPE=LOCAL}

服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 1.315(ms)
disql V8
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
DMSQL 过程已成功完成
已用时间: 692.177(毫秒). 执行号:501.
SQL> alter database mount;
操作已执行
已用时间: 79.463(毫秒). 执行号:0.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 164.071(毫秒). 执行号:502.
SQL> alter database primary;
操作已执行
已用时间: 153.568(毫秒). 执行号:0.
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 6.579(毫秒). 执行号:503.

3.10 启动从库修改参数

SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
DMSQL 过程已成功完成
已用时间: 249.506(毫秒). 执行号:0.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 4.128(毫秒). 执行号:1.
SQL> alter database standby;
操作已执行
已用时间: 22.066(毫秒). 执行号:0.
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 5.396(毫秒). 执行号:2.

3.11 配置单实例监视器

[dmdba@dmsh1 bin]$ cat /opt/dmdbms/data/DAMENG/dmmonitor.ini 
MON_DW_CONFIRM = 0 #确认监视器模式
MON_LOG_PATH = /opt/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.10.5:10001
MON_DW_IP = 192.168.10.6:11001

3.12 启动主备库的守护进程

主备库启动命令一致

[root@dmsh1 bin]# ./dmwatcher path=/opt/dmdbms/data/DAMENG/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

3.13 启动普通监视器查看运行情况

[dmdba@dmsh1 bin]$ ./dmmonitor /opt/dmdbms/data/DAMENG/dmmonitor.ini 
[monitor]         2022-06-10 18:27:15: DMMONITOR[4.0] V8
[monitor]         2022-06-10 18:27:15: DMMONITOR[4.0] IS READY.

[monitor]         2022-06-10 18:27:15: 收到守护进程(DMSERVER1)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-06-10 18:27:15  OPEN           OK        DMSERVER1        OPEN        PRIMARY   VALID    2        37287           37288           

[monitor]         2022-06-10 18:27:15: 收到守护进程(DMSERVER2)消息
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2022-06-10 18:27:15  OPEN           OK        DMSERVER2        OPEN        STANDBY   VALID    2        37287           37287 

          
可以看到当前我的MPP_FALG状态为TRUE,代表为MPP主备状态,且集群启动成功
show
2022-06-10 18:27:20 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453331      FALSE           AUTO            TRUE      


<<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.10.5        10001        2022-06-10 18:27:19  GLOBAL    VALID     OPEN           DMSERVER1        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.50.20       5236       OK        DMSERVER1        OPEN        PRIMARY   0          0            REALTIME  VALID    4652            37288           4653            37289           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.10.6        11001        2022-06-10 18:27:19  GLOBAL    VALID     OPEN           DMSERVER2        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.50.21       5236       OK        DMSERVER2        OPEN        STANDBY   0          0            REALTIME  VALID    4481            37288           4481            37288           NONE                  

DATABASE(DMSERVER2) APPLY INFO FROM (DMSERVER1), REDOS_PARALLEL_NUM (1):
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4652, 4652, 4653], (RLSN, SLSN, KLSN)[37288, 37288, 37289], N_TSK[0], TSK_MEM_USE[512] 
REDO_LSN_ARR: (37288)

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