注册
DMDPC达梦分布式计算集群的搭建
专栏/技术分享/ 文章详情 /

DMDPC达梦分布式计算集群的搭建

anon 2025/09/26 191 0 0
摘要

一.概述

达梦分布计算集群(DM Distributed Processing Cluster,简称DMDPC)是具有分布式特性的可拓展、高性能数据库解决方案,可以满足具有高并发、大规模数据存储、业务快速扩张等特征的用户业务对数据库的要求。

本次将通过命令行的方式搭建DMDPC达梦分布式计算集群。一般来说通过dem可以更加方便得搭建集群,但是通过命令行的方式可以帮助我们更加直观了解dpc的节点结构,关系,对于我们理解dpc集群有着更好的帮助。

二.系统架构与核心组件

DMDPC采用三层架构设计,由计划生成节点(SP)、数据存储节点(BP)和元数据服务器节点(MP)组成。

1.计划生成节点(SP): 集群的 “大脑”

  • 功能: 接收用户请求,生成执行计划并划分子计划,调度BP和其他SP节点协同执行,最终返回结果。

  • 特性:

    • 无状态化: SP不存储数据或元信息,支持动态扩缩容(最大128节点),可根据负载弹性调整资源。

    • 全SQL支持: 兼容标准SQL语法,支持复杂关联查询、存储过程、视图等企业级特性,应用无需改造即可迁移。

    • 执行能力: 与BP共享统一代码库,可执行部分无状态操作符(如过滤、投影),优化资源利用率。

2.数据存储节点(BP):集群的“数据仓库”

  • 功能: 存储用户数据,执行SP下发的子任务(如扫描、聚合),并通过RAFT协议实现多副本数据同步。

  • 特性:

    • 弹性拓展: 支持动态增删节点,数据重分布过程简化为数据拷贝,不影响业务连续性。

    • 高可用性: 每个BP节点配置多副本(奇数个),基于RAFT协议实现自动选主和故障恢复,RTO(恢复时间目标)小于 1 秒。

    • HTAP支持: 通过行列混合存储和并行执行引擎,同时满足实时交易和复杂分析需求。

3.元数据服务器节点(MP):集群的”字典管家“

  • 功能: 集中管理表结构、分区策略等元数据,为SP和BP提供字典服务。

  • 特性:

    • 单点管理: 集群中仅需一个MP节点,支持多副本部署以提升可靠性。

    • 高效缓存: SP和BP通过本地缓存加速元数据访问,减少网络开销。

分布式执行引擎与并行优化

  • 子任务划分:SP 将查询计划拆解为细粒度子任务(如扫描、连接、聚合),通过数据分发策略(哈希、范围、广播等)分配至多个 BP 节点并行执行。
  • 动态并行度控制:根据数据规模、代价模型和分区策略(如分区智能连接 PWJ)自动调整并行度,最大并行度受限于MAX_PARALLEL_DEGREE参数。
  • 生产者 - 消费者模型:通过ESEND/ERECV操作符实现节点间数据交换,支持跨节点流水线执行,提升资源利用率。

DPC集群在架构上可以分为单副本和多副本,在多副本结构下,但其中某个节点发生故障,它的副本实例会在很短的时间内切换为主库,继续提供服务。多副本相比单副本多了归档配置以及针对副本数据的备份,还原操作。但本次为了方便演示部署过程,本次选择单副本的搭建过程。

RAFT协议:

在 DMDPC 达梦分布式计算集群中,RAFT 协议是保障数据存储节点(BP)高可用性与数据一致性的核心机制,其在集群中的应用可结合架构特性具体说明:

RAFT 协议主要用于 BP 节点的多副本数据同步与集群管理。在 DMDPC 中,每个 BP 节点会配置奇数个副本(如 3 个、5 个等),这是因为 RAFT 协议依赖 “多数派确认” 机制实现一致性 —— 只有当超过半数的副本完成数据同步或状态确认时,操作才会被认定为有效,奇数个副本可避免投票僵局。

具体到功能层面,RAFT 协议承担三大核心角色:一是自动选主,当 BP 节点的主库发生故障时,副本节点会通过 RAFT 协议的选举机制,在短时间内(文档中提到 RTO 小于 1 秒)从副本中选举出新的主库,确保业务不中断;二是数据同步,主库接收的写操作会通过 RAFT 协议同步至各副本,保证所有副本数据的一致性;三是故障恢复,当故障节点恢复后,RAFT 协议会自动将其重新纳入集群,同步缺失的数据,使其恢复为正常副本状态。

在 DMDPC 的多副本结构中,RAFT 协议的应用还体现在集群扩展性上。新增 BP 副本时,只需将其接入 RAFT 组,即可通过协议自动同步数据并参与选举,无需中断现有业务;而单副本结构因未采用 RAFT 协议,不具备自动故障切换能力,仅适用于测试或非核心场景。

RAFT 协议为 DMDPC 的 BP 节点提供了高效、可靠的分布式一致性保障,是其实现高可用性与数据可靠性的关键技术支撑。

三.部署搭建

操作系统: 两台服务器,操作系统为Kylin10 SP1,一台作为主库,一台为备库

JDK: OpenJDK 1.8.0_272

数据库版本: DM8(dm8_20250507_FTarm2000_kylin10_sp1_64.iso) ,服务器端口号设置为1111

(可以在初始化时在参数中设置)

