达梦数据库不带主备MPP集群搭建
概念
达梦大规模并行计算集群(DM MPP)是达梦数据库面向海量数据分析场景推出的无共享(Shared-Nothing)分布式架构:它将数据通过哈希或随机方式水平分片到多台独立主机的本地存储,每个节点拥有完整的CPU、内存与磁盘资源,仅通过高速网络交换中间结果;协调节点接收用户SQL后自动完成语句解析、执行计划拆分与任务调度,各计算节点并行扫描、关联、聚合,最后汇总返回,实现PB级数据秒级响应;系统支持在线扩容、节点故障自动重试及数据多副本冗余,兼顾高性能、高可用与线性扩展能力,满足金融、运营商、政务等领域对超大规模数据仓库的严苛需求。
配置
|
节点 |
Ip地址 |
角色 |
硬件配置 |
实例端口 |
|
A |
192.168.159.101 |
EP01 |
1核 CPU /2.8GB 内存 / 30GB 磁盘 |
5236 |
|
B |
192.168.159.102 |
EP02 |
1核 CPU /2.8GB 内存 / 30GB 磁盘 |
5236 |
操作概要
首先,在两台服务器 A(192.168.159.101)和 B(192.168.159.102)上分别使用 dminit 工具创建两个独立的数据库实例 EP01 和 EP02,确保它们具有相同的 DB_NAME(DAMENG)、端口(5236)及初始化参数。随后,在每个节点的 DAMENG 目录下配置 dm.ini 文件,启用 MAL_INI=1 和 MPP_INI=1 以支持 MPP 功能。
接着,统一在两个节点上配置 dmmal.ini 文件,定义彼此的 MAL 通信信息,包括实例名、监听 IP 与端口等;同时编写 dmmpp.ini 文件,指定各实例在 MPP 集群中的序号(MPP_SEQ_NO)。使用 DM 提供的 dmctlcvt 工具将 dmmpp.ini 转换为二进制控制文件 dmmpp.ctl。
完成配置后,分别在两台服务器上启动 dmserver 服务,并通过 disql 登录验证。可通过查询 V $ MPP_CFG_ITEM 视图确认集群配置是否生效。之后可创建多种分布类型的表(如哈希、随机、全复制、范围、LIST 分布),并通过系统过程 SP_GET_EP_COUNT 查看数据在各节点的分布情况。
最后,在客户端或任一节点上配置 /etc/dm_svc.conf 文件,定义 MPP_CLUSTER 服务名及其连接策略,并通过 disql 使用服务名连接测试负载均衡效果,确保请求能自动分发至不同节点,实现 MPP 集群的高可用与并行处理能力。
MPP集群搭建
创建实例EP01
/home/dmdba/dmdbms/bin/dminit \
PATH='/dmdata/data' INSTANCE_NAME=EP01 DB_NAME=DAMENG PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=512 \
CHARSET=0 CASE_SENSITIVE=1 PORT_NUM=5236 SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
创建实例EP02
/home/dmdba/dmdbms/bin/dminit \
PATH='/dmdata/data' INSTANCE_NAME=EP02 DB_NAME=DAMENG PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=512 \
CHARSET=0 CASE_SENSITIVE=1 PORT_NUM=5236 SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123


AB配置dm.ini
vim /dmdata/data/DAMENG/dm.ini
MAL_INI = 1
MPP_INI = 1

AB配置dmmal.ini
vim /dmdata/data/DAMENG/dmmal.ini
[MAL_INST1]
MAL_INST_NAME = EP01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.159.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.159.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 192.168.159.102
MAL_PORT = 5336
MAL_INST_HOST = 192.168.159.102
MAL_INST_PORT = 5236
AB配置dmmpp.ini
vim /dmdata/data/DAMENG/dmmpp.ini
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME = EP01
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME = EP02
AB中使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl,dmctlcvt工具在DM安装目录的“bin”子目录中
su - root
chown -R dmdba:2002 /home/dmdba/dmdbms
chmod -R 755 /home/dmdba/dmdbms
cd /home/dmdba/dmdbms/bin
./dmctlcvt TYPE=2 SRC=/dmdata/data/DAMENG/dmmpp.ini DEST=/dmdata/data/DAMENG/dmmpp.ctl

启动服务
/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini
登录SQL
/home/dmdba/dmdbms/bin/disql
检查环境
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
验证分布列是否自动分发
创建哈希分布表,分布列为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'), (6, 'F'), (7, 'G');
SP_SET_SESSION_MPP_SELECT_LOCAL(0);
SELECT SF_GET_SESSION_MPP_SELECT_LOCAL();
CALL SP_GET_EP_COUNT('SYSDBA','T_HASH');

创建随机分布表
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'), (7, 'G');
CALL SP_GET_EP_COUNT('SYSDBA','T_RANDOM');

创建复制分布表
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'), (7, 'G');
CALL SP_GET_EP_COUNT('SYSDBA','T_FULLY');

创建范围分布表,分布列为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');
CALL SP_GET_EP_COUNT('SYSDBA','T_RANGE');

创建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');
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');
CALL SP_GET_EP_COUNT('SYSDBA','T_HASH_RANGE_PARTITION');

测试通过服务名连接MPP,连接可自动负载到不同节点。
AB创建dm_svc.conf
cat > /etc/dm_svc.conf <<'EOF'
TIME_ZONE=(480)
LANGUAGE=(CN)
MPP_CLUSTER=(192.168.159.101:5236,192.168.159.102:5236)
MPP_CLUSTER_LOGIN_MODE=(4)
MPP_CLUSTER_SWITCH_TIME=(3)
MPP_CLUSTER_SWITCH_INTERVAL=(10)
EOF
授权
chmod 644 /etc/dm_svc.conf
chown root:root /etc/dm_svc.conf
验证服务名是否生效
for i in {1..6}; do
/home/dmdba/dmdbms/bin/disql 'SYSDBA/"Dameng@123"@MPP_CLUSTER' <<'EOF'
select sf_get_self_ep_seqno();
exit
EOF
sleep 10
done


顺序是011010,大致是一个交替出现的状态,正常的轮询结果。可以通过服务名登录,并且自动负载到不同节点。
更多推荐




所有评论(0)