【达梦MPP(不带主备)集群搭建】
达梦MPP(不带主备)集群搭建
达梦大规模并行处理MPP(DM Massively Parallel Processing,缩写 DM MPP)是基于达梦数据库管理系统研发的完全对等无共享式集群组件,支持将多个DM数据库实例组织为一个并行计算网络,对外提供统一的数据库服务。
一、环境规划
配置一个两节点的MPP集群,实例名为EP01和EP02,相关配置信息如下。
二、环境搭建
创建实例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=DM INSTANCE_NAME=EP01 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123
创建实例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=DM INSTANCE_NAME=EP02 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=DaMeng123 SYSAUDITOR_PWD=DaMeng123
注意:两台机器关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.1配置EP01库参数
2.1.1 修改dm.ini
cd /home/dmdba/dmdbms/data/DM
vim /home/dmdba/dmdbms/data/DM/dm.ini
#configuration fileMAL_INI = 1 #dmmal.iniMPP_INI = 1
2.1.2 创建dmmal.ini
vim /home/dmdba/dmdbms/data/DM/dmmal.ini
[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_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 192.168.148.130
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.130
MAL_INST_PORT = 5236
2.1.3配置dmmpp.ini
vim /home/dmdba/dmdbms/data/DM/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
cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/DM/dmmpp.ini DEST=/home/dmdba/dmdbms/data/DM/dmmpp.ctl
2.2 配置EP02库参数
2.2.1修改 dm.ini
#configuration fileMAL_INI = 1 #dmmal.iniMPP_INI = 1
创建dmmal.ini
vim /home/dmdba/dmdbms/data/DM/dmmal.ini
[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_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 192.168.148.130
MAL_PORT = 5336
MAL_INST_HOST = 192.168.148.130
MAL_INST_PORT = 5236
2.2.3配置dmmpp.ini
vim /home/dmdba/dmdbms/data/DM/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”参数进行逆向转换。
cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=2 SRC=/home/dmdba/dmdbms/data/DM/dmmpp.ini DEST=/home/dmdba/dmdbms/data/DM/dmmpp.ctl
出现权限问题,处理方式通EP01
2.3 服务启动
在两节点分别启动数据库服务
./dmserver /home/dmdba/dmdbms/data/DM/dm.ini
三、环境验证
输入以下SQL语句,查看两节点状态是否为OK:
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
四、验证是否根据分布列进行自动分发
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');
②创建随机分布表 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');
③创建复制分布表 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');
④创建范围分布表 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');
⑤创建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');
⑥创建哈希分布表的范围水平分区表
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');
总结:
哈希分布:数据均匀分布,相同键值总在同一节点,适合JOIN操作频繁的表
随机分布:数据完全随机分布,适合没有明显JOIN需求的表
复制分布:每个节点有完整数据副本,适合小表、维度表
范围分布:按范围值分布数据,适合范围查询频繁的场景
LIST分布:按离散值分布,适合有明显分类属性的数据
组合分布:可以结合分区和分布策略实现更复杂的数据分布
4.2 以全局方式和本地方式登录集群
4.2.1全局方式操作(通过协调节点)
登录EP01
①可以看到所有节点的数据聚合结果
②查询会被自动分发到各节点并行执行
③可创建分布式表
4.2.2本地方式操作(直接连接数据节点)
登录EP02
达梦社区地址:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
https://eco.dameng.com