注册
DM8 DPC分布式计算集群搭建实验报告
技术分享/ 文章详情 /

DM8 DPC分布式计算集群搭建实验报告

派仔 2026/07/31 141 0 0

1. 实验背景

DM DPC(Dameng Distributed Processing Cluster)是达梦数据库推出的分布式计算集群解决方案,整体采用计算与存储分离的经典分布式架构。集群由 MP、BP、SP 三类核心节点构成,各节点职责独立、协同调度,共同支撑分布式数据存储、并行计算与统一 SQL 服务能力,可有效应对海量数据、高并发混合业务负载。
集群各核心角色功能定义如下:

  • 节点类型 全称 功能职责
  • MP Metadata Processor(元数据节点) 集群全局元数据管理核心,统一维护数据字典、集群拓扑、节点信息等核心元数据,全权处理各类 DDL 数据定义操作,管控集群整体运行规则。
  • BP Backend Processor(数据存储节点) 集群底层数据持久化载体,负责实际存储业务数据表与索引数据,接收并执行 SP 节点下发的分布式子任务,承担数据读写与计算落地工作。
  • SP SQL Processor(计算节点) 集群对外统一服务入口,负责接收用户 SQL 请求、解析语法、生成分布式执行计划,统筹调度多个 BP 节点并行计算,最终汇总结果并返回客户端。
  • DM DPC 支持节点横向扩容,可灵活扩展存储容量与计算性能,同时兼容 OLTP 联机事务处理与 OLAP 联机分析处理混合业务场景,具备高扩展性、高通用性与高稳定性的技术特性。

2. 实验目标

本次实验围绕 DM8 DPC 分布式集群架构部署与功能验证展开,核心实验目标如下:

  1. 完成无副本模式 DPC 集群标准化部署,验证集群基础运行可用性,掌握 Hash、Range、List 三种主流数据分区机制的使用方法与数据分布特征。
  2. 完成普通副本、影子副本两种高可用架构部署规划,掌握 DPC 集群 RAFT 选举机制与多副本冗余原理,理解不同副本模式的高可用实现逻辑。
  3. 深入掌握 DPC 分布式集群整体架构,厘清 MP、BP、SP 节点的职责分工、协同机制,理解分布式数据存储、分区分布与集群高可用核心原理。

3. 实验环境

本次实验基于虚拟化环境搭建,软硬件环境参数统一、配置规范,具体环境信息如下表所示:

  • 实验项目 详细配置信息
  • 虚拟化软件 VMware Workstation 17
  • 宿主机操作系统 Windows 11
  • 虚拟机操作系统 CentOS 7.9(64位)
  • 虚拟机网络及 IP 桥接模式,192.168.0.135
  • 数据库版本 达梦数据库 DM8 V8(Develop 版,2026-04-14)
  • 数据库运维用户 dmdba(密码:Dameng123)
  • 数据库安装路径 /home/dmdba/dmdbms
  • 数据存储路径 /home/dmdba/dmdbms/data/dpc

4. DPC 无副本集群部署流程

本次集群采用单节点多实例部署方式,在同一虚拟机中部署 MP、BP1、BP2、SP1 四类节点,依次完成节点初始化、配置文件部署、服务启动、集群注册与状态验证,整体流程规范可控。

4.1 集群节点规划

节点类型 实例名 PORT_NUM AP_PORT_NUM 数据目录
MP MP 5239 6003 ~/dmdbms/data/dpc/mp/DAMENG
BP1 BP1 5237 6001 ~/dmdbms/data/dpc/bp1/DAMENG
BP2 BP2 5238 6002 ~/dmdbms/data/dpc/bp2/DAMENG
SP SP1 5236 6000 ~/dmdbms/data/dpc/sp1/DAMENG

4.2 集群节点初始化

通过 dminit 工具分别初始化四类集群节点,统一指定页面大小、日志大小、实例角色及密码参数,初始化命令如下:

初始化 MP 元数据节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/mp/ \
  INSTANCE_NAME=MP \
  PORT_NUM=5239 \
  AP_PORT_NUM=6003 \
  DPC_MODE=MP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

初始化 BP1 数据节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/bp1/ \
  INSTANCE_NAME=BP1 \
  PORT_NUM=5237 \
  AP_PORT_NUM=6001 \
  DPC_MODE=BP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

初始化 BP2 数据节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/bp2/ \
  INSTANCE_NAME=BP2 \
  PORT_NUM=5238 \
  AP_PORT_NUM=6002 \
  DPC_MODE=BP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

