注册
DPC多副本交叉部署学习记录
培训园地/ 文章详情 /

DPC多副本交叉部署学习记录

Captain J 2026/08/12 228 0 0

DPC多副本搭建
目录

1、概述
1.1、DPC 核心概念
1.2、多副本架构说明
1.3、本次部署架构
2、架构规划
2.1、概念说明:dminit 初始化
3、初始化实例
3.1、概念说明:实例注册
B4、注册实例
4.1、注册MP实例
4.2、注册BP RAFT组
4.3、注册RAFT_1下的BP实例
4.4、注册RAFT_2下的BP实例
4.5、注册RAFT_3下的BP实例
4.6、注册SP的RAFT
4.7、注册SP实例
4.8、查看RAFT组
4.9、删除实例参考
4.10、查看实例信息
4.11、概念说明:归档配置与多副本同步

  1. 本地归档(ARCHIVE_LOCAL)
  2. RAFT 归档(ARCHIVE_RAFT)
  3. RAFT 选举参数
  4. 备份还原流程
    5、配置归档
    5.1、配置BP11归档
    5.2、备份还原BP11到BP12、BP13、BP13
    5.3、配置BP21归档
    5.4、备份还原BP21到BP22、BP23、BP23
    5.5、配置BP31归档
    5.6、备份还原BP31到BP32、BP33、BP33
    5.7、修改每个BP的dm.ini,开启归档参数
    5.8、配置每个BP实例归档
    5.8.1、RAFT1
    5.8.2、RAFT2
    5.8.3、RAFT3
    5.9、概念说明:注册系统服务
    6、注册服务
    6.1、SP节点
    6.2、MP节点
    6.3、192.168.56.130
    6.4、192.168.56.131
    6.5、192.168.56.132
    6.6、概念说明:启动顺序
    7、启动
    7.1、启动MP
    7.2、启动SP和BP
    查看实例信息

1、概述
本文档详细记录了达梦数据库 DPC(Distributed Process Cluster,分布式集群)多副本架构的搭建过程。DPC 是达梦数据库的分布式集群方案,通过将计算与存储分离,实现高性能、高可用的数据库服务。
1.1、DPC 核心概念
概念 全称 说明
SP SQL Processor SQL 处理器,负责接收客户端 SQL 请求、执行查询计划、返回结果。SP 节点不存储数据,专注于计算,可水平扩展以提升并发处理能力
MP Metadata Processor 元数据处理器,负责管理整个 DPC 集群的元数据信息,包括表结构、分区映射、实例注册信息等。MP 是集群的管理中枢,整个集群只有一个 MP(可配置高可用)
BP Backend Processor 后端处理器,负责实际数据存储和读写。每个 BP 实例存储部分数据分片,多个 BP 组成集群提供海量存储能力
RAFT 组 Raft Group 基于 Raft 共识算法的副本组。同一 RAFT 组内的多个 BP 实例保持数据一致,一个为主库(PRIMARY),其余为备库(STANDBY)。主库故障时自动选举新主库
BP 组 BP Group BP 节点的逻辑分组,用于简化建表时对存储位置的指定。用户创建分区表时指定 BP 组即可,无需关心组内具体哪个 BP 节点存储数据
容灾域 Disaster Recovery Domain 同一份数据的多个副本必须分布在不同容灾域中,确保单容灾域故障时数据仍可用。容灾域通常对应一个机柜或机房
1.2、多副本架构说明
DPC 多副本架构通过 Raft 共识协议实现数据的高可用。每个 RAFT 组包含 3 个 BP 实例(三副本),分布部署在 3 台物理服务器上:
主库(PRIMARY):对外提供读写服务,所有写操作先在主库执行,再通过归档日志同步到备库
备库(STANDBY):通过 RAFT 归档实时接收主库的 redo 日志并回放,保持与主库数据一致。主库故障时,备库可被选举为新主库
选举机制:基于 Raft 协议,通过心跳检测和超时投票自动完成主库选举。各实例设置不同的 RAFT_VOTE_INTERVAL 以确保选举快速收敛
1.3、本次部署架构
节点 IP 部署实例 角色
192.168.56.130 SP1、BP11、BP21、BP31 SP 节点 + 各 RAFT 组主库候选
192.168.56.131 MP、BP12、BP22、BP32 MP 元数据节点 + 各 RAFT 组备库
192.168.56.132 BP13、BP23、BP33 各 RAFT 组备库
RAFT 组规划:
RAFT 组 实例 节点分布 说明
RAFT_1 BP11(主)、BP12(备)、BP13(备) 130 / 131 / 132 数据副本组 1
RAFT_2 BP21(备)、BP22(主)、BP23(备) 130 / 131 / 132 数据副本组 2
RAFT_3 BP31(备)、BP32(备)、BP33(主) 130 / 131 / 132 数据副本组 3
2、架构规划

