注册
达梦MPP(带主备)集群搭建
培训园地/ 文章详情 /

达梦MPP(带主备)集群搭建

Lxin 2025/09/01 103 0 0

达梦MPP(带主备)集群搭建

为了提高MPP系统可靠性,克服由于单节点故障导致整个系统不能继续正常工作的问题,DM在普通的MPP系统基础上,引入数据守护主备机制,为每一个MPP节点配置一个实时备库作为备份节点,必要时备库可切换为主库代替故障节点工作,提高系统的可靠性和可用性。
MPP主备的主要目的是为DMMPP集群提供数据可靠性保障,备库只做数据容灾、备份,MPP备库并不是MPP集群的一部分,只是某个MPP节点(主库)的镜像。MPP备库不参与MPP操作,与其他MPP备库之间也没有任何关系,MPP备库只能以单节点方式提供只读服务,但不提供全局的MPP只读服务。
为了提高系统可靠性并节约硬件资源,DM MPP主备系统可采用交叉守护的方式,即每个EP和其对应的备库实例不在同一台主机上,将EP与别的EP的备库放在一台主机上。
完成MPP主备集群的搭建,要求如下:
1)完成MPP集群(带主备)的部署,并测试建表和插入数据是否会根据分布列进行自动分发。
2)测试故障一个节点后,集群可持续提供服务。

一、环境规划

配置一个两节点的MPP(主备)集群,实例名为EP01、EP02、EP01_1和EP01_2,相关配置信息如下。

机器 IP 实例名 实例对外端口 MAL端口 MAL守护进程端口 守护进程端口 OGUID 守护组 安装目录 实例归档 归档上限
A机器 192.168.148.128 EP01 5236 5336 5436 5536 45331 GRP1 /home/dmdba/dmdbms /home/dmdba/dmdbms/data 51200
A机器 192.168.148.128 EP02 5237 5337 5437 5537 45332 GRP2 /home/dmdba/dmdbms /home/dmdba/dmdbms/data 51200
B机器 192.168.148.130 EP01_1 5236 5336 5436 5536 45331 GRP1 /home/dmdba/dmdbms /home/dmdba/dmdbms/data 51200
B机器 192.168.148.130 EP01_2 5237 5337 5437 5537 45332 GRP2 /home/dmdba/dmdbms /home/dmdba/dmdbms/data 51200

二、环境搭建

2.1创建实例

2.1.1创建实例EP01

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=EP01 INSTANCE_NAME=EP01 PORT_NUM=5236 LOG_SIZE=1024 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

2.1.2 创建实例EP02

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=EP02 INSTANCE_NAME=EP02 PORT_NUM=5237 LOG_SIZE=1024 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

2.1.3 创建实例EP01_1

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=EP01_1 INSTANCE_NAME=EP01_1 PORT_NUM=5236 LOG_SIZE=1024 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

2.1.4 创建实例EP02_1

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=EP02_1 INSTANCE_NAME=EP02_1 PORT_NUM=5237 LOG_SIZE=1024 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123

2.1.5 注册服务

A机器

su root cd /home/dmdba/dmdbms/script/root ./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP01/dm.ini -p DMSERVER01 ./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP02/dm.ini -p DMSERVER02

B机器

su root cd /home/dmdba/dmdbms/script/root ./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP01_1/dm.ini -p DMSERVER01 ./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/EP02_1/dm.ini -p DMSERVER02

2.1.6创建成功后启动服务

两机器均需要执行

systemctl start DmServiceDMSERVER01.service systemctl start DmServiceDMSERVER02.service

注意:两台机器关闭防火墙

systemctl stop firewalld systemctl disable firewalld ### 2.2 配置EP01库参数 #### 2.2.1修改dm.ini ```bash cd /home/dmdba/dmdbms/data/EP01 vim /home/dmdba/dmdbms/data/EP01/dm.ini
#configuration file ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 MPP_INI = 1 #启用 MPP 配置

2.2.2创建dmmal.ini