1.初始化实例

本次使用到两台服务器ky1和ky2,搭建单副本三节点集群,实力规划如下:

服务器 角色 实例名 PORT_NUM AP_PORT_NUM
ky1 SP SP 11111 11120
ky1 MP MP 11112 11121
ky2 BP BP1 11110 11120
ky2 BP BP2 11111 11121
ky2 BP BP3 11112 11122

通过下列命令对这些实例进行初始化:

#SP
./dminit  path=/data/test6/dljDmTest/dmdbms/dmdbms/data/dmdpc db_name=SP instance_name=SP port_num=11111 ap_port_num=11120 dpc_mode=SP  page_size=16 CASE_SENSITIVE=0 sysdba_pwd='admin123!@#A' SYSAUDITOR_PWD='admin123!@#A' log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0
#MP
./dminit  path=/data/test6/dljDmTest/dmdbms/dmdbms/data/dmdpc db_name=MP instance_name=MP port_num=11112 ap_port_num=11121 dpc_mode=MP  page_size=16 CASE_SENSITIVE=0 sysdba_pwd='admin123!@#A' SYSAUDITOR_PWD='admin123!@#A' log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0
#BP
./dminit  path=/data/test6/dljDmTest/dmdbms/data/dmdpc db_name=BP1 instance_name=BP1  port_num=11110 ap_port_num=11120 dpc_mode=BP  page_size=16 CASE_SENSITIVE=0 sysdba_pwd='admin123!@#A' SYSAUDITOR_PWD='admin123!@#A' log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0
./dminit  path=/data/test6/dljDmTest/dmdbms/data/dmdpc db_name=BP2 instance_name=BP2  port_num=11111 ap_port_num=11121 dpc_mode=BP page_size=16 CASE_SENSITIVE=0 sysdba_pwd='admin123!@#A' SYSAUDITOR_PWD='admin123!@#A' log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0
./dminit  path=/data/test6/dljDmTest/dmdbms/data/dmdpc db_name=BP3 instance_name=BP3  port_num=11112 ap_port_num=11122 dpc_mode=BP page_size=16 CASE_SENSITIVE=0 sysdba_pwd='admin123!@#A' SYSAUDITOR_PWD='admin123!@#A' log_size=256 BUFFER=1024 AUTO_ADJ_CPUS=0

2.配置mp.ini

为SP,BP和MP的所有实例配置mp.ini文件,放置于dm.ini相同目录下。

mp_host = *.*.*.* #MP所在服务器的ip
mp_port = 11119 #不与MP、BP和SP上的ap_port_num冲突的端口号

3.启动mp实例并登录mp注册实例

当我们配置好了mp.ini文件后,进入到MP实例下的服务器,启动MP。

./dmserver /data/test6/dljDmTest/dmdbms/dmdbms/data/dmdpc/MP/dm.ini dpc_mode=mp

注意: 只有在注册了当前登录的MP节点后,才可以注册其余节点。后续增加MP、SP节点和BP节点无限后之分。

特别注意: 将SP和BP节点加入到DMDPC集群中的步骤必须在SP、BP第一次启动前完成!

4.注册BP和SP实例

//增加MP节点
//注册当前MP实例,MP的RAFT组名可以指定为NULL或者'MP_RAFT'
SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',11112,11121, '*.*.*.*', '*.*.*.*','NORMAL',1,'MP instance');


#为每个BP先注册一个RAFT组
SP_CREATE_DPC_RAFT('BP','RAFT_1');
SP_CREATE_DPC_RAFT('BP','RAFT_2');
SP_CREATE_DPC_RAFT('BP','RAFT_3');
//注册一个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_BP_GROUP_ADD_RAFT('BG_1', 'RAFT_3');

#注册BP实例
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP1', 'BP', 11120, 11110, '*.*.*.*', 'NORMAL', 1, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP2', 'BP', 11121, 11111, '*.*.*.*', 'NORMAL', 1, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_3', 'BP3', 'BP', 11122, 11112, '*.*.*.*', 'NORMAL', 1, 'BP instance');
#为SP实例注册RAFT组
SP_CREATE_DPC_RAFT('SP','RAFT_SP1');
#在RAFT_SP1内注册SP实例SP1
SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP','SP',11120,11111, '*.*.*.*', '*.*.*.*','NORMAL', 2, 'SP instance');

5.检查注册是否成功

再上诉操作完成后,我们就可以通过查询系统表,检查上一步注册是否成功。通过命令

select * from DPC_BP_GROUP; #查询BP_group的数量


select * from DPC_BP_RAFT; #查询RAFT组信息


select * from DPC_INSTANCE; #查询DPC实例信息

分别查看查询出来的结果,如下图所示即表示注册成功:

image.png

6.分别启动SP和BP

BP节点是的启动模式是BP还是BS,在dpc_mode后写BS或BP即可
在单副本的BS模式,可以不启动SP实例。

cd /dm8/bin
./dmserver /dm8/data/dmdpc/bp1/DAMENG/dm.ini dpc_mode=BP
./dmserver /dm8/data/dmdpc/bp2/DAMENG/dm.ini dpc_mode=BP
./dmserver /dm8/data/dmdpc/bp3/DAMENG/dm.ini dpc_mode=BP
./dmserver /dm8/data/dmdpc/sp/DAMENG/dm.ini dpc_mode=SP

至此DMDPC集群搭建完成。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服