2.1、概念说明:dminit 初始化
dminit 是达梦数据库的实例初始化工具,用于创建数据库实例的基本目录结构和配置文件。在 DPC 多副本架构中,需分别为 SP、MP、BP 实例执行初始化。
关键参数说明:
参数 说明
path 数据库实例的存储路径
instance_name 实例名称,需与后续注册时的 INST_NAME 一致
port_num 数据库对外服务端口号
ap_port_num MAL 通信端口号,用于节点间内部通信(RAFT 心跳、日志同步等)
dpc_mode DPC 实例类型:SP(SQL 处理器)/ MP(元数据处理器)/ BP(后端处理器)
SYSDBA_PWD SYSDBA 用户密码
SYSAUDITOR_PWD SYSAUDITOR 审计用户密码
初始化原则:
SP 和 MP 各初始化一个实例,BP 按 RAFT 组分别初始化(每个 RAFT 组 3 个 BP 实例)
先初始化主库(BP11/BP21/BP31),再通过备份还原方式创建备库(BP12/BP13 等),避免重复 dminit 产生不同的 DB_MAGIC
3、初始化实例
192.168.56.130
dminit path=/data/sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.131
dminit path=/data/mp instance_name=MP port_num=5237 ap_port_num=6001 dpc_mode=MP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123

//初始化RAFT_1组中的BP实例
192.168.56.130
dminit path=/data/bp11 instance_name=BP11 port_num=5238 ap_port_num=6002 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.131
dminit path=/data/bp12 instance_name=BP12 port_num=5239 ap_port_num=6003 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.132
dminit path=/data/bp13 instance_name=BP13 port_num=5240 ap_port_num=6004 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123

//初始化RAFT_2组中的BP实例
192.168.56.130
dminit path=/data/bp21 instance_name=BP21 port_num=5241 ap_port_num=6005 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.131
dminit path=/data/bp22 instance_name=BP22 port_num=5242 ap_port_num=6006 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.132
dminit path=/data/bp23 instance_name=BP23 port_num=5243 ap_port_num=6007 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123

//初始化RAFT_3组中的BP实例
192.168.56.130
dminit path=/data/bp31 instance_name=BP31 port_num=5244 ap_port_num=6008 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.131
dminit path=/data/bp32 instance_name=BP32 port_num=5245 ap_port_num=6009 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123
192.168.56.132
dminit path=/data/bp33 instance_name=BP33 port_num=5246 ap_port_num=6010 dpc_mode=BP SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123

3.1、概念说明:实例注册
实例初始化完成后,需在 MP 中注册所有实例和 RAFT 组信息,使集群感知各节点的存在。注册通过系统存储过程完成:
SP_CREATE_DPC_RAFT — 注册 RAFT 组
DPC_MODE:RAFT 组类型(BP 或 SP)
RAFT_NAME:RAFT 组名称(如 RAFT_1、RAFT_2、RAFT_SP1)
SP_CREATE_DPC_INSTANCE — 注册实例
RAFT_NAME:所属 RAFT 组名
INST_NAME:实例名称
DPC_MODE:实例类型(SP/MP/BP)
AP_PORT:MAL 通信端口(节点间内部通信)
INST_PORT:数据库服务端口
IP:实例所在服务器 IP
WATCH_IP:监视器 IP(此处配置为主库 IP)
SYS_MODE:系统模式(NORMAL/STANDBY)
STATUS:实例状态(0=未启动,1=已启动)
注册顺序: MP → BP RAFT 组 → BP 实例 → SP RAFT 组 → SP 实例
注意:此阶段仅注册实例和 RAFT 组信息,暂不创建 BP 组和容灾域。BP 组和容灾域在实例启动并建立主备关系后另行配置。
4、注册实例
仅注册实例、RAFT组,暂不创建BP组和容灾域。
P组:主要作用是简化建表时对存储位置(BP)的指定。通过将多个BP节点编入一个组,用户在创建分区表时,可以直接指定数据存储在哪个BP组,而无需关心组内具体是哪个BP节点来存储,系统会自动处理数据在组内各BP间的分布。
容灾域:同一份数据的多个副本必须存储在不同容灾域的存储服务器上。这样,即使某个容灾域(比如一个机柜或一个机房)整体发生故障,其他容灾域中的数据副本依然可用,从而保证数据不丢失、服务不中断。

