提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、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)组成。

二、搭建环境说明
机器名 | 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 = 110023.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 = DMSERVER23.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 = 110023.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 = DMSERVER23.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:003.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:00RMAN> 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.0963.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 V8SQL> 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:110013.12 启动主备库的守护进程
主备库启动命令一致
[root@dmsh1 bin]# ./dmwatcher path=/opt/dmdbms/data/DAMENG/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY3.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)
#================================================================================#
















