两节点MPP集群搭建操作指南
一、前言
本文记录在两台鲲鹏920服务器上搭建达梦 DM8 MPP(大规模并行处理)集群的完整过程。由于服务器为多人共用环境,踩了一些坑,特此整理成博客备忘。
MPP的核心定位:海量数据 OLAP 分析,通过 Share-Nothing 架构将数据分片存储到多台机器,查询时各节点并行计算、汇总结果。MPP 本身不提供高可用,生产环境建议配合 AFC/DW 使用。
二、环境规划
|
项目 |
EP01 |
EP02 |
|
机器 IP |
10.36.25.32 |
10.36.25.33 |
|
实例名 |
EP01 |
EP02 |
|
数据库端口 |
9998 |
9999 |
|
MAL 端口 |
11041 |
11042 |
|
MPP_SEQNO |
0 |
1 |
|
数据路径 |
/dmdata/xuboshi/mpp/EP01/DAMENG |
/dmdata/xuboshi/mpp/EP02/DAMENG |
注意:MAL 端口用于 MPP 节点间内部通信,必须确保两台机器防火墙互通。
三、MPP 搭建步骤
3.1 初始化数据库
在 32 上执行(EP01):
mkdir -p /dmdata/xuboshi/mpp/EP01
cd /dmdata/xuboshi/opt/dmdbms/bin
./dminit \
PATH=/dmdata/xuboshi/mpp/EP01 \
INSTANCE_NAME=EP01 \
PORT_NUM=9998 \
SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123 \
PAGE_SIZE=32 \
EXTENT_SIZE=16 \
LOG_SIZE=2048
在 33 上执行(EP02):
mkdir -p /dmdata/xuboshi/mpp/EP02
cd /dmdata/xuboshi/opt/dmdbms/bin
./dminit \
PATH=/dmdata/xuboshi/mpp/EP02 \
INSTANCE_NAME=EP02 \
PORT_NUM=9999 \
SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123 \
PAGE_SIZE=32 \
EXTENT_SIZE=16 \
LOG_SIZE=2048
3.2 配置 dm.ini(两台都要)
32 上:
cat >> /dmdata/xuboshi/mpp/EP01/DAMENG/dm.ini << 'EOF'
# MPP 必要参数
MAL_INI = 1
MPP_INI = 1
EOF
33 上:
cat >> /dmdata/xuboshi/mpp/EP02/DAMENG/dm.ini << 'EOF'
# MPP 必要参数
MAL_INI = 1
MPP_INI = 1
EOF
确认 INSTANCE_NAME 和 PORT_NUM 在 dminit 时已正确生成,无需修改。
3.3 配置 dmmal.ini(两台内容完全一样)
在 32 上创建:
cat > /dmdata/xuboshi/mpp/EP01/DAMENG/dmmal.ini << 'EOF'
[MAL_INST1]
MAL_INST_NAME = EP01
MAL_HOST = 10.36.25.32
MAL_PORT = 11041
MAL_INST_HOST = 10.36.25.32
MAL_INST_PORT = 9998
[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = 10.36.25.33
MAL_PORT = 11042
MAL_INST_HOST = 10.36.25.33
MAL_INST_PORT = 9999
EOF
拷贝到 33:
scp /dmdata/xuboshi/mpp/EP01/DAMENG/dmmal.ini \
dmdba@10.36.25.33:/dmdata/xuboshi/mpp/EP02/DAMENG/
3.4 配置 dmmpp.ctl(二进制控制文件)
在 32 上生成:
cat > /dmdata/xuboshi/mpp/EP01/DAMENG/dmmpp.ini << 'EOF'
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME = EP01
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME = EP02
EOF
cd /dmdata/xuboshi/opt/dmdbms/bin
./dmctlcvt TYPE=2 \
SRC=/dmdata/xuboshi/mpp/EP01/DAMENG/dmmpp.ini \
DEST=/dmdata/xuboshi/mpp/EP01/DAMENG/dmmpp.ctl
拷贝到 33(dmmpp.ctl 是二进制文件,两台必须完全一致):
scp /dmdata/xuboshi/mpp/EP01/DAMENG/dmmpp.ctl \
dmdba@10.36.25.33:/dmdata/xuboshi/mpp/EP02/DAMENG/
3.5 启动 MPP
32 上:
cd /dmdata/xuboshi/opt/dmdbms/bin
./dmserver /dmdata/xuboshi/mpp/EP01/DAMENG/dm.ini
33 上(另开窗口):
cd /dmdata/xuboshi/opt/dmdbms/bin
./dmserver /dmdata/xuboshi/mpp/EP02/DAMENG/dm.ini
启动顺序不分先后,都起来后 MPP 自动生效。
四、验证 MPP
4.1 查看 MPP 节点配置
在任意一台连接:
cd /dmdata/xuboshi/opt/dmdbms/bin
./disql SYSDBA/Dameng123@10.36.25.32:9998
-- 查看全局 MPP 配置
SELECT * FROM V$MPP_CFG_ITEM;
-- 去重看实际节点
SELECT DISTINCT INST_NAME, EP_SEQNO FROM V$MPP_CFG_ITEM;

预期:2 个节点,EP01(SEQNO=0)和 EP02(SEQNO=1),状态都是 OK。
4.2 查看当前连接的是哪个 EP
SELECT SF_GET_SELF_EP_SEQNO();

4.3 创建分布表并验证数据分布
CREATE TABLE test_mpp(id INT, name VARCHAR(50))
DISTRIBUTED BY HASH(id);
INSERT INTO test_mpp VALUES(1, 'a');
INSERT INTO test_mpp VALUES(2, 'b');
INSERT INTO test_mpp VALUES(3, 'c');
INSERT INTO test_mpp VALUES(4, 'd');
COMMIT;
-- 查看每行数据来自哪个 EP
SELECT id, name, SF_GET_EP_SEQNO(ROWID) AS ep_no FROM test_mpp;
-- 统计各节点数据量
CALL SP_GET_EP_COUNT('SYSDBA', 'TEST_MPP');

预期:数据均匀分布到 EP01 和 EP02,各约 50%。
4.4 本地登录体验(MPP 特有)
# 本地登录(不指定 IP)
./disql SYSDBA/Dameng123@localhost:9998
-- 只看本节点数据
SP_SET_SESSION_MPP_SELECT_LOCAL(1);
SELECT * FROM test_mpp;
-- 预期:只能看到约一半数据
-- 恢复全局查询
SP_SET_SESSION_MPP_SELECT_LOCAL(0);

这是 MPP 和 DPC 的本质区别之一:MPP 的每个 EP 是完整的数据库实例(只是数据不完整),可以本地登录做维护;DPC 的 SP 不存数据,本地登录无意义。
五、常见问题速查
|
问题 |
原因 |
解决 |
|
undefined symbol: utl_analyse_para_fun |
不在 bin 目录执行 dmrman |
cd bin && ./dmrman |
|
Can not connect to incompatible dmap |
连到了别人的 dmap |
./dmrman USE_AP=2 CTLSTMT="..." |
|
Syntax error near USE_AP |
USE_AP 写进了 CTLSTMT 引号内 |
放到引号外:./dmrman USE_AP=2 CTLSTMT="..." |
|
archive_dest can not be self instance! |
还原后 INSTANCE_NAME 没改 |
sed -i 's/INSTANCE_NAME.*/INSTANCE_NAME = xxx/' dm.ini |
|
MPP 启动后查不到另一节点 |
MAL 端口不通 |
检查防火墙,确保 11041/11042 互通 |
|
dmmpp.ctl 不一致 |
两台机器的 ctl 文件不同 |
从一台生成,scp 到另一台 |
六、DM六大集群选型速记
|
产品 |
解决什么问题 |
一句话 |
|
AFC |
高可用、自动故障切换 |
数据不丢、秒级切换 |
|
DW/RWC |
主备守护/读写分离 |
AFC 的前辈,手动或半自动 |
|
DSC |
共享存储多活 |
类似 Oracle RAC,多实例读写同一份数据 |
|
MPP |
海量数据并行分析 |
数据分片、并行计算、OLAP 利器 |
|
DPC |
分布式 HTAP |
云原生、计算存储分离、弹性扩缩容 |
组合建议: - 纯分析报表 + 节点少 → MPP - 核心交易 + 高可用 → AFC - 海量分析 + 高可用 → MPP + AFC(给每个 EP 配主备) - 云原生 + 弹性扩展 + HTAP → DPC
七、后记
在多人共用的服务器上搭建达梦集群,最大的敌人不是配置复杂,而是环境冲突(dmap 版本冲突、动态库路径冲突、端口冲突)。建议:
- 所有命令都在达梦的 bin 目录下执行(./xxx)
- 多人环境优先用 USE_AP=2 绕过 dmap
- 端口规划时避开他人已用端口
- 备份还原后务必检查 INSTANCE_NAME
本文原创于达梦技术社区:https://eco.dameng.com/达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。
https://eco.dameng.com/
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)