启动MP,并连接
dmserver /data/mp/DAMENG/dm.ini dpc_mode=mp
disql SYSDBA/"Dameng@123"@localhost:5237
4.1、注册MP实例
SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',6001,5237,'192.168.56.131','NORMAL',1,'MP instance');

4.2、注册BP RAFT组
SP_CREATE_DPC_RAFT('BP','RAFT_1');
SP_CREATE_DPC_RAFT('BP','RAFT_2');
SP_CREATE_DPC_RAFT('BP','RAFT_3');
4.3、注册RAFT_1下的BP实例
SP_CREATE_DPC_INSTANCE('RAFT_1','BP11','BP',6002, 5238, '192.168.56.130','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_1','BP12','BP',6003, 5239, '192.168.56.131','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_1','BP13','BP',6004, 5240, '192.168.56.132','192.168.56.130','STANDBY',0,'BP INSTANCE');
4.4、注册RAFT_2下的BP实例
SP_CREATE_DPC_INSTANCE('RAFT_2','BP21','BP',6005, 5241, '192.168.56.130','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_2','BP22','BP',6006, 5242, '192.168.56.131','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_2','BP23','BP',6007, 5243, '192.168.56.132','192.168.56.130','STANDBY',0,'BP INSTANCE');
4.5、注册RAFT_3下的BP实例
SP_CREATE_DPC_INSTANCE('RAFT_3','BP31','BP',6008, 5244, '192.168.56.130','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_3','BP32','BP',6009, 5245, '192.168.56.131','192.168.56.130','STANDBY',0,'BP INSTANCE');
SP_CREATE_DPC_INSTANCE('RAFT_3','BP33','BP',6010, 5246, '192.168.56.132','192.168.56.130','STANDBY',0,'BP INSTANCE');
4.6、注册SP的RAFT
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
4.7、注册SP实例
SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP1','SP',5000,5236,'192.168.56.130','192.168.56.130','NORMAL',2,'SP INSTANCE');
4.8、查看RAFT组
select * from DPC_BP_RAFT;
select * from DPC_BP_RAFT;

行号 RAFT_ID GROUP_ID DPC_MODE NAME IS_VALID INFO1 INFO2 INFO3


1 0 -1 MP MP_RAFT 1 NULL NULL NULL
2 1 -1 BP RAFT_1 1 NULL NULL NULL
3 2 -1 BP RAFT_2 1 NULL NULL NULL
4 3 -1 BP RAFT_3 1 NULL NULL NULL
5 4 -1 SP RAFT_SP1 1 NULL NULL NULL
4.9、删除实例参考
SP_DROP_DPC_INSTANCE('SP1');

4.10、查看实例信息
select * from DPC_INSTANCE;

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
1 0 4096 MP MP 6001 5237 192.168.56.131 NORMAL 4 1 MP instance 192.168.56.131
9000 0 NULL

2 1 4097 BP11 BP 6002 5238 192.168.56.130 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

3 1 4098 BP12 BP 6003 5239 192.168.56.131 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
4 1 4099 BP13 BP 6004 5240 192.168.56.132 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

5 2 4100 BP21 BP 6005 5241 192.168.56.130 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

6 2 4101 BP22 BP 6006 5242 192.168.56.131 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
7 2 4102 BP23 BP 6007 5243 192.168.56.132 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

8 3 4103 BP31 BP 6008 5244 192.168.56.130 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

