注册
达梦 DMDPC 分布式集群搭建初体验
专栏/技术分享/ 文章详情 /

达梦 DMDPC 分布式集群搭建初体验

Gyyyyy 2026/09/23 221 1 0
摘要

达梦 DMDPC 分布式集群搭建初体验

本文基于单台主机四实例模拟的环境,完整记录达梦 DMDPC(Dream Distributed Parallel Computing)分布式集群的搭建全过程,涵盖:集群规划、实例初始化、MP.INI 配置、节点注册、集群验证与常见踩坑。所有 IP、端口、口令均为示例值,请按实际环境调整。


一、为什么需要理解 DMDPC

数据库业务发展到一定规模,单机实例往往扛不住并发与数据量。达梦 DMDPC 通过"一个 SP + 多个 BP + 一个 MP"的分布式架构,把 SQL 处理、数据存储、元数据管理拆到不同角色上,实现横向扩展:

角色 全称 职责 可否缺失
SP SQL Processor SQL 处理器,对外统一入口,解析并分发 SQL 对外服务不能缺
BP Block Processor 块处理器,存数据、执行计算,数据与计算节点 至少 1 个,否则报"无效的系统状态"
MP Metadata Processor 元数据处理器,管元数据与全局事务,控制中枢 必须始终开启

💡 MP 是集群的控制中枢,DMDPC 运行过程中 MP 必须始终开启;BP 出问题(非 OPEN/未启动/宕机)时系统会报"无效的系统状态"。

本次实践在单台主机上规划 1 个 SP、2 个 BP、1 个 MP,BP 采用单副本模式,验证完整搭建链路。


二、集群规划:角色、端口与目录

单机四实例最重要的是端口规划:每个实例 port_num 各自独立、ap_port_num 再错开一段、MP.INI 的 mp_port 还不能与任何 ap_port_num 冲突。

RAFT 组 角色 实例名 IP(示例) PORT_NUM AP_PORT_NUM 路径
RAFT_SP1 SP SP1 192.168.x.224 6006 7007 /dmdata/dpc/sp1
RAFT_1 BP BP1 192.168.x.224 6007 7008 /dmdata/dpc/bp1
RAFT_2 BP BP2 192.168.x.224 6008 7009 /dmdata/dpc/bp2
MP_RAFT MP MP 192.168.x.224 6009 7010 /dmdata/dpc/mp

⚠️ 上表 IP 和端口仅为示例,实际部署必须按真实网段分配。


三、实例初始化:四步走

1. 创建数据目录

mkdir -p /dmdata/dpc/sp1 /dmdata/dpc/bp1 /dmdata/dpc/bp2 /dmdata/dpc/mp

2. dminit 初始化 4 个实例

dminit 通过 dpc_mode 参数指定实例角色,四类角色各初始一个:

# SP dminit path=/dmdata/dpc/sp1 instance_name=SP1 port_num=6006 ap_port_num=7007 dpc_mode=SP SYSDBA_PWD=****** # BP1 dminit path=/dmdata/dpc/bp1 instance_name=BP1 port_num=6007 ap_port_num=7008 dpc_mode=BP SYSDBA_PWD=****** # BP2 dminit path=/dmdata/dpc/bp2 instance_name=BP2 port_num=6008 ap_port_num=7009 dpc_mode=BP SYSDBA_PWD=****** # MP dminit path=/dmdata/dpc/mp instance_name=MP port_num=6009 ap_port_num=7010 dpc_mode=MP SYSDBA_PWD=******

要点:每个实例独立数据目录;port_num(60066009)相互独立,`ap_port_num`(70077010)再错开;后续 MP.INI 的 mp_port=9000 也不能与任何 ap_port_num 冲突。

3. 配置 MP.INI 文件

为 SP、BP、MP 写入同一份 MP.INI,告知集群内各节点 MP 的地址与端口:

# 以 SP1 为例,BP1/BP2/MP 同理 echo "mp_host = 192.168.x.224" > /dmdata/dpc/sp1/DAMENG/mp.ini echo "mp_port = 9000" >> /dmdata/dpc/sp1/DAMENG/mp.ini

4. 启动 MP

DMDPC 运行过程中 MP 需始终开启,优先启动:

