本文基于单台主机四实例模拟的环境,完整记录达梦 DMDPC(Dream Distributed Parallel Computing)分布式集群的搭建全过程,涵盖:集群规划、实例初始化、MP.INI 配置、节点注册、集群验证与常见踩坑。所有 IP、端口、口令均为示例值,请按实际环境调整。
数据库业务发展到一定规模,单机实例往往扛不住并发与数据量。达梦 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 和端口仅为示例,实际部署必须按真实网段分配。
mkdir -p /dmdata/dpc/sp1 /dmdata/dpc/bp1 /dmdata/dpc/bp2 /dmdata/dpc/mp
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 冲突。
为 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
DMDPC 运行过程中 MP 需始终开启,优先启动:
dmserver /dmdata/dpc/mp/DAMENG/dm.ini dpc_mode=MP
⚠️ 注册顺序铁律:必须先登录 MP 并注册当前 MP 节点,然后才能注册其他节点;SP/BP 的注册必须在它们第一次启动之前完成,否则加入失败。
disql 用户名/口令@192.168.x.224:6009
# 服务器[192.168.x.224:6009]:处于普通打开状态
注册当前 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, 系统模式, 组内实例序号, 描述)。
添加 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');
把两个 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');
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')再重新注册,重建语法与初次注册完全一致。
查询系统表确认:
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
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:
disql 用户名/口令@192.168.x.224:6006
验证集群是否搭建成功,可在 SP 上查 V$instance,确认所有 RAFT 组中的实例都能查到。
⚠️ 规范使用:只有监控目的查询 V$ 视图或维护需要时,才直连 MP/BP;切勿在 MP/BP 上执行大量 SQL,否则可能导致系统崩溃。
按正确顺序有序退出:先 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 验证
核心要点可归纳为三句话:
V$instance 确认所有 RAFT 实例在集群视图内,是搭建成功的标准判据。掌握这套流程,无论是单机学习还是多机生产 DMDPC,搭建与排障都能快速上手。
文章
阅读量
获赞