9 3 4104 BP32 BP 6009 5245 192.168.56.131 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
10 3 4105 BP33 BP 6010 5246 192.168.56.132 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

11 4 4106 SP1 SP 6000 5236 192.168.56.130 NORMAL 6 2 SP INSTANCE 192.168.56.130
NULL 0 NULL

11 rows got
4.11、概念说明:归档配置与多副本同步
多副本架构的核心是通过 RAFT 归档实现主备数据同步。每个 BP 实例需配置两类归档:

  1. 本地归档(ARCHIVE_LOCAL)
    将 redo 日志归档到本地文件系统,用于单实例的数据恢复。关键参数:
    ARCH_TYPE = LOCAL:归档类型为本地归档
    ARCH_DEST:归档文件存放路径
    ARCH_FILE_SIZE:单个归档文件大小(MB)
    ARCH_SPACE_LIMIT:归档空间上限(MB),0 表示无限制
  2. RAFT 归档(ARCHIVE_RAFT)
    将 redo 日志通过 RAFT 协议同步到同组其他 BP 实例,实现多副本数据一致性。关键参数:
    ARCH_TYPE = RAFT:归档类型为 RAFT 归档
    ARCH_DEST:归档目标实例名(同 RAFT 组内的其他 BP 实例)
    ARCH_DEST_ID:归档目标的多副本节点 ID
  3. RAFT 选举参数
    参数 说明
    XMAL_HB_INTERVAL 节点间通信检测间隔(秒),用于检测节点存活状态
    RAFT_HB_INTERVAL 选举心跳间隔(毫秒),主库定期发送心跳维持领导者地位
    RAFT_VOTE_INTERVAL 选举超时时间(毫秒),备库在此时长内未收到心跳则发起选举。三个副本需设置不同值以确保快速选出主库
    RAFT_SELF_ID 当前实例在 RAFT 组中的唯一标识 ID(1/2/3)
  4. 备份还原流程
    多副本搭建时,需先初始化主库(BP11/BP21/BP31),再通过备份还原将数据复制到备库(BP12/BP13 等):
    前台启动主库并正常关闭(生成完整的数据库文件)
    使用 dmrman 全量备份主库
    将备份集拷贝到备库节点
    使用 dmrman 恢复备库(RESTORE + RECOVER + UPDATE DB_MAGIC)
    为所有 BP 实例配置 dm.ini 开启归档(ARCH_INI = 1)
    为每个 BP 实例配置 dmarch.ini(RAFT 归档 + 本地归档)
    5、配置归档
    5.1、配置BP11归档
    mkdir /data/bp11/arch

开启数据库归档参数
vim /data/bp11/DAMENG/dm.ini
ARCH_INI = 1

设置归档参数
vim /data/bp11/DAMENG/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /data/bp11/arch  #本地归档存放路径
 ARCH_FILE_SIZE           = 128  #单个归档大小,单位MB
 ARCH_SPACE_LIMIT         = 10240  #归档上限,单位MB

5.2、备份还原BP11到BP12、BP13、BP13
前台先启动实例
dmserver /data/bp11/DAMENG/dm.ini dpc_mode=bp
启动后关闭

备份数据库
dmrman USE_AP=2
backup database '/data/bp11/DAMENG/dm.ini' full backupset '/data/bp11/bp11full'

拷贝备份
scp -r /data/bp11/bp11full dmdba@192.168.56.131:/data/bp12
scp -r /data/bp11/bp11full dmdba@192.168.56.132:/data/bp13

恢复至BP12
dmrman USE_AP=2
RESTORE DATABASE '/data/bp12/DAMENG/dm.ini' FROM BACKUPSET '/data/bp12/bp11full'
RECOVER DATABASE '/data/bp12/DAMENG/dm.ini' FROM BACKUPSET '/data/bp12/bp11full'
RECOVER DATABASE '/data/bp12/DAMENG/dm.ini' UPDATE DB_MAGIC

恢复至BP13
dmrman USE_AP=2
RESTORE DATABASE '/data/bp13/DAMENG/dm.ini' FROM BACKUPSET '/data/bp13/bp11full'
RECOVER DATABASE '/data/bp13/DAMENG/dm.ini' FROM BACKUPSET '/data/bp13/bp11full'
RECOVER DATABASE '/data/bp13/DAMENG/dm.ini' UPDATE DB_MAGIC