dmserver /dmdata/dpc/mp/DAMENG/dm.ini dpc_mode=MP

四、将 MP、SP、BP 加入集群(关键顺序!)

⚠️ 注册顺序铁律:必须先登录 MP 并注册当前 MP 节点,然后才能注册其他节点;SP/BP 的注册必须在它们第一次启动之前完成,否则加入失败。

1. 登录 MP

disql 用户名/口令@192.168.x.224:6009 # 服务器[192.168.x.224:6009]:处于普通打开状态

2. 增加 MP 节点

注册当前 MP 实例,RAFT 组名可指定为 NULL 或 'MP_RAFT':

SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',7010,6009, '192.168.x.224','192.168.x.224','NORMAL',1,'MP instance');

参数说明:SP_CREATE_DPC_INSTANCE(RAFT组名, 实例名, 实例类型, AP端口, 实例端口, 内网IP, 外网IP, 系统模式, 组内实例序号, 描述)。

3. 增加两个 BP 节点:BP1、BP2

添加 BP 必须先注册 RAFT 组,再在组内注册实例:

-- 注册 RAFT 组 SP_CREATE_DPC_RAFT('BP','RAFT_1'); -- 在 RAFT_1 组内注册 BP 实例 BP1 SP_CREATE_DPC_INSTANCE('RAFT_1','BP1','BP',7008,6007, '192.168.x.224','192.168.x.224','NORMAL',1,'BP instance'); -- BP2 同理 SP_CREATE_DPC_RAFT('BP','RAFT_2'); SP_CREATE_DPC_INSTANCE('RAFT_2','BP2','BP',7009,6008, '192.168.x.224','192.168.x.224','NORMAL',1,'BP instance');

4. 注册 BP 组

把两个 BP RAFT 组加入同一个 BP 组 BG_1:

SP_CREATE_DPC_BP_GROUP('BG_1','bp group1'); SP_BP_GROUP_ADD_RAFT('BG_1','RAFT_1'); SP_BP_GROUP_ADD_RAFT('BG_1','RAFT_2');

5. 增加 SP 节点:SP1

SP 同样先注册 RAFT 组再注册实例:

SP_CREATE_DPC_RAFT('SP','RAFT_SP1'); SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP1','SP',7007,6006, '223.254.x.136','223.254.x.136','NORMAL',2,'SP instance');

💡 若需调整 SP 配置,可先 SP_DROP_DPC_INSTANCE('SP1') 再重新注册,重建语法与初次注册完全一致。

6. 检查注册是否成功

查询系统表确认:

SELECT * FROM DPC_BP_GROUP; -- BG_1, RAFT_NUM=2 SELECT * FROM DPC_BP_RAFT; -- MP_RAFT / RAFT_1 / RAFT_2 / RAFT_SP1 四组 SELECT * FROM DPC_INSTANCE; -- MP / BP1 / BP2 / SP1 四条实例

五、启动 SP 和 BP

SP 与 BP 启动没有先后之分:

# 启动 SP nohup dmserver /dmdata/dpc/sp1/DAMENG/dm.ini dpc_mode=SP & # 启动 BP nohup dmserver /dmdata/dpc/bp1/DAMENG/dm.ini dpc_mode=BP & nohup dmserver /dmdata/dpc/bp2/DAMENG/dm.ini dpc_mode=BP &

检查进程:

ps -ef | grep -i dms # 应看到 dmserver ... dpc_mode=MP / SP / BP×2 共 4 个进程

✅ MP、SP、BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!


六、连接 SP 验证集群

用户只需连接对外提供服务的 SP:

disql 用户名/口令@192.168.x.224:6006

验证集群是否搭建成功,可在 SP 上查 V$instance,确认所有 RAFT 组中的实例都能查到。

⚠️ 规范使用:只有监控目的查询 V$ 视图或维护需要时,才直连 MP/BP;切勿在 MP/BP 上执行大量 SQL,否则可能导致系统崩溃。


七、退出 DMDPC

按正确顺序有序退出:先 SP → 再 BP → 最后 MP:

第一步 退出 SP
第二步 退出 BP
第三步 退出 MP

八、经验总结与踩坑记录

