三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

两节点MPP集群搭建操作指南

两节点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 版本冲突、动态库路径冲突、端口冲突)。建议:

  1. 所有命令都在达梦的 bin 目录下执行(./xxx)
  2. 多人环境优先用 USE_AP=2绕过 dmap
  3. 端口规划时避开他人已用端口
  4. 备份还原后务必检查 INSTANCE_NAME

本文原创于达梦技术社区:https://eco.dameng.com/达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。https://eco.dameng.com/

← 返回列表