5.3、配置BP21归档
mkdir /data/bp21/arch

开启数据库归档参数
vim /data/bp21/DAMENG/dm.ini
ARCH_INI = 1

设置归档参数
vim /data/bp21/DAMENG/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /data/bp21/arch  #本地归档存放路径
 ARCH_FILE_SIZE           = 2048  #单个归档大小,单位MB
 ARCH_SPACE_LIMIT         = 10240  #归档上限,单位MB

5.4、备份还原BP21到BP22、BP23、BP23
前台先启动实例
dmserver /data/bp21/DAMENG/dm.ini dpc_mode=bp
启动后关闭

备份数据库
dmrman USE_AP=2
backup database '/data/bp21/DAMENG/dm.ini' full backupset '/data/bp21/bp21full'

拷贝备份
scp -r /data/bp21/bp21full dmdba@192.168.56.131:/data/bp22
scp -r /data/bp21/bp21full dmdba@192.168.56.132:/data/bp23

恢复至BP22
dmrman USE_AP=2
RESTORE DATABASE '/data/bp22/DAMENG/dm.ini' FROM BACKUPSET '/data/bp22/bp21full'
RECOVER DATABASE '/data/bp22/DAMENG/dm.ini' FROM BACKUPSET '/data/bp22/bp21full'
RECOVER DATABASE '/data/bp22/DAMENG/dm.ini' UPDATE DB_MAGIC

恢复至BP23
dmrman USE_AP=2
RESTORE DATABASE '/data/bp23/DAMENG/dm.ini' FROM BACKUPSET '/data/bp23/bp21full'
RECOVER DATABASE '/data/bp23/DAMENG/dm.ini' FROM BACKUPSET '/data/bp23/bp21full'
RECOVER DATABASE '/data/bp23/DAMENG/dm.ini' UPDATE DB_MAGIC

5.5、配置BP31归档
mkdir /data/bp31/arch

开启数据库归档参数
vim /data/bp11/DAMENG/dm.ini
ARCH_INI = 1

设置归档参数
vim /data/bp11/DAMENG/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /data/bp31/arch  #本地归档存放路径
 ARCH_FILE_SIZE           = 2048  #单个归档大小,单位MB
 ARCH_SPACE_LIMIT         = 10240  #归档上限,单位MB

5.6、备份还原BP31到BP32、BP33、BP33
前台先启动实例
dmserver /data/bp31/DAMENG/dm.ini dpc_mode=bp
启动后关闭

备份数据库
dmrman USE_AP=2
backup database '/data/bp31/DAMENG/dm.ini' full backupset '/data/bp31/bp31full'

拷贝备份
scp -r /data/bp31/bp31full dmdba@192.168.56.131:/data/bp32
scp -r /data/bp31/bp31full dmdba@192.168.56.132:/data/bp33

恢复至BP32
dmrman USE_AP=2
RESTORE DATABASE '/data/bp32/DAMENG/dm.ini' FROM BACKUPSET '/data/bp32/bp31full'
RECOVER DATABASE '/data/bp32/DAMENG/dm.ini' FROM BACKUPSET '/data/bp32/bp31full'
RECOVER DATABASE '/data/bp32/DAMENG/dm.ini' UPDATE DB_MAGIC

恢复至BP33
dmrman USE_AP=2
RESTORE DATABASE '/data/bp33/DAMENG/dm.ini' FROM BACKUPSET '/data/bp33/bp31full'
RECOVER DATABASE '/data/bp33/DAMENG/dm.ini' FROM BACKUPSET '/data/bp33/bp31full'
RECOVER DATABASE '/data/bp33/DAMENG/dm.ini' UPDATE DB_MAGIC

5.7、修改每个BP的dm.ini,开启归档参数
开启数据库归档参数
vim /data/bp11/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp12/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp13/DAMENG/dm.ini
ARCH_INI = 1

vim /data/bp21/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp22/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp23/DAMENG/dm.ini
ARCH_INI = 1

