注册
DMDPC-BP多副本架构部署
专栏/技术分享/ 文章详情 /

DMDPC-BP多副本架构部署

DM_KSL 2026/09/23 279 0 0
摘要

DMDPC分布式计算集群

一、 系统架构

DMDPC 架构旨在提供具有分布式特性的可扩展、高性能数据库解决方案,以满足具有高并发、大规模数据存储、业务快速扩张等特征的用户业务对数据库的要求。

二、 DMPC架构

一个完整的 DMDPC 架构由计划生成节点 SP、数据存储节点 BP 和元数据服务器节点MP 三部分组成。SP 对外提供分布式数据库服务,用户可以登录到任意一个 SP 节点,获得完整的数据库服务;BP 负责存储数据,执行 SP 的调度指令并将执行结果返回给 SP;MP 负责存储元数据并向 SP、BP 提供元数据服务。
SP 节点不存储数据,配置成单机即可。MP 和 BP 节点既可以配置成单机,也可以配置成多副本系统。其中每一个多副本系统中只有一个作为主节点,其余节点均作为备份节点。
下图是一个典型的 DMDPC 架构图。左侧为单机 DMDPC,右侧为配有多副本系统的DMDPC。
image.png

三、 DMDPC集群部署

一个最小的 DMDPC 集群包含一个 BP、一个 SP 和一个 MP。可以在部署完毕后随时增添新的 BP、SP 节点。至少需要两台 BP 才方便看出子任务的各种计划形态和调度。
Windows 和 Linux 环境下部署 DMDPC 集群并无区别,目前支持借助命令行工具部署和 DEM 图形化界面方式部署两种方式。
以下将使用命令行工具部署 DMDPC(BP 多副本架构)

(一) 命令行工具部署 DMDPC(BP 多副本架构)

DMDPC 集群规划部署 1 个 SP,2 个 BP 和 1 个 MP。MP 采用单机模式,BP 采用多副本模式(每个 BP 配置成 3 副本)。

1. 规划

RAFT 组名 角色 实例名称 IP PORT_NUM AP_PORT_NUM 路径
RAFT_SP 1 SP SP1 192.168.244.143 5236 6000 /dm/data/sp1
缺省为 NULL 或者 MP_RAFT MP MP 192.168.244.143 5237 6001 /dm/data/mp
RFAT_1 BP BP1 1 192.168.244.143 5238 6002 /dm/data/bp1 1
BP BP1 2 192.168.244.143 5239 6003 /dm/data/bp1 2
BP BP1 3 192.168.244.143 5240 6004 /dm/data/bp1 3
RFAT_2 BP BP2 1 192.168.244.143 5241 6005 /dm/data/bp2 1
BP BP2 2 192.168.244.143 5243 6006 /dm/data/bp2 2
BP BP2 3 192.168.244.143 5244 6007 /dm/data/bp2 3

2. 初始化实例

初始化8实例,SP、MP和6个BP角色。

dminit path=/dm/data/sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/mp instance_name=MP port_num=5237 ap_port_num=6001 dpc_mode=MP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

image.png

dminit path=/dm/data/bp11 instance_name=BP11 port_num=5238 ap_port_num=6002 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/bp12 instance_name=BP12 port_num=5239 ap_port_num=6003 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/bp13 instance_name=BP13 port_num=5240 ap_port_num=6004 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/bp21 instance_name=BP21 port_num=5241 ap_port_num=6005 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/bp22 instance_name=BP22 port_num=5242 ap_port_num=6006 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
dminit path=/dm/data/bp23 instance_name=BP23 port_num=5243 ap_port_num=6007 dpc_mode=BP SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

image.png

3. 为SP、BP和MP配置MP.INI文件

为SP、BP和MP 实例配置 MP.INI 文件。

mp_host = 192.168.244.143 
mp_port = 9000			#与 MP、BP 和 SP 上的 ap_port_num 不冲突的端口号

将 MP.INI 文件内容分别写入 SP(SP1)、两个 RAFT 组内的所有 BP(BP11、BP12、BP13、BP21、BP22、BP23)和 MP 中。
向SP写入MP.INI
vim /dm/data/sp1/DAMENG/mp.ini

mp_host = 192.168.244.143 
mp_port = 9000 #与 MP、BP 和 SP 上的 ap_port_num 不冲突的端口号

向两个 RAFT 组内的所有 BP 写入 MP.INI,注意不同BP的路径不同

vim /dm/data/bp11/DAMENG/mp.ini
vim /dm/data/bp12/DAMENG/mp.ini
vim /dm/data/bp13/DAMENG/mp.ini
vim /dm/data/bp21/DAMENG/mp.ini
vim /dm/data/bp22/DAMENG/mp.ini
vim /dm/data/bp23/DAMENG/mp.ini


mp_host = 192.168.244.143 
mp_port = 9000 			#与 MP、BP 和 SP 上的 ap_port_num 不冲突的端口号


