一个最小的 DMDPC 集群包含一个 BP、一个 SP 和一个 MP。可以在部署完毕后随时增添新的 BP、SP 节点。至少需要两台 BP 才方便看出子任务的各种计划形态和调度。
Windows 和 Linux 环境下部署 DMDPC 集群并无区别,目前支持借助命令行工具部署和 DEM 图形化界面方式部署两种方式。
7.1 命令行工具部署 DMDPC(单副本架构)
DMDPC 集群规划部署 1 个 SP,2 个 BP 和 1 个 MP。其中,BP 采用单机模式,未配置为多副本系统。
IP 和端口分配如下表所示,仅用作示例,需按实际 IP 进行设置。
RAFT 组名 | 角色 | 实例名称 | IP | PORT_NUM | AP_PORT_NUM | 路径 |
---|---|---|---|---|---|---|
RAFT_SP1 | SP | SP1 | 223.254.30.136 | 5236 | 6000 | d:\dpc_data_mac\sp1 |
RAFT_1 | BP | BP1 | 223.254.30.136 | 5237 | 6001 | d:\dpc_data_mac\bp1 |
RAFT_2 | BP | BP2 | 223.254.30.136 | 5238 | 6002 | d:\dpc_data_mac\bp2 |
缺省为 NULL 或者 MP_RAFT | MP | MP | 223.254.30.136 | 5239 | 6003 | d:\dpc_data_mac\mp |
以下章节就以在同一台 Windows 主机为例介绍如何部署。
7.1.1 初始化数据库实例
初始化 4 个数据库实例,实例名称分别为 SP1、BP1、BP2 和 MP。
Copydminit path=d:\dpc_data_mac\sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp1 instance_name=BP1 port_num=5237 ap_port_num=6001 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp2 instance_name=BP2 port_num=5238 ap_port_num=6002 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\mp instance_name=MP port_num=5239 ap_port_num=6003 dpc_mode=MP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
7.1.2 为 SP、BP 和 MP 配置 MP.INI 文件
为 SP、BP 和 MP 实例配置 MP.INI 文件。
MP.INI 文件内容如下:
Copymp_host = 223.254.30.136
mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号
将 MP.INI 文件内容分别写入 SP(SP1)、BP(BP1、BP2)和 MP 中。打开 cmd 命令行工具执行:
Copy//为SP1配置MP.INI文件
echo mp_host = 223.254.30.136 >d:\dpc_data_mac\sp1\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号>> d:\dpc_data_mac\sp1\DAMENG\mp.ini
//为BP1配置MP.INI文件
echo mp_host = 223.254.30.136 > d:\dpc_data_mac\bp1\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号>> d:\dpc_data_mac\bp1\DAMENG\mp.ini
//为BP2配置MP.INI文件
echo mp_host = 223.254.30.136 > d:\dpc_data_mac\bp2\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号>> d:\dpc_data_mac\bp2\DAMENG\mp.ini
//为MP配置MP.INI文件
echo mp_host = 223.254.30.136 >d:\dpc_data_mac\mp\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号>> d:\dpc_data_mac\mp\DAMENG\mp.ini
7.1.3 启动 MP
启动 MP。
Copydmserver d:\dpc_data_mac\mp\DAMENG\dm.ini dpc_mode=MP
DMDPC 运行过程中,MP 需要始终处于开启状态。
7.1.4 将 MP、SP 和 BP 加入集群
增加 1 个 MP、1 个 SP 和 2 个 BP 节点。只有在注册当前登录 MP 节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
Copy//搭建DMDPC过程中加入MP、SP和BP,必须登录MP进行操作
DIsql SYSDBA/DMsys_123@223.254.30.136:5239
//增加MP节点
//注册当前MP实例,MP的RAFT组名可以指定为NULL或者'MP_RAFT'
SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',6003,5239, '223.254.30.136', '223.254.30.136','NORMAL',1,'MP instance');
//增加两个BP节点:BP1和BP2
//注册RAFT组,名为RAFT_1
SP_CREATE_DPC_RAFT('BP','RAFT_1');
//在RAFT_1组内注册BP实例BP1
SP_CREATE_DPC_INSTANCE('RAFT_1','BP1','BP',6001,5237, '223.254.30.136', '223.254.30.136','NORMAL',1,'BP instance');
//注册RAFT_2
SP_CREATE_DPC_RAFT('BP', 'RAFT_2');
//在RAFT_2内注册BP实例BP2
SP_CREATE_DPC_INSTANCE('RAFT_2','BP2','BP',6002,5238, '223.254.30.136', '223.254.30.136', 'NORMAL', 1, '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节点:SP1
//增加SP,也要注册RAFT组
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
//在RAFT_SP1内注册SP实例SP1
SP_CREATE_DPC_INSTANCE('RAFT_SP1','SP1','SP',6000,5236, '223.254.30.136', '223.254.30.136','NORMAL', 2, 'SP instance');
//注册一个容错域:FDOM_1 (可选)
SP_CREATE_FAULT_DOMAIN ('FDOM_1','shanghai');
//往容错域中添加实例
SP_FAULT_DOMAIN_MV_INST('FDOM_1','MP');
SP_FAULT_DOMAIN_MV_INST('FDOM_1','BP1');
SP_FAULT_DOMAIN_MV_INST('FDOM_1','BP2');
注意将SP和BP节点加入DMDPC集群中的步骤必须在SP、BP第一次启动前完成!
7.1.5 检查注册是否成功
查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。
Copyselect * from DPC_BP_GROUP;
//查询结果如下:
行号 ID NAME DESCRIPTION RAFT_NUM RAFT_INFO INFO1 INFO2 INFO3
------- ------- -------- ---------------- ------------ ------------ ------- --
1 1 BG_1 bp group1 2 0x01000200 0 NULL NULL
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 SP RAFT_SP1 1 NULL NULL NULL
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 6003 5239 223.254.30.136 NORMAL 6 1 MP instance 223.254.30.136 NULL NULL NULL
2 1 4097 BP1 BP 6001 5237 192.168.1. 27 NORMAL 6 1 BP instance 223.254.30.136 NULL NULL NULL
3 2 4098 BP2 BP 6002 5238 192.168.1. 27 NORMAL 6 1 BP instance 223.254.30.136 NULL NULL NULL
4 3 4099 SP1 SP 6000 5236 192.168.1. 27 NORMAL 6 2 SP instance 223.254.30.136 NULL NULL NULL
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 6003 5239 223.254.30.136 NORMAL 6 1 MP instance 223.254.30.136 65536 NULL NULL
2 1 4097 BP1 BP 6001 5237 192.168.1. 27 NORMAL 6 1 BP instance 223.254.30.136 65536 NULL NULL
3 2 4098 BP2 BP 6002 5238 192.168.1. 27 NORMAL 6 1 BP instance 223.254.30.136 65536 NULL NULL
4 3 4099 SP1 SP 6000 5236 192.168.1. 27 NORMAL 6 2 SP instance 223.254.30.136 NULL NULL NULL
7.1.6 启动 SP 和 BP
启动 SP 和 BP 没有先后之分。
启动 SP。
Copydmserver d:\dpc_data_mac\sp1\DAMENG\dm.ini dpc_mode=SP
启动 BP。
Copydmserver d:\dpc_data_mac\bp1\DAMENG\dm.ini dpc_mode=BP
dmserver d:\dpc_data_mac\bp2\DAMENG\dm.ini dpc_mode=BP
至此,DMDPC 集群搭建完毕。
MP、SP、BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!
将 SP 和 BP 节点加入 DMDPC 集群中的步骤必须在 SP、BP 第一次启动前完成!
注意当BP处于下述情况时,表示无可用BP,系统异常,报错“无效的系统状态”。无可用BP的情况为:
1.BP处于非OPEN状态;
2.BP尚未成功启动;
3.BP宕机。
7.1.7 连接 SP
DMDPC 搭建完成后,用户只需要连接对外提供服务的 SP,即可获得完整的数据库服务。
验证环境搭建是否成功,可以在 SP 上执行查询 V$instance,看是否所有 RAFT 组中实例都能够查到。
只有出于监控目的进行 V$视图的查询,或出于维护需要时,才允许直连 MP 和 BP,否则搭建完成后,不允许再连接 MP 和 BP。切勿在 MP 和 BP 上执行大量 SQL 语句,否则可能会导致系统崩溃!
7.1.8 退出 DMDPC
使用 exit 命令退出 DMDPC 需要按照正确的顺序有序进行。
第一步 退出 SP;
第二步 退出 BP;
第三步 退出 MP。
注意如果没有按正常顺序退出,可能会导致剩下的机器直接宕机。此时,只能对其他的机器采用强杀。这种服务器异常退出的情况,当再次重启的时候,服务器需要做大量的REDO日志,因此重启的时间会稍长一些,其它没有影响。
7.2 命令行工具部署 DMDPC(BP 多副本架构)
DMDPC 集群规划部署 1 个 SP,2 个 BP 和 1 个 MP。MP 采用单机模式,BP 采用多副本模式,每个 BP 配置 2 个副本。
IP 和端口分配如下表所示,仅用作示例,需按实际 IP 进行设置。
RAFTA组名 | 角色 | 实例名称 | IP | PORT_NUM | AP_PORT_NUM | 路径 |
RAFT_SP1 | SP | SP1 | 223.254.30.136 | 5236 | 6000 | d:\dpc_data_mac\sp1 |
缺省为NULL或者MP_RAFT | MP | MP | 223.254.30.136 | 5237 | 6001 | d:\dpc_data_mac\mp |
RAFT_1 | BP | BP11 | 223.254.30.136 | 5238 | 6002 | d:\dpc_data_mac\bp11 |
BP | BP12 | 223.254.30.136 | 5239 | 6003 | d:\dpc_data_mac\bp12 | |
BP | BP13 | 223.254.30.136 | 5240 | 6004 | d:\dpc_data_mac\bp13 | |
RAFT_2 | BP | BP21 | 223.254.30.136 | 5241 | 6005 | d:\dpc_data_mac\bp21 |
BP | BP22 | 223.254.30.136 | 5242 | 6006 | d:\dpc_data_mac\bp22 | |
BP | BP23 | 223.254.30.136 | 5243 | 6007 | d:\dpc_data_mac\bp23 |
以下章节就以在同一台 Windows 主机为例介绍如何部署。
7.2.1 初始化数据库实例
初始化 8 个实例,分别为 SP、MP 和 6 个 BP 角色。
Copydminit path=d:\dpc_data_mac\sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\mp instance_name=MP port_num=5237 ap_port_num=6001 dpc_mode=MP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
//初始化RAFT_1组中的BP实例
dminit path=d:\dpc_data_mac\bp11 instance_name=BP11 port_num=5238 ap_port_num=6002 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp12 instance_name=BP12 port_num=5239 ap_port_num=6003 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp13 instance_name=BP13 port_num=5240 ap_port_num=6004 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
//初始化RAFT_2组中的BP实例
dminit path=d:\dpc_data_mac\bp21 instance_name=BP21 port_num=5241 ap_port_num=6005 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp22 instance_name=BP22 port_num=5242 ap_port_num=6006 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=d:\dpc_data_mac\bp23 instance_name=BP23 port_num=5243 ap_port_num=6007 dpc_mode=BP SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
7.2.2 为 SP、BP 和 MP 配置 MP.INI 文件
为 SP、BP 和 MP 实例配置 MP.INI 文件。
MP.INI 文件内容如下:
Copymp_host = 223.254.30.136
mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号
将 MP.INI 文件内容分别写入 SP(SP1)、两个 RAFT 组内的所有 BP(BP11、BP12、BP13、BP21、BP22、BP23)和 MP 中。打开 cmd 命令行工具执行:
Copy//向SP写入MP.INI
echo mp_host = 223.254.30.136 > d:\dpc_data_mac\sp1\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号 >> d:\dpc_data_mac\sp1\DAMENG\mp.ini
//向两个RAFT组内的所有BP写入MP.INI,不同BP需要切换到不同的路径下,这里以BP11的路径为例(或者直接拷贝SP上的MP.INI到所有BP的库目录下)
echo mp_host = 223.254.30.136 > d:\dpc_data_mac\bp11\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号 >> d:\dpc_data_mac\bp11\DAMENG\mp.ini
//为MP配置MP.INI文件
echo mp_host = 223.254.30.136 >d:\dpc_data_mac\mp\DAMENG\mp.ini
echo mp_port = 9000 #与MP、BP和SP上的ap_port_num不冲突的端口号>> d:\dpc_data_mac\mp\DAMENG\mp.ini
7.2.3 启动 MP
启动 MP。
Copydmserver d:\dpc_data_mac\mp\DAMENG\dm.ini dpc_mode=MP
DMDPC 运行过程中,MP 需要始终处于开启状态。
7.2.4 将 MP、SP 和 BP 加入集群
增加 1 个 MP、1 个 SP 和 6 个 BP 节点。只有在注册当前登录 MP 节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
Copy//搭建DMDPC过程中加入MP、SP和BP,必须登录MP进行操作
DIsql SYSDBA/DMsys_123@223.254.30.136:5237
//增加MP节点
//注册当前MP实例,MP的RAFT组名可以指定为NULL或者'MP_RAFT'
SP_CREATE_DPC_INSTANCE(NULL,'MP','MP',6001,5237, '223.254.30.136', '223.254.30.136','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, '223.254.30.136', '223.254.30.136','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP12', 'BP', 6003, 5239, '223.254.30.136', '223.254.30.136','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP13', 'BP', 6004, 5240, '223.254.30.136', '223.254.30.136','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, '223.254.30.136', '223.254.30.136','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP22', 'BP', 6006, 5242, '223.254.30.136', '223.254.30.136','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP23', 'BP', 6007, 5243, '223.254.30.136', '223.254.30.136','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, '223.254.30.136', '223.254.30.136','NORMAL', 2, 'SP instance');
//注册三个容错域:FDOM_1 FDOM_2 FDOM_3
SP_CREATE_FAULT_DOMAIN ('FDOM_1', 'shanghai_1');
SP_CREATE_FAULT_DOMAIN ('FDOM_2', 'shanghai_2');
SP_CREATE_FAULT_DOMAIN ('FDOM_3', 'shanghai_3');
//往容错域中添加实例
SP_FAULT_DOMAIN_MV_INST('FDOM_1', 'MP');
SP_FAULT_DOMAIN_MV_INST('FDOM_1', 'BP11');
SP_FAULT_DOMAIN_MV_INST('FDOM_1', 'BP21');
SP_FAULT_DOMAIN_MV_INST('FDOM_2', 'BP12');
SP_FAULT_DOMAIN_MV_INST('FDOM_2', 'BP22');
SP_FAULT_DOMAIN_MV_INST('FDOM_3', 'BP13');
SP_FAULT_DOMAIN_MV_INST('FDOM_3', 'BP23');
注意将SP和BP节点加入DMDPC集群中的步骤必须在SP、BP第一次启动前完成!
7.2.5 检查注册是否成功
查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。
Copyselect * from DPC_BP_GROUP;
//查询结果如下:
行号 ID NAME DESCRIPTION RAFT_NUM RAFT_INFO INFO1 INFO2 INFO3
------- ------- -------- ---------------- ------------ ------------ ------- --
1 1 BG_1 bp group1 2 0x01000200 0 NULL NULL
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 SP RAFT_SP1 1 NULL NULL NULL
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 223.254.30.136 NORMAL 6 1 MP instance 223.254.30.136 65536 NULL NULL
2 1 4097 BP11 BP 6002 5238 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 65536 NULL NULL
3 1 4098 BP12 BP 6003 5239 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 131072 NULL NULL
4 1 4099 BP13 BP 6004 5240 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 196608 NULL NULL
5 2 4100 BP21 BP 6005 5241 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 65536 NULL NULL
6 2 4101 BP22 BP 6006 5242 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 131072 NULL NULL
7 2 4102 BP23 BP 6007 5243 223.254.30.136 STANDBY 6 0 BP instance 223.254.30.136 196608 NULL NULL
8 3 4103 SP1 SP 6000 5236 223.254.30.136 NORMAL 6 2 SP instance 223.254.30.136 NULL NULL NULL
7.2.6 配置 BP11
- 配置 BP11 的 dm.ini
CopyARCH_INI = 1 #打开归档配置
- 配置 BP11 的本地归档 dmarch.ini。此处先只配本地归档,避免提前发起 RAFT 选举
Copy[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = d:\dpc_data_mac\bp11\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
- 正常启动 BP11 到 Open 状态
Copydmserver d:\dpc_data_mac\bp11\DAMENG\dm.ini dpc_mode=bp
7.2.7 准备 BP RAFT 组内数据
RAFT_1 和 RAFT_2 组内的 BP 数据准备方式完全相同,只是路径不同,这里对组 RAFT_1 的数据准备步骤进行说明,RAFT_2 组参考这个步骤执行即可。注意,RAFT_2 组和 RAFT_1 组要各自按照此小节介绍的方式准备数据,RAFT_2 组不能直接使用 RAFT_1 组的备份集执行还原恢复。
7.2.7.1 退出 BP11 并进行脱机备份
首先,退出 BP11。
其次,对 BP11 进行脱机备份。
Copydmrman CTLSTMT="BACKUP DATABASE 'd:\dpc_data_mac\bp11\DAMENG\dm.ini' FULL TO BACKUP_01 BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_01'" USE_AP=2
- 将 BP11 的备份文件脱机还原到 BP12
Copy//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' FROM BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
- BP11 的备份文件脱机还原到 BP13
Copy//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE 'd:\dpc_data_mac\bp13\DAMENG\dm.ini' FROM BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE 'd:\dpc_data_mac\bp13\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
7.2.7.2 配置 BP dm.ini
RAFT_1 组各实例(BP11、BP12、BP13)和 RAFT_2 组各实例(BP21、BP22、BP23)中 dm.ini 文件的配置方法完全相同。
下面以 BP11 的 dm.ini 为例进行介绍。dm.ini 文件配置如下:
CopyARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过SQL语句修改服务器模式
7.2.7.3 配置 BP RAFT 归档文件
修改 DMARCH.INI,配置 RAFT 归档与本地归档。RAFT_1 组配置如下,RAFT_2 组配置可参考此步骤进行配置。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
- 配置 BP11 归档文件 DMARCH.INI
当前实例为 BP11,需要向 BP12、BP13 同步数据,因此 RAFT 归档中的 ARCH_DEST 分别配置为 BP12、BP13。
DMARCH.INI 文件内容如下:
CopyXMAL_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 = d:\dpc_data_mac\bp11\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
2.配置 BP12 归档配置文件 DMARCH.INI
当前实例为 BP12,系统配置完成后,可能在各种故障处理中,BP12 可能选为 Leader。而原来的 Leader 会切换为 Follower。此时 BP12 需要向 BP11 和 BP13 同步数据,因此 RAFT 归档的 ARCH_DEST 分别配置为 BP11 和 BP13。
CopyXMAL_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 = d:\dpc_data_mac\bp12\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
3.配置 BP13 归档配置文件 DMARCH.INI
当前实例为 BP13,系统配置完成后,可能在各种故障处理中,BP13 可能选为组内 Leader。而原来的 Leader 会切换为 Follower。此时 BP13 需要向 BP11 和 BP12 同步数据,因此 RAFT 归档的 ARCH_DEST 分别配置为 BP11 和 BP12。
CopyXMAL_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 = d:\dpc_data_mac\bp13\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
全部修改完成后,RAFT_1 组中的三个 BP 即配置完成。
RAFT_2 组中的三个 BP 配置方式和 RAFT_1 完全相同,只是需要对路径、实例名等进行区分,具体可参考 7.2.5~7.2.7 小节进行配置。
7.2.8 启动 SP 和 RAFT 组内所有 BP
启动 SP 和 BP 没有先后之分。
启动 SP。
Copydmserver d:\dpc_data_mac\sp1\DAMENG\dm.ini dpc_mode=SP
启动 BP。此处以 RAFT_1 组的启动方式为例,三个 BP 的启动顺序没有要求,RAFT_2 组配置完成后,也按照相同方式启动即可。
Copydmserver d:\dpc_data_mac\bp11\DAMENG\dm.ini dpc_mode=BP MOUNT
dmserver d:\dpc_data_mac\bp12\DAMENG\dm.ini dpc_mode=BP MOUNT
dmserver d:\dpc_data_mac\bp13\DAMENG\dm.ini dpc_mode=BP MOUNT
启动完成后,RAFT 组内的 BP 会自动选出主库,待主库选举完成后,整个 DMDPC 系统即可正常运行。
至此,DMDPC 集群搭建完毕。
MP、SP、BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!
注意当BP处于下述情况时,表示无可用BP,系统异常,报错“无效的系统状态”。无可用BP的情况为:
1.BP处于非OPEN状态;
2.BP尚未成功启动;
3.BP全部宕机;
4.BP如果是多副本环境,确认是否所有BP组都已经选举出主库,并且主库也已切换为Primary模式和Open状态。
7.2.9 连接 SP
DMDPC 搭建完成后,用户只需要连接对外提供服务的 SP,即可获得完整的数据库服务。
只有出于监控目的进行 V$视图的查询,或出于维护需要时,才允许直连 MP 和 BP,否则不允许再连接 MP 和 BP。切勿在 MP 和 BP 上执行大量 SQL 语句,否则可能会导致系统崩溃。
7.2.10 退出 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。
注意如果没有按正常顺序退出,可能会导致剩下的机器直接宕机。此时,只能对其他的机器采用强杀。这种服务器异常退出的情况,当再次重启的时候,服务器需要做大量的REDO日志,因此重启的时间会稍长一些,其它没有影响。
7.3 命令行工具部署 DMDPC(MP 多副本架构)
DMDPC 集群规划部署 1 个 SP,1 个 BP 和 1 个 MP。BP 采用单机模式,MP 采用多副本模式,为 MP 配置 2 个副本。
IP 和端口分配如下表所示,仅用作示例,需按实际 IP 进行设置。
RAFT组名 | 角色 | 实例名称 | IP | PORT_NUM | AP_PORT_NUM | 路径 |
SPRAFT_1 | SP | SP1 | 192.168.1.118 | 5236 | 6000 | e:\mpraft_data\sp1 |
BPRAFT_1 | BP | BP1 | 192.168.1.118 | 5336 | 6100 | e:\mpraft_data\bp1 |
缺省为NULL或者MP_RAFT | MP | MP1 | 192.168.1.118 | 5436 | 6200 | e:\mpraft_data\mp1 |
MP | MP2 | 192.168.1.118 | 5437 | 6201 | e:\mpraft_data\mp2 | |
MP | MP3 | 192.168.1.118 | 5438 | 6202 | e:\mpraft_data\mp3 |
以下章节就以在同一台 Windows 主机为例介绍如何部署。
7.3.1 初始化数据库实例
初始化 5 个实例,分别为 SP、BP 和 3 个 MP 角色。
Copydminit path=e:\mpraft_data\sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP AUTO_OVERWRITE=1 SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=e:\mpraft_data\bp1 instance_name=BP1 port_num=5336 ap_port_num=6100 dpc_mode=BP AUTO_OVERWRITE=1 SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=e:\mpraft_data\mp1 instance_name=MP1 port_num=5436 ap_port_num=6200 dpc_mode=MP AUTO_OVERWRITE=1 SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=e:\mpraft_data\mp2 instance_name=MP2 port_num=5437 ap_port_num=6201 dpc_mode=MP AUTO_OVERWRITE=1 SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
dminit path=e:\mpraft_data\mp3 instance_name=MP3 port_num=5438 ap_port_num=6202 dpc_mode=MP AUTO_OVERWRITE=1 SYSDBA_PWD=DMsys_123 SYSAUDITOR_PWD=DMauditor_123
7.3.2 为 SP、BP 和 MP 配置 MP.INI 文件
为 SP、BP 和 MP 实例配置 MP.INI 文件。
MP.INI 文件内容如下:
Copy# mp_port端口号必须与MP、BP和SP上的ap_port_num端口号不冲突
[MP1]
mp_host = 192.168.1.118
mp_port = 10622
[MP2]
mp_host = 192.168.1.118
mp_port = 10623
[MP3]
mp_host = 192.168.1.118
mp_port = 10624
将 MP.INI 文件内容分别写入 SP(SP1)、BP(BP1)和 MP(MP1、MP2、MP3)的库目录 DAMENG 下。例如:SP 的 MP.INI 位于 e:\mpraft_data\sp1\DAMENG\mp.ini。
7.3.3 配置并启动 MP1
7.3.3.1 配置 MP1 的 dmarch.ini
配置 MP1 的本地归档 dmarch.ini。
Copy[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = e:\mpraft_data\mp1\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
7.3.3.2 配置 MP1 的 dm.ini
打开 MP1 归档配置。
CopyARCH_INI = 1
7.3.3.3 启动 MP1
Copydmserver e:\mpraft_data\mp1\DAMENG\dm.ini dpc_mode=MP
7.3.4 将 MP、SP 和 BP 加入集群
增加 3 个 MP、1 个 SP 和 1 个 BP 节点。只有在注册当前登录 MP 节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
Copy//搭建DMDPC过程中加入MP、SP和BP,必须登录MP进行操作
DIsql SYSDBA/DMsys_123@192.168.1.118:5436
//增加MP节点
//注册当前MP实例,MP的RAFT组名可以指定为'MP_RAFT'或缺省NULL
SP_CREATE_DPC_INSTANCE(NULL, 'MP1', 'MP', 6200, 5436, '192.168.1.118','', 'STANDBY', 0, 'MP instance');
SP_CREATE_DPC_INSTANCE(NULL, 'MP2', 'MP', 6201, 5437, '192.168.1.118', '','STANDBY', 0, 'MP instance');
SP_CREATE_DPC_INSTANCE(NULL, 'MP3', 'MP', 6202, 5438, '192.168.1.118', '', 'STANDBY', 0, 'MP instance');
//增加BP节点
//注册RAFT组,名为BPRAFT_1
SP_CREATE_DPC_RAFT('BP', 'BPRAFT_1');
//在BPRAFT_1组内注册BP实例BP1
SP_CREATE_DPC_INSTANCE('BPRAFT_1', 'BP1', 'BP', 6100, 5336, '192.168.1.118', '','NORMAL', 1, 'BP instance');
//注册一个BP组,名为BG_1
SP_CREATE_DPC_BP_GROUP('BG_1', 'bp group1');
//在BP组内添加RAFT组
SP_BP_GROUP_ADD_RAFT('BG_1', 'BPRAFT_1');
//增加SP节点
//增加SP,也要注册RAFT组
SP_CREATE_DPC_RAFT('SP', 'SPRAFT_1');
//在SPRAFT_1内注册SP实例SP1
SP_CREATE_DPC_INSTANCE('SPRAFT_1', 'SP1', 'SP', 6000, 5236, '192.168.1.118', '','NORMAL', 1, 'SP instance');
//注册三个容错域:FDOM_1 FDOM_2 FDOM_3
SP_CREATE_FAULT_DOMAIN ('FDOM_1', 'shanghai_1');
SP_CREATE_FAULT_DOMAIN ('FDOM_2', 'shanghai_2');
SP_CREATE_FAULT_DOMAIN ('FDOM_3', 'shanghai_3');
//往容错域中添加实例
SP_FAULT_DOMAIN_MV_INST('FDOM_1', 'MP1');
SP_FAULT_DOMAIN_MV_INST('FDOM_1', 'BP1');
SP_FAULT_DOMAIN_MV_INST('FDOM_2', 'MP2');
SP_FAULT_DOMAIN_MV_INST('FDOM_3', 'MP3');
7.3.5 检查注册是否成功
查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。
Copyselect * from DPC_BP_GROUP;
//查询结果如下:
行号 ID NAME DESCRIPTION RAFT_NUM RAFT_INFO INFO1 INFO2 INFO3
------- ------- -------- ---------------- ------------ ------------ ------- --
1 1 BG_1 bp group1 1 0x0100 0 NULL NULL
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 BPRAFT_1 1 NULL NULL NULL
3 2 -1 SP SPRAFT_1 1 NULL NULL NULL
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 MP1 MP 6200 5436 192.168.1.118 STANDBY 6 0 MP instance 192.168.1.118 65536 NULL NULL
2 0 4097 MP2 MP 6201 5437 192.168.1.118 STANDBY 6 0 MP instance 192.168.1.118 131072 NULL NULL
3 0 4098 MP3 MP 6202 5438 192.168.1.118 STANDBY 6 0 MP instance 192.168.1.118 196608 NULL NULL
4 1 4099 BP1 BP 6100 5336 192.168.1.118 NORMAL 6 1 BP instance 192.168.1.118 65536 NULL NULL
5 2 4100 SP1 SP 6000 5236 192.168.1.118 NORMAL 6 1 SP instance 192.168.1.118 NULL NULL NULL
7.3.6 准备 MP RAFT 组内数据
7.3.6.1 退出 MP1 并进行脱机备份
首先,退出 MP1。
其次,对 MP1 进行脱机备份。
Copydmrman CTLSTMT="BACKUP DATABASE 'e:\mpraft_data\mp1\DAMENG\dm.ini' FULL TO BACKUP_01 BACKUPSET 'e:\mpraft_data\mp1\BACKUP_01'" USE_AP=2
7.3.6.2 将 MP1 的备份文件脱机还原到 MP2 及 MP3
将 MP1 的备份文件 BACKUP_01 脱机还原到 MP2 及 MP3。
此处不需要重启 MP2,MP3。如果用户有特殊需要,必须要启动 MP2,MP3,则一定要以 MOUNT 方式启动,否则可能导致 MP2,MP3 生成日志,引发三个节点日志内容不匹配。
Copy//还原到MP2
dmrman CTLSTMT="RESTORE DATABASE 'e:\mpraft_data\mp2\DAMENG\dm.ini' FROM BACKUPSET 'e:\mpraft_data\mp1\BACKUP_01'" USE_AP=2
dmrman CTLSTMT="RECOVER DATABASE 'e:\mpraft_data\mp2\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
//还原到MP3
dmrman CTLSTMT="RESTORE DATABASE 'e:\mpraft_data\mp3\DAMENG\dm.ini' FROM BACKUPSET 'e:\mpraft_data\mp1\BACKUP_01'" USE_AP=2
dmrman CTLSTMT="RECOVER DATABASE 'e:\mpraft_data\mp3\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
7.3.6.3 配置 MP dm.ini
MP 的 RAFT 组各实例(MP1、MP2、MP3)中 dm.ini 文件的配置方法完全相同。
下面以 MP1 的 dm.ini 为例进行介绍。dm.ini 文件配置如下:
CopyARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过SQL语句修改服务器模式
7.3.6.4 配置 MP RAFT 归档文件
修改 DMARCH.INI,配置 RAFT 归档与本地归档。
除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。
- 配置 MP1 归档文件 DMARCH.INI
当前实例为 MP1,需要向 MP2、MP3 同步数据,因此 RAFT 归档中的 ARCH_DEST 分别配置为 MP2、MP3。
DMARCH.INI 文件内容如下:
CopyXMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 1 #多副本自身节点ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP2 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP3 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = e:\mpraft_data\mp1\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
- 配置 MP2 归档文件 DMARCH.INI
CopyXMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 #选举超时时间
RAFT_SELF_ID = 2 #多副本自身节点ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP1 #归档目标实例名
ARCH_DEST_ID = 1 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP3 #归档目标实例名
ARCH_DEST_ID = 3 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = e:\mpraft_data\mp2\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
- 配置 MP3 归档文件 DMARCH.INI
CopyXMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2500 #选举超时时间
RAFT_SELF_ID = 3 #多副本自身节点ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP1 #归档目标实例名
ARCH_DEST_ID = 1 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT归档
ARCH_DEST = MP2 #归档目标实例名
ARCH_DEST_ID = 2 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = e:\mpraft_data\mp3\DAMENG\arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
7.3.7 启动所有 MP
启动 MP。
Copydmserver e:\mpraft_data\mp1\DAMENG\dm.ini dpc_mode=MP MOUNT
dmserver e:\mpraft_data\mp2\DAMENG\dm.ini dpc_mode=MP MOUNT
dmserver e:\mpraft_data\mp3\DAMENG\dm.ini dpc_mode=MP MOUNT
启动完成后,RAFT 组内的 MP 会自动选出主库,待主库选举完成后,整个 MP 系统即可正常运行。
DMDPC 运行过程中,MP 需要始终处于开启状态。
注意搭建时需要严格按照搭建步骤执行并确保配置正确,否则可能会导致集群状态不正确无法选主等问题。
7.3.8 启动 SP 和 BP
启动 SP 和 BP 没有先后之分。
启动 SP。
Copydmserver e:\mpraft_data\sp1\DAMENG\dm.ini dpc_mode=SP
启动 BP。
Copydmserver e:\mpraft_data\bp1\DAMENG\dm.ini dpc_mode=BP
至此,DMDPC 集群搭建完毕。
MP、SP、BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!
7.3.9 连接 SP
DMDPC 搭建完成后,用户只需要连接对外提供服务的 SP,即可获得完整的数据库服务。
验证环境搭建是否成功,可以在 SP 上执行查询 V$instance,看是否所有 RAFT 组中实例都能够查到。
只有出于监控目的进行 V$视图的查询,或出于维护需要时,才允许直连 MP 和 BP,否则搭建完成后,不允许再连接 MP 和 BP。切勿在 MP 和 BP 上执行大量 SQL 语句,否则可能会导致系统崩溃!
7.3.10 退出 DMDPC
退出副本架构的 DMDPC 需要按正确顺序使用指定命令退出各节点。
第一步 使用 exit 命令退出所有 SP;
第二步 使用 exit 命令退出所有 BP;
第三步 使用 exit all 命令依次退出每个 RAFT 组。在 MP 的每个 RAFT 组内中任一有效节点输入 exit all 命令或者对其发出信号 SIGUSR1(如 kill-10)即可对整个 RAFT 组执行协同退出,由有效 Leader 协同其余有效节点正常退出,无效节点不会参与协同退出。如果执行 exit all 命令的是无效节点,则会转为只在此节点进行退出(exit),多数情况下,无效节点的退出会由于无法推进 C_LSN 强制 HALT;
第四步 退出未参与 exit all 命令的 MP。使用 exit 命令依次退出所有剩余的无效 MP。
注意如果没有按正常顺序退出,可能会导致剩下的机器直接宕机。此时,只能对其他的机器采用强杀。这种服务器异常退出的情况,当再次重启的时候,服务器需要做大量的REDO日志,因此重启的时间会稍长一些,其它没有影响。
7.4 图形化部署 DMDPC
DM WEB 版数据库管理工具(DEM)提供 DMDPC 的图形化部署与管理功能。关于 DEM 工具的启动,请查看 DEM 相关文档。DEM 启动后,通过浏览器访问。
DEM 对 DMDPC 的部署与管理包括集群部署和监控。集群部署在“客户端工具”栏点击“部署集群”可以打开,集群监控在“监控及告警”栏的“数据库”监控中添加对集群的监控即可打开,也可以在集群部署完成后通过“打开监控”按钮,自动添加对所部署的集群的监控。
本章主要对 DMDPC 的部署和监控进行介绍。
7.4.1 DMDPC 图形化部署
在 DEM 的左侧边栏,选择“集群部署”工具,打开新建集群部署的对话框,如下图:
给定集群名称,点击“确定”以后,在 DEM 右边面板打开部署面板,进入“选择部署集群类型”界面:
选择“分布式”,进入“环境准备”界面:
选择要部署的主机,点击“下一步”,进入“实例规划”界面:
根据需要配置好实例的分布并规划好端口后,点击“下一步”,进入“BP 组和 BP 域配置”界面:
在该页面可以配置 BP 组和 BP 域信息,可根据实际情况进行配置,配置完成后,点击“下一步”,进入“地域、数据中心和容错域配置”界面:
用户可以根据需求对集群节点的地域、数据中心和容错域进行配置(如上图);若不需要配置,可以直接进行下一步。点击“下一步”,进入“初始化参数配置”界面:
在该页面配置初始化参数信息,目前,每个实例的初始化参数保持一致,配置完成后,点击“下一步”,进入“dm.ini 配置”界面:
在该页面配置各实例的 dm.ini,默认为初始化生成的默认值,如需修改,则通过自定义参数配置,以“参数名=参数值”且多个参数用逗号分开方式配置,配置完成后,点击“下一步”,进入“dmarch.ini 配置”界面:
在该页面配置 BP 和 MP 的 dmarch.ini,默认为初始化生成的默认值,如需修改,则通过自定义参数配置,以“参数名=参数值”且多个参数用逗号分开方式配置,配置完成后,点击“下一步”,进入“上传服务器文件”界面,点击“+”后,进入选择上传的服务器文件的界面。点选“选择本地文件”并点击“确认”后,可以选择本地服务器文件进行上传:
上传完服务器文件后,点击“下一步”,进入“详情总览”界面。列出将要部署的集群环境的所有配置信息:
点击“下一步”,开始执行部署任务。执行过程如下:
部署任务执行完成后显示如下:
至此,基于 DMDPC 搭建完成。
点击“添加到监控”可以把该集群添加到数据库监控中,并且可以直接打开数据库监控界面。
7.4.2 DMDPC 图形化监控
在 DEM 的左侧边栏中找到“资源监控”,单击进入后找到“数据库监控”,点击“+”即可打开添加集群监控的界面,根据配置信息添加站点后,就能够对集群进行监控。
DMDPC 监控把 DMDPC 的每个节点当成数据库实例来监控,其支持的监控项与普通数据库实例相同,详细参见 DEM 相关文档。
7.5 命令行工具搭建多副本影子库
影子库的搭建和现有的 RAFT 库搭建基本相同,只有备份还原的步骤有差异,其他配置方法完全相同,除备份还原步骤外,其他步骤都可以参考 7.2 命令行工具部署 DMDPC(BP 副本架构)和 7.3 命令行工具部署 DMDPC(MP 副本架构)小节。
7.5.1 影子库的备份还原
影子库的备份还原有两种方式,分别说明如下:
- 可以对 RAFT 主库做联机或脱机备份,备份时指定 SHADOW 关键字,然后按照正常的还原恢复步骤还原出一个影子库。
例 以脱机备份为例。
Copy//备份数据库
dmrman CTLSTMT="BACKUP DATABASE 'd:\dpc_data_mac\bp11\DAMENG\dm.ini' FULL SHADOW TO BACKUP_02 BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_02'" USE_AP=2
//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' FROM BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_02'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
- 可以对 RAFT 主库做联机或脱机备份,备份时不指定 SHADOW 关键字,在还原时指定 TO SHADOW 关键字,还原出一个影子库。
例 以脱机备份为例。
Copy//备份数据库
dmrman CTLSTMT="BACKUP DATABASE 'd:\dpc_data_mac\bp11\DAMENG\dm.ini' FULL TO BACKUP_02 BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_02'" USE_AP=2
//还原数据库:
dmrman CTLSTMT="RESTORE DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' TO SHADOW FROM BACKUPSET 'd:\dpc_data_mac\bp11\BACKUP_02'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE 'd:\dpc_data_mac\bp12\DAMENG\dm.ini' UPDATE DB_MAGIC" USE_AP=2
7.5.2 影子库与 RAFT 库之间的转换
RAFT 库和影子库之间的转换方式说明如下:
-
将 RAFT 库转换为影子库
- 选择集群中某个 RAFT 库执行单独退出,不能是协同退出方式。
- 在相同机器上新初始化一个影子库,保留 IP/PORT、实例名等信息不变,这样不需要改其他 RAFT 库的配置。
- 使用 SHADOW 方式备份主库、还原影子库。
- 启动影子库,预期可以正常跟随主库同步日志。
-
将影子库转换为 RAFT 库
- 退出影子库。
- 使用正常备份还原方式,备份主库,还原一个新的 RAFT 目标库。
- 新的 RAFT 库使用和影子库相同的 IP/PORT、实例名等配置信息,这样不需要改其他 RAFT 库的配置。
- 启动新的 RAFT 库,预期可以正常跟随主库同步日志。