DMDPC 架构旨在提供具有分布式特性的可扩展、高性能数据库解决方案,以满足具有高并发、大规模数据存储、业务快速扩张等特征的用户业务对数据库的要求。
一个完整的 DMDPC 架构由计划生成节点 SP、数据存储节点 BP 和元数据服务器节点MP 三部分组成。SP 对外提供分布式数据库服务,用户可以登录到任意一个 SP 节点,获得完整的数据库服务;BP 负责存储数据,执行 SP 的调度指令并将执行结果返回给 SP;MP 负责存储元数据并向 SP、BP 提供元数据服务。
SP 节点不存储数据,配置成单机即可。MP 和 BP 节点既可以配置成单机,也可以配置成多副本系统。其中每一个多副本系统中只有一个作为主节点,其余节点均作为备份节点。
下图是一个典型的 DMDPC 架构图。左侧为单机 DMDPC,右侧为配有多副本系统的DMDPC。
一个最小的 DMDPC 集群包含一个 BP、一个 SP 和一个 MP。可以在部署完毕后随时增添新的 BP、SP 节点。至少需要两台 BP 才方便看出子任务的各种计划形态和调度。
Windows 和 Linux 环境下部署 DMDPC 集群并无区别,目前支持借助命令行工具部署和 DEM 图形化界面方式部署两种方式。
以下将使用命令行工具部署 DMDPC(BP 多副本架构)
DMDPC 集群规划部署 1 个 SP,2 个 BP 和 1 个 MP。MP 采用单机模式,BP 采用多副本模式(每个 BP 配置成 3 副本)。
| 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 |
初始化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
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
为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 不冲突的端口号
启动 MP。
dmserver /dm/data/mp/DAMENG/dm.ini dpc_mode=MP
DMDPC 运行过程中,MP 需要始终处于开启状态。
增加 1 个 MP、1 个 SP 和 6 个 BP 节点。只有在注册当前登录 MP 节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
搭建 DMDPC 过程中加入 MP、SP 和 BP,必须登录 MP 进行操作
disql SYSDBA/Dameng123@192.168.244.143:5237
增加 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');
注册 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');
注册一个 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');
增加 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');
注意:将SP和BP节点加入DMDPC集群中的步骤必须在SP、BP第一次启动前完成!
查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。
select * from DPC_BP_GROUP;
select * from DPC_BP_RAFT;
select * from DPC_INSTANCE;
配置 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
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
将 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
将 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
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小节进行配置
启动 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 集群搭建完毕。
DMDPC 搭建完成后,用户只需要连接对外提供服务的 SP,即可获得完整的数据库服务。只有出于监控目的进行 V$视图的查询,或出于维护需要时,才允许直连 MP 和 BP,否则不允许再连接 MP 和 BP。切勿在 MP 和 BP 上执行大量 SQL 语句,否则可能会导致系统崩溃。
退出副本架构的 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。
文章
阅读量
获赞