vim /home/dmdba/dmdbms/data/EP01/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1] MAL_INST_NAME = EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 ​ [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = EP01_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST4] MAL_INST_NAME = EP02_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口

2.2.3创建dmarch.ini

vim /home/dmdba/dmdbms/data/EP01/dmarch.ini
#DaMeng Database Archive Configuration file #0:高性能,1:事务一致 ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] #本地归档类型 ARCH_TYPE = LOCAL #本地归档存放路径 ARCH_DEST = /home/dmdba/dmdbms/data/EP01/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] #实时归档类型 ARCH_TYPE = REALTIME #实时归档目标实例名 ARCH_DEST = EP01_1

2.2.4配置dmmpp.ini

vim /home/dmdba/dmdbms/data/EP01/dmmpp.ini
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02

使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl,dmctlcvt工具在DM安装目录的“bin”子目录中。
转换生成的dmmpp.ctl需要放在与dm.ini同一个目录。下面的命令将dmmpp.ini转换为dmmpp.ctl,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换。

su - root chown -R dmdba:2002 /home/dmdba/dmdbms chmod -R 755 /home/dmdba/dmdbms
su - dmdba cd /home/dmdba/dmdbms/bin ./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/EP01/dmmpp.ini DEST=/home/dmdba/dmdbms/data/EP01/dmmpp.ctl

2.3 配置EP02库参数

2.3.1修改dm.ini

cd /home/dmdba/dmdbms/data/EP02 vim /home/dmdba/dmdbms/data/EP02/dm.ini
#configuration file ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 MPP_INI = 1 #启用 MPP 配置

2.3.2创建dmmal.ini

vim /home/dmdba/dmdbms/data/EP02/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 ​ [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = EP01_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST4] MAL_INST_NAME = EP02_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口

2.3.3创建dmarch.ini

vim /home/dmdba/dmdbms/data/EP01/dmarch.ini
#DaMeng Database Archive Configuration file #0:高性能,1:事务一致 ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] #本地归档类型 ARCH_TYPE = LOCAL #本地归档存放路径 ARCH_DEST = /home/dmdba/dmdbms/data/EP02/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] #实时归档类型 ARCH_TYPE = REALTIME #实时归档目标实例名 ARCH_DEST = EP02_1

2.3.4配置dmmpp.ini

vim /home/dmdba/dmdbms/data/EP02/dmmpp.ini
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02

同样使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl。

su - root chown -R dmdba:2002 /home/dmdba/dmdbms chmod -R 755 /home/dmdba/dmdbms
su - dmdba cd /home/dmdba/dmdbms/bin ./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/EP02/dmmpp.ini DEST=/home/dmdba/dmdbms/data/EP02/dmmpp.ctl

2.4 配置EP01_1库参数

2.4.1修改dm.ini

cd /home/dmdba/dmdbms/data/EP01_1 vim /home/dmdba/dmdbms/data/EP01_1/dm.ini
#configuration file ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 MPP_INI = 1 #启用 MPP 配置

2.4.2创建dmmal.ini

vim /home/dmdba/dmdbms/data/EP01_1/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 ​ [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = EP01_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST4] MAL_INST_NAME = EP02_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口

2.4.3创建dmarch.ini

vim /home/dmdba/dmdbms/data/EP01_1/dmarch.ini
#DaMeng Database Archive Configuration file #0:高性能,1:事务一致 ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] #本地归档类型 ARCH_TYPE = LOCAL #本地归档存放路径 ARCH_DEST = /home/dmdba/dmdbms/data/EP01_1/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] #实时归档类型 ARCH_TYPE = REALTIME #实时归档目标实例名 ARCH_DEST = EP01

2.4.4配置dmmpp.ini

vim /home/dmdba/dmdbms/data/EP01_1/dmmpp.ini
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02

同样使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl。