# 经验 / 坑 要点
1 注册顺序铁律 先登录 MP 并注册当前 MP,再注册其他节点;SP/BP 注册必须在首次启动前完成
2 端口规划 port_num 独立、ap_port_num 错开、mp_port 不与 ap 端口冲突
3 角色理解 SP=SQL入口、BP=存数算数、MP=元数据+全局事务;MP 必须常开,BP 异常报"无效的系统状态"
4 SP 重建 SP_DROP_DPC_INSTANCE 后重复注册即可,无需停其他节点
5 验证手段 连 SP 查 V$instance 看所有 RAFT 实例,是标准验证方式
6 规范使用 日常只连 SP,MP/BP 仅监控/维护直连,避免大量 SQL 导致系统崩溃

九、关键命令速查

操作 命令(口令已脱敏)
初始化 SP dminit path=/dmdata/dpc/sp1 instance_name=SP1 port_num=6006 ap_port_num=7007 dpc_mode=SP SYSDBA_PWD=******
初始化 BP dminit path=/dmdata/dpc/bp1 instance_name=BP1 port_num=6007 ap_port_num=7008 dpc_mode=BP SYSDBA_PWD=******
初始化 MP dminit path=/dmdata/dpc/mp instance_name=MP port_num=6009 ap_port_num=7010 dpc_mode=MP SYSDBA_PWD=******
写 MP.INI echo mp_host=192.168.x.224 >/dmdata/dpc/sp1/DAMENG/mp.ini && echo mp_port=9000 >>...
启动 MP dmserver /dmdata/dpc/mp/DAMENG/dm.ini dpc_mode=MP
登录 MP disql 用户名/口令@192.168.x.224:6009
注册 MP SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',7010,6009,'192.168.x.224','192.168.x.224','NORMAL',1,'MP instance')
注册 BP RAFT SP_CREATE_DPC_RAFT('BP','RAFT_1')
注册 BP 实例 SP_CREATE_DPC_INSTANCE('RAFT_1','BP1','BP',7008,6007,'192.168.x.224','192.168.x.224','NORMAL',1,'BP instance')
注册 BP 组 SP_CREATE_DPC_BP_GROUP('BG_1','bp group1')
BP 组加 RAFT SP_BP_GROUP_ADD_RAFT('BG_1','RAFT_1')
注册 SP RAFT SP_CREATE_DPC_RAFT('SP','RAFT_SP1')
注册 SP 实例 SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP1','SP',7007,6006,'223.254.x.136','223.254.x.136','NORMAL',2,'SP instance')
删除 SP SP_DROP_DPC_INSTANCE('SP1')
检查 BP 组 SELECT * FROM DPC_BP_GROUP;
检查 RAFT SELECT * FROM DPC_BP_RAFT;
检查实例 SELECT * FROM DPC_INSTANCE;
启动 SP/BP nohup dmserver /dmdata/dpc/sp1/DAMENG/dm.ini dpc_mode=SP &
连接 SP disql 用户名/口令@192.168.x.224:6006

十、总结

本文通过一个"单机 4 实例"案例,完整走通了达梦 DMDPC 集群的搭建链路:

创建数据目录
    ↓
dminit 四实例(dpc_mode=SP/BP/BP/MP)
    ↓
配置 MP.INI(mp_host / mp_port)
    ↓
启动 MP
    ↓
登录 MP → 注册 MP
    ↓
注册 BP(RAFT_1/RAFT_2 → BP1/BP2 → BP 组 BG_1)
    ↓
注册 SP(RAFT_SP1 → SP1)
    ↓
检查系统表(DPC_BP_GROUP / DPC_BP_RAFT / DPC_INSTANCE)
    ↓
启动 SP + BP(nohup dmserver ... &)
    ↓
连接 SP 查 V$instance 验证

核心要点可归纳为三句话:

  • 角色上:SP 管入口、BP 存算数据、MP 管控制中枢——MP 必须常开,BP 异常系统报"无效的系统状态";
  • 顺序上:注册必须先 MP 后其他、SP/BP 必须在首启前注册、退出按"先 SP 再 BP 后 MP";
  • 验证上:连 SP 查 V$instance 确认所有 RAFT 实例在集群视图内,是搭建成功的标准判据。

掌握这套流程,无论是单机学习还是多机生产 DMDPC,搭建与排障都能快速上手。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服