为 MP 配置 MP.INI 文件
vim /dm/data/mp/DAMENG/mp.ini

mp_host = 192.168.244.143 
mp_port = 9000 			#与 MP、BP 和 SP 上的 ap_port_num 不冲突的端口号


4. 启动MP

启动 MP。

dmserver /dm/data/mp/DAMENG/dm.ini dpc_mode=MP

DMDPC 运行过程中,MP 需要始终处于开启状态。
image.png

5. 将MP、SP和BP加入集群

增加 1 个 MP、1 个 SP 和 6 个 BP 节点。只有在注册当前登录 MP 节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
搭建 DMDPC 过程中加入 MP、SP 和 BP,必须登录 MP 进行操作

disql SYSDBA/Dameng123@192.168.244.143:5237

image.png

增加 MP 节点
注册当前 MP 实例,MP 的 RAFT 组名可以指定为 NULL 或者’MP_RAFT’

SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',6001,5237, '192.168.244.143', '192.168.244.143','NORMAL',1,'MP instance');

增加 BP 节点
注册 RAFT 组,名为 RAFT_1

SP_CREATE_DPC_RAFT('BP', 'RAFT_1');

在 RAFT_1 组内注册 BP 实例 BP11、BP12、BP13
所有实例均以 STANDBY 模式、INVALID 状态注册进 MP,实例启动后,在 RAFT 组内选举出有效主库后,会自动更新 MP 中的模式、状态信息。

SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP11', 'BP', 6002, 5238, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP12', 'BP', 6003, 5239, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP13', 'BP', 6004, 5240, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');

image.png
注册 RAFT 组,名为 RAFT_2

SP_CREATE_DPC_RAFT('BP', 'RAFT_2');

在 RAFT_2 内注册 BP 实例 BP21、BP22、BP23

SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP21', 'BP', 6005, 5241, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP22', 'BP', 6006, 5242, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP23', 'BP', 6007, 5243, '192.168.244.143', '192.168.244.143','STANDBY', 0, 'BP instance');

image.png

注册一个 BP 组,名为 BG_1

SP_CREATE_DPC_BP_GROUP('BG_1', 'bp group1');

在 BP 组内添加 RAFT 组

SP_BP_GROUP_ADD_RAFT('BG_1', 'RAFT_1');
SP_BP_GROUP_ADD_RAFT('BG_1', 'RAFT_2');

image.png
增加 SP 节点
增加 SP,也要注册 RAFT 组,参数 1 为空串

SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');

在 RAFT_SP1 内注册 SP 实例 SP1

SP_CREATE_DPC_INSTANCE('RAFT_SP1', 'SP1', 'SP', 6000, 5236, '192.168.244.143', '192.168.244.143','NORMAL', 2, 'SP instance');

image.png

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

6. 检查注册是否成功

查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。

select * from DPC_BP_GROUP;
select * from DPC_BP_RAFT;
select * from DPC_INSTANCE;

image.png
image.png

7. 配置BP11

配置 BP11 的 dm.ini

ARCH_INI = 1 		#打开归档配置

配置 BP11 的本地归档 dmarch.ini。此处先只配本地归档,避免提前发起 RAFT 选举

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

正常启动 BP11 到 Open 状态

dmserver /dm/data/bp11/DAMENG/dm.ini dpc_mode=bp

image.png

8. 准备BP RAFT组内数据

RAFT_1 和 RAFT_2 组内的 BP 数据准备方式完全相同,只是路径不同,这里对组RAFT_1的数据准备步骤进行说明,RAFT_2 组参考这个步骤执行即可。注意,RAFT_2 组和 RAFT_1组要各自按照此小节介绍的方式准备数据,RAFT_2 组不能直接使用RAFT_1 组的备份集执行还原恢复。
退出 BP11 并进行脱机备份
首先,退出 BP11。其次,对 BP11 进行脱机备份。

dmrman CTLSTMT="BACKUP DATABASE '/dm/data/bp11/DAMENG/dm.ini' FULL TO BACKUP_01 BACKUPSET '/dm/data/bp11/BACKUP_01'" USE_AP=2

image.png

将 BP11 的备份文件脱机还原到 BP12

//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE '/dm/data/bp12/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/bp11/BACKUP_01'" USE_AP=2
//因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm/data/bp12/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2

image.png

将 BP11 的备份文件脱机还原到 BP13

//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE '/dm/data/bp13/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/bp11/BACKUP_01'" USE_AP=2
//因为脱机备份没有产生任何 REDO 日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm/data/bp13/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2

image.png

RAFT_1 组各实例(BP11、BP12、BP13)和 RAFT_2 组各实例(BP21、BP22、BP23)中dm.ini 文件的配置方法完全相同。
下面以 BP11 的 dm.ini 为例进行介绍。dm.ini 文件配置如下:

ARCH_INI = 1 		#打开归档配置
ALTER_MODE_STATUS = 0 		#不允许用户直接通过 SQL 语句修改服务器模式