初始化 SP 计算节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/sp1/ \
  INSTANCE_NAME=SP1 \
  PORT_NUM=5236 \
  AP_PORT_NUM=6000 \
  DPC_MODE=SP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

初始化结果:四个节点均完成初始化,控制台输出 create dm database success.,节点基础数据目录与配置文件生成完毕。

4.3 集群元数据配置(mp.ini)

mp.ini 为 DPC 集群核心元数据配置文件,集群内所有节点必须统一指向 MP 节点的服务地址与通信端口,保障全局元数据一致性。在 MP 节点生成配置后,批量同步至所有节点。

cat > /home/dmdba/dmdbms/data/dpc/mp/DAMENG/mp.ini << EOF
mp_host = 192.168.0.135
mp_port = 9000
EOF

同步到其他节点

cp /home/dmdba/dmdbms/data/dpc/mp/DAMENG/mp.ini /home/dmdba/dmdbms/data/dpc/bp1/DAMENG/
cp /home/dmdba/dmdbms/data/dpc/mp/DAMENG/mp.ini /home/dmdba/dmdbms/data/dpc/bp2/DAMENG/
cp /home/dmdba/dmdbms/data/dpc/mp/DAMENG/mp.ini /home/dmdba/dmdbms/data/dpc/sp1/DAMENG/

4.4 集群节点启动

DPC 集群启动需遵循先元数据节点、后数据节点、最后计算节点的顺序,逐个终端启动各节点服务并指定对应 DPC 运行模式。

终端1:启动 MP 元数据节点

dmserver /home/dmdba/dmdbms/data/dpc/mp/DAMENG/dm.ini dpc_mode=MP

终端2:启动 BP1 数据节点

dmserver /home/dmdba/dmdbms/data/dpc/bp1/DAMENG/dm.ini dpc_mode=BP

终端3:启动 BP2 数据节点

dmserver /home/dmdba/dmdbms/data/dpc/bp2/DAMENG/dm.ini dpc_mode=BP

终端4:启动 SP 计算节点

dmserver /home/dmdba/dmdbms/data/dpc/sp1/DAMENG/dm.ini dpc_mode=SP

各终端输出 SYSTEM IS READY 即为节点启动成功。

4.5 集群节点注册

节点全部启动后,登录 MP 节点,通过系统存储过程完成集群拓扑注册、RAFT 组创建、节点纳入与存储组关联。

disql SYSDBA/'"Dameng123"'@127.0.0.1:5239
  • 注册 MP 自身
SP_CREATE_DPC_INSTANCE(NULL, 'MP', 'MP', 6003, 5239, '192.168.0.135', '192.168.0.135', 'NORMAL', 1, 'MP instance');
  • 创建 BP1 RAFT 组并注册
SP_CREATE_DPC_RAFT('BP', 'RAFT_1');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP1', 'BP', 6001, 5237, '192.168.0.135', '192.168.0.135', 'NORMAL', 0, 'BP instance');
  • 创建 BP2 RAFT 组并注册
SP_CREATE_DPC_RAFT('BP', 'RAFT_2');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP2', 'BP', 6002, 5238, '192.168.0.135', '192.168.0.135', 'NORMAL', 0, 'BP instance');
  • 创建 SP RAFT 组并注册
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
SP_CREATE_DPC_INSTANCE('RAFT_SP1', 'SP1', 'SP', 6000, 5236, '192.168.0.135', '192.168.0.135', 'NORMAL', 1, 'SP instance');
  • 创建存储组 BG_1 并关联 RAFT 组
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');

所有存储过程执行成功,返回「DMSQL 过程已成功完成」,集群拓扑正式生效。

4.6 集群状态验证

通过 DPC 系统视图查询集群所有节点运行状态,确认集群整体就绪。

SELECT NAME, DPC_MODE, SYS_STATUS FROM DPC_INSTANCE;
  • 节点名称 节点类型 运行状态
  • MP 元数据节点 4(正常)
  • BP1 数据存储节点 6(正常)
  • BP2 数据存储节点 6(正常)
  • SP1 计算服务节点 6(正常)
    验证结果:所有节点状态正常,集群拓扑完整、服务运行稳定,可正常提供分布式存储与计算服务。
    4.7 创建用户表空间
    为支撑后续业务数据表创建与数据存储,在集群中创建自定义用户表空间。