su - root chown -R dmdba:2002 /home/dmdba/dmdbms chmod -R 755 /home/dmdba/dmdbms
su - dmdba cd /home/dmdba/dmdbms/bin ./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/EP01_1/dmmpp.ini DEST=/home/dmdba/dmdbms/data/EP01_1/dmmpp.ctl

2.5 配置EP02_1库参数

2.5.1修改dm.ini

cd /home/dmdba/dmdbms/data/EP02_1 vim /home/dmdba/dmdbms/data/EP02_1/dm.ini
#configuration file ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 MPP_INI = 1 #启用 MPP 配置

2.5.2创建dmmal.ini

vim /home/dmdba/dmdbms/data/EP02_1/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = EP01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 ​ [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.148.128 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.128 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口 [MAL_INST3] MAL_INST_NAME = EP01_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST4] MAL_INST_NAME = EP02_1 MAL_HOST = 192.168.148.130 #MAL 系统监听 TCP 连接的 IP 地址​ MAL_PORT = 5337 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.148.130 #实例的对外服务 IP 地址 MAL_INST_PORT = 5237 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 5437 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5537 #实例监听守护进程 TCP 连接的端口

2.5.3创建dmarch.ini

vim /home/dmdba/dmdbms/data/EP02_1/dmarch.ini
#DaMeng Database Archive Configuration file #0:高性能,1:事务一致 ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] #本地归档类型 ARCH_TYPE = LOCAL #本地归档存放路径 ARCH_DEST = /home/dmdba/dmdbms/data/EP02_1/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME1] #实时归档类型 ARCH_TYPE = REALTIME #实时归档目标实例名 ARCH_DEST = EP02

2.5.4配置dmmpp.ini

vim /home/dmdba/dmdbms/data/EP02_1/dmmpp.ini
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02

同样使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl

su - root chown -R dmdba:2002 /home/dmdba/dmdbms chmod -R 755 /home/dmdba/dmdbms
su - dmdba cd /home/dmdba/dmdbms/bin ./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/EP02_1/dmmpp.ini DEST=/home/dmdba/dmdbms/data/EP02_1/dmmpp.ctl

2.6 配置dmwatcher.ini

一般来说,每个单独的实例都是使用一个单独的守护进程守护。比如前面的实时主备和读写分离集群的配置。
本例中,由于同一台机器上有不同组的两个实例,我们可以只配置一个守护进程,同时守护两个实例。A机器上配置dmwatcher.ini,配置为全局守护类型,使用自动切换模式。

2.6.1 在A机器配置dmwatcher.ini

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

2.6.2 在B机器配置dmwatcher.ini

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

2.7 主库备份从库启动

#两机器均需执行 systemctl stop DmServiceDMSERVER01.service systemctl stop DmServiceDMSERVER02.service

2.7.1主从库均启动AP服务

cd /home/dmdba/dmdbms/bin/service_template/ ./DmAPService start

2.7.2备份主库

节点EP01(A机器)

cd /home/dmdba/dmdbms/bin ./dmrman backup database '/home/dmdba/dmdbms/data/EP01/dm.ini' backupset '/home/dmdba/dmdbms/data/EP01/bak/dmbackup';

节点EP02(A机器)

cd /home/dmdba/dmdbms/bin ./dmrman backup database '/home/dmdba/dmdbms/data/EP02/dm.ini' backupset '/home/dmdba/dmdbms/data/EP02/bak/dmbackup';

2.7.3备份文件拷贝到从库(A机器)

节点EP01

scp -r /home/dmdba/dmdbms/data/EP01/bak/dmbackup root@192.168.148.130:/home/dmdba/dmdbms/data/EP01_1/bak

节点EP02

scp -r /home/dmdba/dmdbms/data/EP02/bak/dmbackup root@192.168.148.130:/home/dmdba/dmdbms/data/EP02_1/bak

2.7.4恢复从库(B机器)

节点EP01

su dmdba cd /home/dmdba/dmdbms/bin ./dmrman restore database '/home/dmdba/dmdbms/data/EP01_1/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP01_1/bak/dmbackup'; recover database '/home/dmdba/dmdbms/data/EP01_1/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP01_1/bak/dmbackup'; recover database '/home/dmdba/dmdbms/data/EP01_1/dm.ini' update db_magic;

