注册
达梦MPP集群搭建学习
培训园地/ 文章详情 /

达梦MPP集群搭建学习

del 2026/08/19 200 0 0

达梦MPP集群搭建

一 MPP 架构概括

MPP(大规模并行处理,Massively Parallel Processing)是分布式并行数据库架构,采用多节点对等无共享(Share-Nothing) 设计。集群内每个节点拥有独立 CPU、内存、磁盘、达梦实例,节点之间相互对等,不存在传统主库、备库角色。

数据按照分布规则打散存储在各个节点本地磁盘,SQL 请求接收节点协调多个节点并行执行计算,各节点独立处理本地数据,节点间通过高速网络完成数据交互,依靠并行能力提升海量数据查询、批量加载性能。

本次部署无主备模式 DM8 MPP 集群,来熟悉MPP原理和搭建过程。

二 实验环境与集群规划

配置一个两节点的MPP集群,实例名为EP01和EP02,相关配置信息如下。

1 硬件网络要求

VMware Workstation 搭建两台 CentOS 7/8 虚拟机,每台虚拟机配置两块虚拟网卡

  • 网卡 1(业务网卡):VMware 桥接模式 / NAT 模式,作为业务 IP,外部客户端、应用连接数据库使用
  • 网卡 2(MAL 内网网卡):VMware仅主机模式 (Host-Only),专门用于 MAL 集群内部通信,隔离业务流量,模拟生产环境内网集群通道

2 节点参数规划

实例名 MAL_INST_HOST(业务 IP) PORT_NUM MAL_HOST(集群通信 IP) MAL_PORT MPP_SEQNO
EP01 192.168.137.137 5236 192.168.137.137 5231 0
EP02 192.168.137.138 5236 192.168.137.138 5231 1

三 集群配置部署

1 节点实例创建

创建实例EP01

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

创建实例EP02

su - dmdba cd /home/dmdba/dmdbms/bin ./dminit path=/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=Y DB_NAME=DM INSTANCE_NAME=EP02 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=Tristan4304 SYSAUDITOR_PWD=Tristan4304

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

systemctl stop firewalld systemctl disable firewalld

2 文件参数配置

2.1 EP01参数配置

1 修改dm.ini

cd /dmdata/data/DM vi dm.ini
INSTANCE_NAME = EP01 PORT_NUM = 5230 MAL_INI = 1 MPP_INI = 1

2 创建dmmal.ini

cd /dmdata/data/DM vi dmmal.ini
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_INST1] MAL_INST_NAME = EP01 MAL_HOST = 192.168.137.137 MAL_PORT = 5231 MAL_INST_HOST = 192.168.137.137 MAL_INST_PORT = 5236 [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.137.138 MAL_PORT = 5231 MAL_INST_HOST = 192.168.137.138 MAL_INST_PORT = 5236

3 配置dmmpp.ini

vi /dmdata/data/DM/dmmpp.ini
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02

4 生成二进制 dmmpp.ctl

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

su - dmdba cd /home/dmdba/dmdbms/bin # TYPE=2 文本ini → 二进制ctl ./dmctlcvt TYPE=2 SRC=/dmdata/data/DM/dmmpp.ini DEST=/dmdata/data/DM/dmmpp.ctl

2.2 EP02库参数配置

1 修改dm.ini

cd /dmdata/data/DM vi dm.ini
INSTANCE_NAME = EP02 PORT_NUM = 5236 MAL_INI = 1 MPP_INI = 1

2 创建dmmal.ini

cd /dmdata/data/DM vi dmmal.ini
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 5 [MAL_INST1] MAL_INST_NAME = EP01 MAL_HOST = 192.168.137.137 MAL_PORT = 5231 MAL_INST_HOST = 192.168.137.137 MAL_INST_PORT = 5236 [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.137.138 MAL_PORT = 5231 MAL_INST_HOST = 192.168.137.138 MAL_INST_PORT = 5236

3 生成二进制 dmmpp.ctl

将生成后的dmmpp.ctl文件拷贝到另一个MPP节点,确保所有的MPP节点的dmmpp.ctl文件一致

# EP01节点执行 su - dmdba scp /dmdata/data/DM/dmmpp.ctl dmdba@192.168.137.138:/dmdata/data/DM/

3 集群服务启动

EP01:

/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DM/dm.ini

image.png

EP02:

/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DM/dm.ini

image.png

环境验证:

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

image.png

4 数据库测试

建立不同的分布式表验证是否根据分布列进行自动分发

4.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');

image.png

4.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

4.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.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

4.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

4.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分布:按离散值分布,适合有明显分类属性的数据
组合分布:可以结合分区和分布策略实现更复杂的数据分布

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服