修改 DMARCH.INI,配置 RAFT 归档与本地归档。RAFT_1 组配置如下,RAFT_2 组配置可参考此步骤进行配置。除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
(1). 配置 BP11 归档文件 DMARCH.INI
当前实例为 BP11,需要向 BP12、BP13 同步数据,因此 RAFT 归档中的 ARCH_DEST 分别配置为 BP12、BP13。
DMARCH.INI 文件内容如下:

XMAL_HB_INTERVAL = 5 		#节点通信检测间隔
RAFT_HB_INTERVAL = 150 	#选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 	#选举超时时间,三个库设置不同以尽快选出主库
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_LOCAL1]
ARCH_TYPE = LOCAL 	#本地归档类型
ARCH_DEST = /dm/data/bp11/DAMENG/arch 	#本地归档文件路径
ARCH_FILE_SIZE = 128 	#本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 10240 	#本地归档文件总大小,0 表示无限制

(2).配置 BP12 归档配置文件 DMARCH.INI
当前实例为 BP12,系统配置完成后,可能在各种故障处理中,BP12 可能选为 Leader。
而原来的 Leader 会切换为 Follower。此时 BP12 需要向 BP11 和 BP13 同步数据,因此 RAFT
归档的 ARCH_DEST 分别配置为 BP11 和 BP13。

XMAL_HB_INTERVAL = 5 		#节点通信检测间隔
RAFT_HB_INTERVAL = 150 		#选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 		#选举超时时间
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_LOCAL1]
ARCH_TYPE = LOCAL 	#本地归档类型
ARCH_DEST = /dm/data/bp12/DAMENG/arch 		#本地归档文件路径
ARCH_FILE_SIZE = 128 		#本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 10240 		#本地归档文件总大小,0 表示无限制

(3).配置 BP13 归档配置文件 DMARCH.INI
当前实例为 BP13,系统配置完成后,可能在各种故障处理中,BP13 可能选为组内Leader。而原来的 Leader 会切换为 Follower。此时 BP13 需要向 BP11 和 BP12 同步数据,因此 RAFT归档的 ARCH_DEST 分别配置为 BP11 和 BP12。

XMAL_HB_INTERVAL = 5 			#节点通信检测间隔
RAFT_HB_INTERVAL = 150 		#选举心跳间隔
RAFT_VOTE_INTERVAL = 2500 		#选举超时时间
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_LOCAL1]
ARCH_TYPE = LOCAL 		#本地归档类型
ARCH_DEST = /dm/data/bp13/DAMENG/arch 		#本地归档文件路径
ARCH_FILE_SIZE = 128 		#本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 10240 		#本地归档文件总大小,0 表示无限制
全部修改完成后,RAFT_1 组中的三个 BP 即配置完成。

RAFT_2 组中的三个 BP 配置方式和 RAFT_1 完全相同,只是需要对路径、实例名等进行区分,具体可参考6~8小节进行配置
image.png
image.png

9. 启动SP和RAFT组内所有BP

启动 SP 和 BP 没有先后之分。
启动 SP:

dmserver /dm/data/sp1/DAMENG/dm.ini dpc_mode=SP

启动 BP。此处以 RAFT_1 组的启动方式为例,三个 BP 的启动顺序没有要求,RAFT_2组配置完成后,也按照相同方式启动即可。

dmserver /dm/data/bp11/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm/data/bp12/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm/data/bp13/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm/data/bp21/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm/data/bp22/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm/data/bp23/DAMENG/dm.ini dpc_mode=BP MOUNT

启动完成后,RAFT 组内的 BP 会自动选出主库,待主库选举完成后,整个 DMDPC 系统即可正常运行。至此,DMDPC 集群搭建完毕。

10. 连接SP

DMDPC 搭建完成后,用户只需要连接对外提供服务的 SP,即可获得完整的数据库服务。只有出于监控目的进行 V$视图的查询,或出于维护需要时,才允许直连 MP 和 BP,否则不允许再连接 MP 和 BP。切勿在 MP 和 BP 上执行大量 SQL 语句,否则可能会导致系统崩溃。

11. 退出DMDPC

退出副本架构的 DMDPC 需要按正确顺序使用指定命令退出各节点。
第一步 使用 exit 命令退出所有 SP;
第二步 使用exit all命令依次退出每个 RAFT 组。在BP的每个RAFT组内中任一有效
节点输入 exit all 命令或者对其发出信号 SIGUSR1(如 kill -10)即可对整个 RAFT 组执行协同退出,由有效 Leader 协同其余有效节点正常退出,无效节点不会参与协同退出。如果执行 exit all 命令的是无效节点,则会转为只在此节点进行退出(exit),多数情况下,无效节点的退出会由于无法推进 C_LSN 强制 HALT;
第三步 退出未参与 exit all 命令的 BP。使用 exit 命令依次退出所有剩余的无效 BP;
第四步 使用 exit 命令退出 MP。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服