节点EP02

su dmdba cd /home/dmdba/dmdbms/bin ./dmrman restore database '/home/dmdba/dmdbms/data/EP02_1/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP02_1/bak/dmbackup'; recover database '/home/dmdba/dmdbms/data/EP02_1/dm.ini' from backupset '/home/dmdba/dmdbms/data/EP02_1/bak/dmbackup'; recover database '/home/dmdba/dmdbms/data/EP02_1/dm.ini' update db_magic;

2.7.5注册服务

A机器执行

su root /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p EP01 -dm_ini /home/dmdba/dmdbms/data/EP01/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p EP02 -dm_ini /home/dmdba/dmdbms/data/EP02/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/EP01/dmwatcher.ini

image.png

B机器执行

su root /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p EP01_1 -dm_ini /home/dmdba/dmdbms/data/EP01_1/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p EP02_1 -dm_ini /home/dmdba/dmdbms/data/EP02_1/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/EP01_1/dmwatcher.ini

image.png

2.7.6启动主备服务并修改参数

A机器执行

/home/dmdba/dmdbms/bin/DmServiceEP01 start /home/dmdba/dmdbms/bin/DmServiceEP02 start /home/dmdba/dmdbms/bin/disql SYSDBA/DaMeng123:5236 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(45331); ALTER DATABASE PRIMARY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); /home/dmdba/dmdbms/bin/disql SYSDBA/DaMeng123:5237 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(45332); ALTER DATABASE PRIMARY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

B机器执行

/home/dmdba/dmdbms/bin/DmServiceEP01_1 start /home/dmdba/dmdbms/bin/DmServiceEP02_1 start /home/dmdba/dmdbms/bin/disql SYSDBA/DaMeng123:5236 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(45331); ALTER DATABASE STANDBY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); /home/dmdba/dmdbms/bin/disql SYSDBA/DaMeng123:5237 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SP_SET_OGUID(45332); ALTER DATABASE STANDBY; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

启动守护进程(两台机器均需要启动)

/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

2.8 配置dmmonitor.ini

修改 dmmonitor.ini 配置确认监视器,其中MON_DW_IP中的IP和PORT和dmmal.ini中的MAL_HOST和MAL_DW_PORT 配置项保持一致。
创建 dmmonitor.ini

vi /home/dmdba/dmdbms/data/EP01_1/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式 MON_LOG_PATH = ../log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP1] MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.148.128:5436 MON_DW_IP = 192.168.148.130:5436 [GRP2] MON_INST_OGUID = 45332 #组 GRP2 的唯一 OGUID 值 #以下配置为监视器到组 GRP2 的守护进程的连接信息,以―IP:PORT‖的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.148.128:5437 MON_DW_IP = 192.168.148.130:5437

启动监听器

cd /home/dmdba/dmdbms/bin ./dmmonitor /home/dmdba/dmdbms/data/EP01_1/dmmonitor.ini

image.png

三、环境验证

在达梦数据库MPP(大规模并行处理)环境中,我们首先需要验证集群状态是否正常。通过登录数据库监听器,执行show命令:
(GRP1)
image.png
(GRP2)
image.png
输入以下SQL语句,查看两节点状态是否为OK:

SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

image.png

四、验证是否根据分布列进行自动分发

4.1建立不同的分布式表

--1、创建哈希分布表T_HASH,分布列为 C1 CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1); -- 插入测试数据 INSERT INTO T_HASH VALUES (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E'); -- 验证数据分布(正确方法) --MPP系统下设置当前会话是否只查询本节点数据。如果不设置,表示可以查询全部节点数据,0表示全部,1表示当前节点 SP_SET_SESSION_MPP_SELECT_LOCAL(0); --查询MPP系统下当前会话是否只查询本节点数据。0表示查询全部节点数据,1表示只查询本节点数据 SELECT SF_GET_SESSION_MPP_SELECT_LOCAL(); --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_HASH');