CREATE TABLESPACE TS_DEMO DATAFILE '/home/dmdba/dmdbms/data/dpc/ts_demo.dbf' SIZE 128;

5. 数据分布分区测试

DPC 集群支持多种分布式分区策略,实现数据分片存储、并行扫描、分区裁剪等分布式特性。本次实验完成 Hash、Range、List 三类主流分区功能验证。

5.1 Hash 哈希分区测试

哈希分区通过字段哈希算法自动打散数据,保证多节点数据均匀分布,解决数据倾斜问题,适用于高并发随机读写场景。

  • 建表语句
CREATE TABLE test_user (
    user_id INT,
    user_name VARCHAR2(50)
) PARTITION BY HASH(user_id) PARTITIONS 2
TABLESPACE TS_DEMO;
  • 插入测试数据
INSERT INTO test_user VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'), (4, 'David');
COMMIT;
  • 查询分区信息
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME='TEST_USER';
  • 分区数据核验
SELECT * FROM test_user PARTITION (DMHASHPART0);
SELECT * FROM test_user PARTITION (DMHASHPART1);

测试结果:4 条测试数据按 user_id 哈希值均匀分布至两个分区,分区数据均衡、无倾斜,分布式分片存储效果符合预期。

5.2 Range 范围分区测试

范围分区基于时间、数值区间划分数据,支持分区裁剪优化,大幅提升范围查询效率,是时序数据、有序数据的主流分区方案。

  • 建表语句
CREATE TABLE test_range (
    logtime DATE,
    user_id INT,
    user_name VARCHAR2(50)
) PARTITION BY RANGE(logtime) (
    PARTITION p2024q1 VALUES LESS THAN ('2024-04-01'),
    PARTITION p2024q2 VALUES LESS THAN ('2024-07-01'),
    PARTITION p2024q3 VALUES LESS THAN ('2024-10-01'),
    PARTITION p_max VALUES LESS THAN (MAXVALUE)
) TABLESPACE TS_DEMO;
  • 插入测试数据
INSERT INTO test_range VALUES ('2024-02-15', 1, 'Alice');
INSERT INTO test_range VALUES ('2024-05-20', 2, 'Bob');
INSERT INTO test_range VALUES ('2024-08-10', 3, 'Charlie');
INSERT INTO test_range VALUES ('2025-01-01', 4, 'David');
COMMIT;
  • 分区核验
SELECT * FROM test_range PARTITION (p2024q1);
SELECT * FROM test_range PARTITION (p2024q2);
SELECT * FROM test_range PARTITION (p2024q3);
SELECT * FROM test_range PARTITION (p_max);

测试结果:数据按时间区间精准归属对应分区,支持分区裁剪,范围查询性能优化效果显著。

5.3 List 列表分区测试

列表分区适用于地区、类型、状态等离散枚举字段,可对固定取值数据精准归类分区,业务适配性强。

  • 建表语句
CREATE TABLE test_list (
    region VARCHAR2(20),
    user_id INT,
    user_name VARCHAR2(50)
) PARTITION BY LIST(region) (
    PARTITION p_east VALUES ('华东', '上海', '江苏'),
    PARTITION p_south VALUES ('华南', '广东', '深圳'),
    PARTITION p_north VALUES ('华北', '北京', '天津')
) TABLESPACE TS_DEMO;
  • 插入数据
INSERT INTO test_list VALUES ('华东', 1, 'Alice');
INSERT INTO test_list VALUES ('华南', 2, 'Bob');
INSERT INTO test_list VALUES ('华北', 3, 'Charlie');
COMMIT;
  • 分区查询
SELECT * FROM test_list PARTITION (p_east);
SELECT * FROM test_list PARTITION (p_south);
SELECT * FROM test_list PARTITION (p_north);

测试结果:离散枚举数据精准落入对应业务分区,分区归类准确,满足分类分片管理需求。

6. 二级复合分区

二级复合分区采用「Range 一级分区 + Hash 二级子分区」分层分片模式,先按范围粗分数据,再通过哈希均衡细分,兼顾查询性能与数据均衡,适配复杂混合负载场景。

6.1 规划建表语句

CREATE TABLE test_composite (
    logtime DATE,
    user_id INT,
    user_name VARCHAR2(50)
) PARTITION BY RANGE(logtime)
SUBPARTITION BY HASH(user_id) SUBPARTITIONS 2
(
    PARTITION p2024q1 VALUES LESS THAN ('2024-04-01'),
    PARTITION p2024q2 VALUES LESS THAN ('2024-07-01')
) TABLESPACE TS_DEMO;