vim /data/bp31/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp32/DAMENG/dm.ini
ARCH_INI = 1
vim /data/bp33/DAMENG/dm.ini
ARCH_INI = 1

5.8、配置每个BP实例归档
5.8.1、RAFT1
配置BP11
vim /data/bp11/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 1 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP12 #归档目标实例名
ARCH_DEST_ID = 2 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP13 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp11/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP12
vim /data/bp12/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1000 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 2 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP11 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP13 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp12/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP13
vim /data/bp13/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 3 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP11 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP12 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp13/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

5.8.2、RAFT2
配置BP21
vim /data/bp21/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 1 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP22 #归档目标实例名
ARCH_DEST_ID = 2 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP23 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp21/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP22
vim /data/bp22/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1000 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 2 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP21 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP23 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp12/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP23
vim /data/bp23/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 3 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP21 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP22 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp23/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

5.8.3、RAFT3
配置BP31
vim /data/bp31/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 1 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP32 #归档目标实例名
ARCH_DEST_ID = 2 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP33 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp31/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP32
vim /data/bp32/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1000 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 2 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP31 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP33 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp32/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

配置BP33
vim /data/bp33/DAMENG/dmarch.ini
#添加以下内容

XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间 三个库设置不同以尽快选出主库
RAFT_SELF_ID = 3 # 多副本自身节点 ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP31 #归档目标实例名
ARCH_DEST_ID = 1 # 归档目标多副本节点 ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP33 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点 ID

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/bp33/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值 单位 MB
ARCH_SPACE_LIMIT = 10240 #本地归档文件总大小 ,0 表示无限制

5.9、概念说明:注册系统服务
通过 dm_service_installer.sh 脚本将达梦数据库实例注册为操作系统级服务,实现开机自启和统一管理:
-t dmserver:指定服务类型为数据库服务
-p <实例名>:指定服务名前缀,注册后生成 DmService<实例名> 的系统服务
-dpc_mode <模式>:指定 DPC 模式(SP/MP/BP),与 dminit 初始化时的模式一致
-dm_ini <路径>:指定实例的 dm.ini 配置文件路径
-m mount:仅 BP 实例使用,以 MOUNT 模式启动,等待 RAFT 选举完成后再对外提供服务
注意:服务注册脚本需以 root 用户执行(su - root),注册后的服务可通过 DmService<实例名> start/stop 进行管理。
6、注册服务
6.1、SP节点
su - root
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p SP1 -dpc_mode SP -dm_ini /data/sp1/DAMENG/dm.ini
6.2、MP节点
su - root
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p MP -dpc_mode MP -dm_ini /data/mp/DAMENG/dm.ini
6.3、192.168.56.130
su - root
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP11 -dpc_mode BP -dm_ini /data/bp11/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP21 -dpc_mode BP -dm_ini /data/bp21/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP31 -dpc_mode BP -dm_ini /data/bp31/DAMENG/dm.ini -m mount
6.4、192.168.56.131
su - root
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP12 -dpc_mode BP -dm_ini /data/bp12/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP22 -dpc_mode BP -dm_ini /data/bp22/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP32 -dpc_mode BP -dm_ini /data/bp32/DAMENG/dm.ini -m mount
6.5、192.168.56.132
su - root
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP13 -dpc_mode BP -dm_ini /data/bp13/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP23 -dpc_mode BP -dm_ini /data/bp23/DAMENG/dm.ini -m mount
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p BP33 -dpc_mode BP -dm_ini /data/bp33/DAMENG/dm.ini -m mount
6.6、概念说明:启动顺序
DPC 集群启动有严格的顺序要求,必须按照 MP → SP/BP 的顺序启动:
MP 必须最先启动:MP 管理全集群的元数据(实例信息、RAFT 组信息、分区映射等),SP 和 BP 启动时需要向 MP 注册并获取元数据,若 MP 未启动则其他节点无法正常工作。
SP 和 BP 启动顺序不限:MP 启动完成后,SP 和 BP 可并行启动。SP 启动后即可接受客户端连接,BP 启动后开始提供数据存储服务。
BP 以 mount 模式启动:BP 实例注册系统服务时使用了 -m mount 参数,表示以 MOUNT 状态启动。MOUNT 状态下数据库不对外提供读写服务,需等待 RAFT 选举完成、主备关系确立后自动切换到 OPEN 状态。
7、启动
7.1、启动MP
192.168.56.131:
DmServiceMP start
7.2、启动SP和BP
192.168.56.130:
DmServiceSP1 start
DmServiceBP11 start
DmServiceBP21 start
DmServiceBP31 start