可以观察到EP01、EP02和上能够查询到各个节点的数据,EP01_1和EP02_1只能观察到当前节点的数据。
image.png
image.png
image.png

--2、创建随机分布表 T_RANDOM CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY; -- 插入数据 INSERT INTO T_RANDOM VALUES (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E'), (6, 'F'); -- 验证数据分布(正确方法) --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_RANDOM');

image.png

--3、创建复制分布表 T_FULLY CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY; -- 插入数据 INSERT INTO T_FULLY VALUES (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E'), (6, 'F'); --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_FULLY');

image.png

--4、创建范围分布表 T_RANGE,分布列为 C1 CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON EP01, VALUES LESS THAN(MAXVALUE) ON EP02); -- 插入测试数据 INSERT INTO T_RANGE VALUES (50, 'A'), (150, 'B'), (25, 'C'), (300, 'D'), (75, 'E'); --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_RANGE');

image.png

--5、创建LIST分布表T_LIST,分布列为C1 CREATE TABLE T_LIST(C1 INT, C2 CHAR(10)) DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02); -- 插入测试数据 INSERT INTO T_LIST VALUES (3, 'A'), (4, 'B'), (4, 'C'), (3, 'D'), (4, 'E'); --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_LIST');

image.png

--6、创建哈希分布表的范围水平分区表 CREATE TABLE T_HASH_RANGE_PARTITION (C1 INT, C2 CHAR(10), C3 CHAR(10)) PARTITION BY RANGE(C1) ( PARTITION PART_1 VALUES LESS THAN(0) , PARTITION PART_2 VALUES LESS THAN(10) , PARTITION PART_3 VALUES LESS THAN(100) , PARTITION PART_4 VALUES LESS THAN(MAXVALUE) ) DISTRIBUTED BY HASH (C1); -- 插入测试数据 INSERT INTO T_HASH_RANGE_PARTITION VALUES (-5, 'A', 'X'), (5, 'B', 'Y'), (50, 'C', 'Z'), (500, 'D', 'W'); --统计 MPP 环境下表在各个节点的数据行数 CALL SP_GET_EP_COUNT('SYSDBA','T_HASH_RANGE_PARTITION');

image.png
总结:
哈希分布:数据均匀分布,相同键值总在同一节点,适合JOIN操作频繁的表
随机分布:数据完全随机分布,适合没有明显JOIN需求的表
复制分布:每个节点有完整数据副本,适合小表、维度表
范围分布:按范围值分布数据,适合范围查询频繁的场景
LIST分布:按离散值分布,适合有明显分类属性的数据
组合分布:可以结合分区和分布策略实现更复杂的数据分布

4.2 故障切换测试(主库宕机)

我们模拟故障节点EP01和EP02,观察主备切换情况,实例EP01_1和实例RP02_1自动接管。
image.png
当主节点发生故障时,备用节点(EP01_1和EP02_1)会自动接管服务,确保系统持续可用。
image.png
简单验证是否根据分布列进行自动分发,在EP02_1上插入数据。
image.png
在EP02_1和EP01_1上均能查询到数据
image.png

4.3 故障恢复

恢复节点EP01和EP02,观察主备切换情况
image.png
可以看到EP01和EP02切换为备库了。
image.png
image.png

五、总结

通过本次达梦数据库MPP环境验证和分布式表测试,我们得出以下结论:
分布策略选择:
哈希分布:适合大多数需要表连接的场景
随机分布:适合无关联需求的数据存储
全复制分布:适合小表和维度表
范围和列表分布:适合特定业务场景
高可用性:
达梦MPP具备自动故障检测和切换能力
数据在故障切换过程中保持一致性
节点恢复后自动同步数据
性能优化:
合理选择分布列是优化性能的关键
结合分区和分布策略可以进一步提升性能
监控节点数据分布均匀性对集群性能很重要

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服