6.2 规划数据插入

INSERT INTO test_composite VALUES ('2024-02-01', 1, 'Alice');
INSERT INTO test_composite VALUES ('2024-02-15', 2, 'Bob');
INSERT INTO test_composite VALUES ('2024-05-01', 3, 'Charlie');
INSERT INTO test_composite VALUES ('2024-06-15', 4, 'David');
COMMIT;

6.3 规划验证查询

  • 查看一级分区数据
SELECT * FROM test_composite PARTITION (p2024q1);
SELECT * FROM test_composite PARTITION (p2024q2);
  • 查看所有子分区名
SELECT PARTITION_NAME FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME='TEST_COMPOSITE';
  • 查询具体子分区
SELECT * FROM test_composite SUBPARTITION (P2024Q1_DMHASHPART0);
SELECT * FROM test_composite SUBPARTITION (P2024Q1_DMHASHPART1);

7. 多副本高可用部署

DM DPC 基于 RAFT 一致性算法实现高可用架构,支持普通数据副本与影子副本两种冗余模式,适配不同业务可靠性与成本需求。

7.1 普通副本部署规划

本次实验基于单节点MP扩展为三副本RAFT组,实现元数据节点高可用

7.1.1环境准备与清理

  • 停止所有进程
pkill -9 dmserver
pkill -9 dmwatcher
  • 清理旧副本目录(保留主节点备份)
rm -rf /home/dmdba/dmdbms/data/dpc/mp_b
rm -rf /home/dmdba/dmdbms/data/dpc/mp_c

7.1.2初始化MP主节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/mp/ \
  INSTANCE_NAME=MP \
  PORT_NUM=5239 \
  AP_PORT_NUM=6301 \
  DPC_MODE=MP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

7.1.3 配置主节点 mp.ini

cat > /home/dmdba/dmdbms/data/dpc/mp/DAMENG/mp.ini << EOF
mp_host = 192.168.0.135
mp_port = 9000
EOF

7.1.4 配置主节点 dm.ini

cd /home/dmdba/dmdbms/data/dpc/mp/DAMENG
echo "ALTER_MODE_STATUS = 2" >> dm.ini
echo "ARCH_INI = 1" >> dm.ini
echo "MP_PORT = 9000" >> dm.ini
sed -i '/^DW_/d' dm.ini
sed -i '/^WATCHER_/d' dm.ini
sed -i '/^MONITOR_/d' dm.ini

7.1.5 启动主节点验证

dmserver /home/dmdba/dmdbms/data/dpc/mp/DAMENG/dm.ini dpc_mode=MP
  • 输出 SYSTEM IS READY 且 Database mode = 0(OPEN)

7.1.6 初始化MP_B、MP_C副本节点

dminit PATH=/home/dmdba/dmdbms/data/dpc/mp_b/ \
  INSTANCE_NAME=MP_B \
  PORT_NUM=5302 \
  AP_PORT_NUM=6302 \
  DPC_MODE=MP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123
dminit PATH=/home/dmdba/dmdbms/data/dpc/mp_c/ \
  INSTANCE_NAME=MP_C \
  PORT_NUM=5303 \
  AP_PORT_NUM=6303 \
  DPC_MODE=MP \
  DB_NAME=DAMENG \
  PAGE_SIZE=32 \
  EXTENT_SIZE=32 \
  LOG_SIZE=2048 \
  SYSDBA_PWD=Dameng123 \
  SYSAUDITOR_PWD=Dameng123

7.1.7 配置副本节点 mp.ini(仅配置mp_host,不配置mp_port)

cat > /home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/mp.ini << EOF
mp_host = 192.168.0.135
EOF
cat > /home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/mp.ini << EOF
mp_host = 192.168.0.135
EOF

7.1.8 配置RAFT归档

主节点MP:

cat > /home/dmdba/dmdbms/data/dpc/mp/DAMENG/dmarch.ini << 'EOF'
XMAL_HB_INTERVAL = 100
RAFT_HB_INTERVAL = 150
RAFT_VOTE_INTERVAL = 7000
RAFT_SELF_ID = 1

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT
ARCH_DEST = MP_B
ARCH_DEST_ID = 2

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT
ARCH_DEST = MP_C
ARCH_DEST_ID = 3

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/dpc/mp/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
EOF
MP_B:


cat > /home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dmarch.ini << 'EOF'
XMAL_HB_INTERVAL = 100
RAFT_HB_INTERVAL = 150
RAFT_VOTE_INTERVAL = 13000
RAFT_SELF_ID = 2

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT
ARCH_DEST = MP
ARCH_DEST_ID = 1

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT
ARCH_DEST = MP_C
ARCH_DEST_ID = 3

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/dpc/mp_b/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
EOF
MP_C:


cat > /home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dmarch.ini << 'EOF'
XMAL_HB_INTERVAL = 100
RAFT_HB_INTERVAL = 150
RAFT_VOTE_INTERVAL = 21000
RAFT_SELF_ID = 3

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT
ARCH_DEST = MP
ARCH_DEST_ID = 1

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT
ARCH_DEST = MP_B
ARCH_DEST_ID = 2

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/dpc/mp_c/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
EOF

7.1.9 开启归档

echo "ARCH_INI = 1" >> /home/dmdba/dmdbms/data/dpc/mp/DAMENG/dm.ini
echo "ARCH_INI = 1" >> /home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dm.ini
echo "ARCH_INI = 1" >> /home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dm.ini

7.1.10 备份主节点数据

  • 停止主节点(Ctrl+C)
dmrman CTLSTMT="BACKUP DATABASE '/home/dmdba/dmdbms/data/dpc/mp/DAMENG/dm.ini' FULL BACKUPSET '/home/dmdba/dmdbms/data/dpc/mp/bak/MP_FULL'"

7.1.11 还原到副本节点

mkdir -p /home/dmdba/dmdbms/data/dpc/mp_b/bak
mkdir -p /home/dmdba/dmdbms/data/dpc/mp_c/bak
cp -r /home/dmdba/dmdbms/data/dpc/mp/bak/MP_FULL /home/dmdba/dmdbms/data/dpc/mp_b/bak/
cp -r /home/dmdba/dmdbms/data/dpc/mp/bak/MP_FULL /home/dmdba/dmdbms/data/dpc/mp_c/bak/
dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/dpc/mp_b/bak/MP_FULL'"
dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/dpc/mp_b/bak/MP_FULL'"
dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dm.ini' UPDATE DB_MAGIC"
dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/dpc/mp_c/bak/MP_FULL'"
dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/dpc/mp_c/bak/MP_FULL'"
dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dm.ini' UPDATE DB_MAGIC"

7.1.12 启动MP三副本

三个终端分别执行:

  • 终端1:MP(主节点)
dmserver /home/dmdba/dmdbms/data/dpc/mp/DAMENG/dm.ini dpc_mode=MP mount
  • 终端2:MP_B
dmserver /home/dmdba/dmdbms/data/dpc/mp_b/DAMENG/dm.ini dpc_mode=MP mount
  • 终端3:MP_C
dmserver /home/dmdba/dmdbms/data/dpc/mp_c/DAMENG/dm.ini dpc_mode=MP mount

7.1.13 OPEN主节点

disql SYSDBA/'"Dameng123"'@127.0.0.1:5239
ALTER DATABASE OPEN FORCE;

7.1.14 注册MP三副本

SP_CREATE_DPC_INSTANCE('MP_RAFT', 'MP', 'MP', 6301, 5239, '192.168.0.135', '192.168.0.135', 'NORMAL', 1, 'MP instance');
SP_CREATE_DPC_INSTANCE('MP_RAFT', 'MP_B', 'MP', 6302, 5302, '192.168.0.135', '192.168.0.135', 'STANDBY', 2, 'MP instance');
SP_CREATE_DPC_INSTANCE('MP_RAFT', 'MP_C', 'MP', 6303, 5303, '192.168.0.135', '192.168.0.135', 'STANDBY', 3, 'MP instance');

7.1.15 验证集群状态

SELECT NAME, DPC_MODE, SYS_MODE, SYS_STATUS FROM DPC_INSTANCE;

7.2 影子副本部署规划

7.2.1 影子副本规划

  • 节点类型 实例名 PORT_NUM AP_PORT_NUM 角色
  • BP影子副本 BP1_SHADOW 5441 6441 SHADOW
  • BP影子副本 BP2_SHADOW 5541 6541 SHADOW

7.2.2 部署要点

  • 影子副本初始化方式与标准BP相同,使用 dminit 创建实例。
  • 配置 mp.ini 和 dmarch.ini(RAFT归档)。
  • 注册时设置角色为 SHADOW。
  • 不存储实际数据,不承担业务读写压力。