192.168.56.131:
DmServiceBP12 start
DmServiceBP22 start
DmServiceBP32 start

192.168.56.132:
DmServiceBP13 start
DmServiceBP23 start
DmServiceBP33 start
7.3、查看实例信息
select * from DPC_INSTANCE;
行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
1 0 4096 MP MP 6001 5237 192.168.56.131 NORMAL 4 1 MP instance 192.168.56.131
9000 0 NULL

2 1 4097 BP11 BP 6002 5238 192.168.56.130 PRIMARY 4 1 BP INSTANCE 192.168.56.130
NULL 0 NULL

3 1 4098 BP12 BP 6003 5239 192.168.56.131 STANDBY 4 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
4 1 4099 BP13 BP 6004 5240 192.168.56.132 STANDBY 4 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

5 2 4100 BP21 BP 6005 5241 192.168.56.130 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

6 2 4101 BP22 BP 6006 5242 192.168.56.131 PRIMARY 4 1 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
7 2 4102 BP23 BP 6007 5243 192.168.56.132 STANDBY 4 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

8 3 4103 BP31 BP 6008 5244 192.168.56.130 STANDBY 6 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

9 3 4104 BP32 BP 6009 5245 192.168.56.131 PRIMARY 4 1 BP INSTANCE 192.168.56.130
NULL 0 NULL

行号 RAFT_ID INST_ID NAME DPC_MODE XMAL_PORT INST_PORT IP_INTERNAL SYS_MODE SYS_STATUS STATUS DESCRIPTION IP_EXTERNAL


INFO1 INFO2 INFO3
----------- -------------------- ----------
10 3 4105 BP33 BP 6010 5246 192.168.56.132 STANDBY 4 0 BP INSTANCE 192.168.56.130
NULL 0 NULL

11 4 4107 SP1 SP 5000 5236 192.168.56.130 NORMAL 4 1 SP INSTANCE 192.168.56.130
NULL 0 NULL

8、功能测试

8.1、创建测试数据
8.1.1、创建表空间
DMDPC 支持表空间的功能,包括表空间的创建,建表时指定表空间,创建分区组时指定表空间,基于表空间实现的节点间数据迁移从而实现数据重分布等功能。
表空间创建时,需要指定表空间所在的BP组或者RAFT组,
基于当前的架构,规划如下表空间

连接SP节点

-- 为 RAFT_1 创建表空间 TS_BP1
CREATE TABLESPACE TS_BP1 DATAFILE 'TS_BP1.DBF' SIZE 128 AUTOEXTEND ON NEXT 1024 STORAGE(ON RAFT_1);

-- 为 RAFT_2 创建表空间 TS_BP2
CREATE TABLESPACE TS_BP2 DATAFILE 'TS_BP2.DBF' SIZE 128 AUTOEXTEND ON NEXT 1024 STORAGE(ON RAFT_2);

-- 为 RAFT_3 创建表空间 TS_BP3
CREATE TABLESPACE TS_BP3 DATAFILE 'TS_BP3.DBF' SIZE 128 AUTOEXTEND ON NEXT 1024 STORAGE(ON RAFT_3);

8.1.2、创建表空间组
表空间组是一组位于相同 RAFT 或者不同 RAFT 上的表空间集合,用于用户建表或者指定用户默认的存储位置。表空间组中的表空间可动态扩展和收缩。且能同时包含普通表空间和混合表空间。

连接SP节点

-- 1. 创建表空间组 TSG_12(仅包含 TS_BP1 和 TS_BP2)
CALL SP_TS_GROUP_CREATE('TSG_12', '仅包含BP组1和BP组2的表空间组');
CALL SP_TS_GROUP_ADD_TS('TSG_12', 'TS_BP1');
CALL SP_TS_GROUP_ADD_TS('TSG_12', 'TS_BP2');

