两节点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*FROMV$MPP_CFG_ITEM;
-- 去重看实际节点
SELECTDISTINCTINST_NAME, EP_SEQNOFROMV$MPP_CFG_ITEM;
预期:2 个节点,EP01(SEQNO=0)和 EP02(SEQNO=1),状态都是 OK。
4.2查看当前连接的是哪个 EP
SELECTSF_GET_SELF_EP_SEQNO();
4.3创建分布表并验证数据分布
CREATETABLEtest_mpp(idINT, nameVARCHAR(50))
DISTRIBUTEDBYHASH(id);
INSERTINTOtest_mppVALUES(1,'a');
INSERTINTOtest_mppVALUES(2,'b');
INSERTINTOtest_mppVALUES(3,'c');
INSERTINTOtest_mppVALUES(4,'d');
COMMIT;
-- 查看每行数据来自哪个 EP
SELECTid, name, SF_GET_EP_SEQNO(ROWID)ASep_noFROMtest_mpp;
-- 统计各节点数据量
CALLSP_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*FROMtest_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/