7.2.3 注册影子副本命令

SP_CREATE_DPC_INSTANCE('BP1_RAFT', 'BP1_SHADOW', 'BP', 6441, 5441, '192.168.0.135', '192.168.0.135', 'SHADOW', 4, 'Shadow instance'); 

8. 实验总结

8.1 集群部署模式对比分析

  • 部署模式 高可用能力 数据冗余 存储成本 适用场景
  • 无副本部署 无故障切换能力 无数据冗余 低 开发测试、临时演示、非核心环境
  • 普通副本部署 自动故障切换 多副本完整冗余 高 生产核心业务、高可靠要求场景
  • 影子副本部署 自动故障切换 轻量化冗余保障 中 存储资源受限、需基础高可用的生产场景

8.2 数据分区方式对比分析

  • 分区方式 核心适用场景
  • Hash 哈希分区 高并发随机读写业务,需严格保证数据均匀分布、规避数据倾斜的场景
  • Range 范围分区 时间序列、自增 ID 等有序数据,频繁执行区间范围查询的业务场景
  • List 列表分区 地区、状态码、业务类型等离散枚举型字段的归类分区场景
  • 二级复合分区 多维数据管理、混合查询负载,兼顾范围查询与数据均衡的复杂场景

8.3 实验成果与结论

本次实验完整完成 DM8 DPC 分布式集群的标准化部署、分布式分区功能验证,并完成高可用部署方案规划,圆满达成全部实验目标,核心成果如下:

  • 成功完成无副本 DPC 集群全流程部署,实现多角色节点初始化、配置同步、服务启动、集群注册与状态校验,集群拓扑规范、运行稳定。
  • 完成 Hash、Range、List 三类主流分布式分区功能实测,熟练掌握不同分区策略的数据分布原理、特性与业务适配场景。
  • 完成普通副本、影子副本高可用架构规划,深入理解 DPC 集群 RAFT 一致性选举、故障自动切换与数据冗余机制。
  • 透彻掌握 DPC 计算-存储分离分布式架构,厘清 MP、BP、SP 节点的职责边界与协同调度逻辑,建立完整的达梦分布式集群技术认知体系。
  • 实验结论:本次实验部署流程规范、功能验证完整,DPC 集群基础服务、分布式分区功能运行正常,高可用方案规划合理,完全达到实验预期目标,熟练掌握了 DM8 DPC 分布式集群的架构原理、标准化部署流程与核心功能应用。

附录

附录A:常用操作命令汇总

操作功能 执行命令

  • 启动 MP 节点 dmserver ~/dmdbms/data/dpc/mp/DAMENG/dm.ini dpc_mode=MP
  • 启动 BP1 节点 dmserver ~/dmdbms/data/dpc/bp1/DAMENG/dm.ini dpc_mode=BP
  • 启动 BP2 节点 dmserver ~/dmdbms/data/dpc/bp2/DAMENG/dm.ini dpc_mode=BP
  • 启动 SP 节点 dmserver ~/dmdbms/data/dpc/sp1/DAMENG/dm.ini dpc_mode=SP
  • 停止所有节点 pkill -10 dmserver
  • 登录 MP 节点 disql SYSDBA/’“Dameng123”’@127.0.0.1:5239
  • 登录 SP 节点 disql SYSDBA/’“Dameng123”’@127.0.0.1:5236

附录B:核心系统视图/表说明

  • 对象名称 功能说明
  • DPC_INSTANCE 查询所有已注册集群实例及运行状态
  • DPC_BP_RAFT 查询集群所有 RAFT 高可用组信息
  • DPC_BP_GROUP 查询存储组及关联 RAFT 组配置
  • DPC_TABLESPACE 查询表空间与 RAFT 组关联关系
  • ALL_TAB_PARTITIONS 查询数据表所有分区、子分区信息

附录C:常见报错与解决方案

错误信息 报错原因 解决方法
无效的表或视图名[V$DPC_INSTANCE] 版本视图名称差异 使用静态视图 DPC_INSTANCE 替代查询
未找到有效用户表空间 未创建自定义业务表空间 执行 CREATE TABLESPACE 语句创建用户表空间
DPC系统不支持该操作(Range分区) 缺少 MAXVALUE 兜底分区 添加 PARTITION p_max VALUES LESS THAN (MAXVALUE)
指定的分区不存在 手动分区名与系统生成名不一致通过 ALL_TAB_PARTITIONS 查询系统真实分区名后再查询

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服