-- 2. 创建表空间组 TSG_ALL(包含 TS_BP1、TS_BP2 和 TS_BP3)
CALL SP_TS_GROUP_CREATE('TSG_ALL', '包含所有BP组表空间');
CALL SP_TS_GROUP_ADD_TS('TSG_ALL', 'TS_BP1');
CALL SP_TS_GROUP_ADD_TS('TSG_ALL', 'TS_BP2');
CALL SP_TS_GROUP_ADD_TS('TSG_ALL', 'TS_BP3');

8.1.3、创建用户
-- 1. 创建用户 USER_12,默认使用仅包含 TS_BP1、TS_BP2 的表空间组
CREATE USER "USER_12" IDENTIFIED BY "Dameng123"
DEFAULT TABLESPACE GROUP "TSG_12";

-- 2. 创建用户 USER_ALL,默认使用包含所有表空间的表空间组
CREATE USER "USER_ALL" IDENTIFIED BY "Dameng123"
DEFAULT TABLESPACE GROUP "TSG_ALL";

GRANT "PUBLIC","RESOURCE","VTI","SOI" TO "USER_12";
GRANT "PUBLIC","RESOURCE","VTI","SOI" TO "USER_ALL";

8.1.4、创建表
普通表不能指定
-- 切换至 USER_12 用户
CONN USER_12/"Dameng123"@SP节点IP:端口;

-- 创建普通表(非分区表):整表只存储在一个BP上
CREATE TABLE T_NORMAL_12 (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
CREATE_TIME DATE
) STORAGE(ON TSG_12);

-- 创建分区表(HASH分区):数据自动分布到 TSG_12 包含的表空间(TS_BP1、TS_BP2)
CREATE TABLE T_PART_12 (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
CREATE_TIME DATE
) PARTITION BY HASH(ID) PARTITIONS 4 STORAGE(ON TSG_12);

-- 普通表插入100条数据
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO T_NORMAL_12 VALUES (i, 'normal_12_' || i, SYSDATE + i);
END LOOP;
COMMIT;
END;
/
-- 分区表插入100条数据(便于观察分布)
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO T_PART_12 VALUES (i, 'part_12_' || i, SYSDATE);
END LOOP;
COMMIT;
END;

-- 切换至 USER_ALL 用户
CONN USER_ALL/"Dameng123"@SP节点IP:端口;

-- 创建普通表
CREATE TABLE T_NORMAL_ALL (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
CREATE_TIME DATE
) STORAGE(ON TSG_ALL);

-- 创建分区表(HASH分区):数据自动分布到 TSG_ALL 包含的全部三个表空间
CREATE TABLE T_PART_ALL (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
CREATE_TIME DATE
) PARTITION BY HASH(ID) PARTITIONS 6 STORAGE(ON TSG_ALL);
-- 普通表插入100条数据
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO T_NORMAL_ALL VALUES (i, 'normal_all_' || i, SYSDATE + i);
END LOOP;
COMMIT;
END;
/
-- 分区表插入100条数据
BEGIN
FOR i IN 1..100 LOOP
INSERT INTO T_PART_ALL VALUES (i, 'part_all_' || i, SYSDATE);
END LOOP;
COMMIT;
END;

8.1.5、查看数据分布
-- 查看 USER_12 普通表在各BP的行数
CALL SP_GET_EP_COUNT('USER_12', 'T_NORMAL_12');

-- 查看 USER_12 分区表在各BP的行数
CALL SP_GET_EP_COUNT('USER_12', 'T_PART_12');

-- 查看 USER_ALL 普通表在各BP的行数
CALL SP_GET_EP_COUNT('USER_ALL', 'T_NORMAL_ALL');

-- 查看 USER_ALL 分区表在各BP的行数
CALL SP_GET_EP_COUNT('USER_ALL', 'T_PART_ALL');

-- 查看表空间与BP组的映射关系
SELECT B.NAME AS TS_NAME, C.NAME AS BP_NAME
FROM DPC_TABLESPACE A, V$TABLESPACE B, DPC_INSTANCE C
WHERE A.TS_ID = B.ID AND C.RAFT_ID = A.RAFT_ID
ORDER BY B.NAME;
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服