- DM8(DMDPC)单机架构(BP多副本)
- DMDPC单机架构说明
一个最小的 DMDPC 集群包含一个 BP、一个 SP 和一个 MP。可以在部署完毕后随时增添新的 BP、SP 节点。至少需要两台 BP 才方便看出子任务的各种计划形态和调度。
Windows 和 Linux 环境下部署 DMDPC 集群并无区别,目前支持借助命令行工具部署和 DEM 图形化界面方式部署两种方式。
-
- DMDPC单机架构规划
DMDPC 集群规划部署1个SP,1个MP和2个BP。其中MP采用单机模式,BP采用多副本模式(每个BP配置成3副本)。
IP 和端口分配如下表所示。
RAFTA组名 | 角色 | 实例 名称 | IP | 端口 | AP_PORT_NUM | 路径 |
RAFT_SP1 | SP | SP1 | 84.0.191.31 | 5236 | 6000 | /dm8/data/sp1 |
缺省为NULL或者MP_RAFT | MP | MP1 | 84.0.191.31 | 5237 | 6001 | /dm8/data/mp1 |
RAFT_1 | BP | BP11 | 84.0.191.31 | 5238 | 6002 | /dm8/data/bp11 |
BP | BP12 | 84.0.191.31 | 5239 | 6003 | dm8/data/bp12 | |
BP | BP13 | 84.0.191.31 | 5240 | 6004 | dm8/data/bp13 | |
RAFT_2 | BP | BP21 | 84.0.191.31 | 5241 | 6005 | dm8/data/bp21 |
BP | BP22 | 84.0.191.31 | 5242 | 6006 | dm8/data/bp22 | |
BP | BP23 | 84.0.191.31 | 5243 | 6007 | dm8/data/bp23 |
只安装soft不建实例。
[root@dm8dpc]# mount -o loop /soft/dm8_20231109_x86_kylin10_64.iso /mnt
[root@dm8dpc soft]# su - dmdba
dm8dpc>$cd /mnt
dm8dpc>$./DMInstall.bin -i
请以root系统用户执行命令:
/dm8/dmdbms/script/root/root_installer.sh
安装结束
[root@dm8dpc ~]# /dm8/dmdbms/script/root/root_installer.sh
mkdir -p /dm8/data/sp1
mkdir -p /dm8/data/mp1
mkdir -p /dm8/data/bp11
mkdir -p /dm8/data/bp12
mkdir -p /dm8/data/bp13
mkdir -p /dm8/data/bp21
mkdir -p /dm8/data/bp22
mkdir -p /dm8/data/bp23
初始化 8 个实例,分别为 SP、MP 和 6 个 BP 角色。
dminit path=/dm8/data/sp1 instance_name=SP1 port_num=5236 ap_port_num=6000 dpc_mode=SP
dminit path=/dm8/data/mp1 instance_name=MP1 port_num=5237 ap_port_num=6001 dpc_mode=MP
或者:
#SP1
dminit path=/dm8/data/sp1 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=SP1 PORT_NUM=5236 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6000 dpc_mode=SP
#MP1
dminit path=/dm8/data/mp1 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=MP1 PORT_NUM=5237 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6001 dpc_mode=MP
- BP11
dminit path=/dm8/data/bp11 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP11 PORT_NUM=5238 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6002 dpc_mode=BP
- BP12
dminit path=/dm8/data/bp12 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP12 PORT_NUM=5239 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6003 dpc_mode=BP
- BP13
dminit path=/dm8/data/bp13 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP13 PORT_NUM=5240 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6004 dpc_mode=BP
- BP21
dminit path=/dm8/data/bp21 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP21 PORT_NUM=5241 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6005 dpc_mode=BP
- BP22
dminit path=/dm8/data/bp22 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP22 PORT_NUM=5242 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6006 dpc_mode=BP
- BP23
dminit path=/dm8/data/bp23 EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=DAMENG instance_name=BP23 PORT_NUM=5243 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ap_port_num=6007 dpc_mode=BP
-
-
- SP、BP 和 MP 配置 MP.INI 文件
-
为 SP、BP 和 MP 实例配置 MP.INI 文件。
#与MP、BP和SP上的ap_port_num不冲突的端口号
MP.INI 文件内容如下:
mp_host = 84.0.191.31
mp_port = 9000
将 MP.INI 文件内容分别写入 SP(SP1)、两个 RAFT 组内的所有 BP(BP11、BP12、BP13、BP21、BP22、BP23)和 MP 中。
-
-
-
- SP1配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/sp1/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- MP1配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/mp1/DAMENG/mp.ini << EOF
mp_host = 84.0.191.30
mp_port = 9000
EOF
-
-
-
- BP11配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp11/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- BP12配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp12/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- BP13配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp13/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- BP21配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp21/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- BP22配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp22/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
-
-
-
- BP23配置MP.INI文件
-
-
#与MP、BP和SP上的ap_port_num不冲突的端口号
cat >> /dm8/data/bp23/DAMENG/mp.ini << EOF
mp_host = 84.0.191.31
mp_port = 9000
EOF
- 前台启动
dm8dpc>$dmserver /dm8/data/mp1/DAMENG/dm.ini dpc_mode=MP
DMDPC 运行过程中,MP 需要始终处于开启状态
- 后台启动
dm8dpc>$mkdir -p /dm8/script
dm8dpc>$vi /dm8/script/dmmpstart.sh
dmserver /dm8/data/mp1/DAMENG/dm.ini dpc_mode=MP
dm8dpc>$chmod +x dmmpstart.sh
dm8dpc>$./dmmpstart.sh &
dm8dpc>$ps -ef | grep dm
-
-
- 将 MP、SP 和 BP 加入集群
-
增加1个MP、1个SP和6个BP节点。只有在注册当前登录MP节点后,才可以注册其余节点。后续增加 MP、SP 节点和 BP 节点无先后之分。
//搭建DMDPC过程中加入MP、SP和BP,必须登录MP进行操作
dm8dpc>$disql SYSDBA/SYSDBA2023@84.0.191.31:5237
//注册当前MP实例,MP的RAFT组名可以指定为NULL或者'MP_RAFT'
SP_CREATE_DPC_INSTANCE(NULL,'MP1','MP',6001,5237, '84.0.191.31', '84.0.191.31','NORMAL',1,'MP instance');
//注册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, '84.0.191.31', '84.0.191.31','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP12', 'BP', 6003, 5239, '84.0.191.31', '84.0.191.31','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1', 'BP13', 'BP', 6004, 5240, '84.0.191.31', '84.0.191.31','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, '84.0.191.31', '84.0.191.31','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP22', 'BP', 6006, 5242, '84.0.191.31', '84.0.191.31','STANDBY', 0, 'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_2', 'BP23', 'BP', 6007, 5243, '84.0.191.31', '84.0.191.31','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,也要注册RAFT组,参数1为空串
SP_CREATE_DPC_RAFT('SP', 'RAFT_SP1');
//在RAFT_SP1内注册SP实例SP1
SP_CREATE_DPC_INSTANCE('RAFT_SP1', 'SP1', 'SP', 6000, 5236, '84.0.191.31', '84.0.191.31','NORMAL', 2, 'SP instance');
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', '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第一次启动前完成!
disql SYSDBA/SYSDBA2023@84.0.191.31:5237
select id,NAME DESCRIPTION,RAFT_NUM from DPC_BP_GROUP;
//查询结果如下:
行号 ID DESCRIPTION RAFT_NUM
---------- ----------- ----------- -----------
1 0 BG_1 2
查询系统表,检查上一步骤的注册是否成功。能查到相关信息表示注册成功。
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;
//查询结果如下:
-
-
- 准备BP RAFT_1组和RAFT_2组数据
-
RAFT_1 和 RAFT_2 组内的 BP 数据准备方式完全相同,只是路径不同。注意RAFT_2 组不能直接使用 RAFT_1 组的备份集执行还原恢复。
-
-
-
- RAFT_1组脱机备份还原
- RAFT_1(BP11)
- RAFT_1组脱机备份还原
-
-
对BP11进行脱机备份
mkdir -p /data/backup/bp11
chown -R dmdba:dinstall /data
chmod -R 775 /data
将 BP11 的备份文件脱机还原到 BP12/BP13
这里在同一台机器,直接用BP11的备份恢复
-
-
-
-
- RAFT_1(BP12)
-
-
-
//还原数据库:(在同一台机器,直接用bp11备份目录还原)
dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/bp12/BP/dm.ini' FROM BACKUPSET '/data/backup/bp11/bp11bak_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/bp12/BP/dm.ini' UPDATE DB_MAGIC" USE_AP=2
-
-
-
-
- RAFT_1(BP13)
-
-
-
//还原数据库:(在同一台机器,直接用bp11备份目录还原)
dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/bp13/BP/dm.ini' FROM BACKUPSET '/data/backup/bp11/bp11bak_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/bp13/BP/dm.ini' UPDATE DB_MAGIC" USE_AP=2
-
-
-
- RAFT_2组脱机备份还原
- RAFT_2(BP21)
- RAFT_2组脱机备份还原
-
-
对BP21进行脱机备份
mkdir -p /data/backup/bp21
chown -R dmdba:dinstall /data
chmod -R 775 /data
dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/bp21/DAMENG/dm.ini' FULL TO bp21bak01 BACKUPSET '/data/backup/bp21/bp21bak_01'" USE_AP=2
将 BP11 的备份文件脱机还原到 BP12/BP13
这里在同一台机器,直接用BP11的备份恢复
-
-
-
-
- RAFT_2(BP22)
-
-
-
//还原数据库:(在同一台机器,直接用bp21备份目录还原)
dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/bp22/DAMENG/dm.ini' FROM BACKUPSET '/data/backup/bp21/bp11bak_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/bp22/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2
-
-
-
-
- RAFT_3(BP23)
-
-
-
//还原数据库:(在同一台机器,直接用bp21备份目录还原)
dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/bp23/DAMENG/dm.ini' FROM BACKUPSET '/data/backup/bp21/bp11bak_01'" USE_AP=2
//因为脱机备份没有产生任何REDO日志,所以此处省略恢复数据库的操作步骤
//更新数据库:
dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/bp23/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2
-
-
- 开启BP RAFT_1组和RAFT_2组(RAFT归档)
-
RAFT_1 组各实例(BP11、BP12、BP13)和 RAFT_2 组各实例(BP21、BP22、BP23)中 dm.ini 文件的配置方法完全相同。
mkdir -p /dm8/data/bp11/DAMENG/arch
mkdir -p /dm8/data/bp12/DAMENG/arch
mkdir -p /dm8/data/bp13/DAMENG/arch
mkdir -p /dm8/data/bp21/DAMENG/arch
mkdir -p /dm8/data/bp22/DAMENG/arch
mkdir -p /dm8/data/bp23/DAMENG/arch
-
-
-
- dm.ini打开归档
-
-
- 配置BP11的dm.ini
vi /dm8/data/bp11/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
- 配置BP12的dm.ini
vi /dm8/data/bp11/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
- 配置BP13的dm.ini
vi /dm8/data/bp13/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
- 配置BP21的dm.ini
vi /dm8/data/bp21/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
- 配置BP22的dm.ini
vi /dm8/data/bp21/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
- 配置BP23的dm.ini
vi /dm8/data/bp23/DAMENG/dm.ini
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许用户直接通过 SQL 语句修改服务器模式
修改 DMARCH.INI,配置 RAFT 归档与本地归档. 当前实例为 BP11,需要向 BP12、BP13 同步数据,因此RAFT归档中的ARCH_DEST分别配置为BP12、BP13。
vi /dm8/data/bp11/BP/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1000 #选举超时时间,三个库设置不同以尽快选出主库
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 = /dm8/data/bp11/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
当前实例为 BP12,系统配置完成后,可能在各种故障处理中,BP12 可能选为 Leader。
而原来的 Leader 会切换为 Follower。此时 BP12 需要向 BP11 和 BP13 同步数据,因此 RAFT归档的 ARCH_DEST 分别配置为 BP11 和 BP13。
vi /dm8/data/bp12/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间,三个库设置不同以尽快选出主库
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 = /dm8/data/bp12/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
当前实例为 BP13,系统配置完成后,可能在各种故障处理中,BP13 可能选为组内 Leader。
而原来的 Leader 会切换为 Follower。此时 BP13 需要向 BP11 和 BP12 同步数据,因此 RAFT归档的 ARCH_DEST 分别配置为 BP11 和 BP12。
vi /dm8/data/bp13/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 #选举超时时间,三个库设置不同以尽快选出主库
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 = /dm8/data/bp13/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
修改 DMARCH.INI,配置 RAFT 归档与本地归档. 当前实例为 BP21,需要向 BP22、BP23 同步数据,因此RAFT归档中的ARCH_DEST分别配置为BP22、BP23。
vi /dm8/data/bp21/BP/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1000 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 5 #多副本自身节点 ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP22 #归档目标实例名
ARCH_DEST_ID = 6 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP23 #归档目标实例名
ARCH_DEST_ID = 7 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/bp21/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
当前实例为 BP22,系统配置完成后,可能在各种故障处理中,BP22 可能选为 Leader。
而原来的 Leader 会切换为 Follower。此时 BP22 需要向 BP21 和 BP23 同步数据,因此 RAFT归档的 ARCH_DEST 分别配置为 BP21 和 BP23。
vi /dm8/data/bp22/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 1500 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 6 #多副本自身节点 ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP21 #归档目标实例名
ARCH_DEST_ID = 5 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP23 #归档目标实例名
ARCH_DEST_ID = 7 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/bp22/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
当前实例为 BP23,系统配置完成后,可能在各种故障处理中,BP23 可能选为组内 Leader。
而原来的 Leader 会切换为 Follower。此时 BP23 需要向 BP21 和 BP22 同步数据,因此 RAFT归档的 ARCH_DEST 分别配置为 BP21 和 BP22。
vi /dm8/data/bp23/DAMENG/dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 2000 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 7 #多副本自身节点 ID
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP21 #归档目标实例名
ARCH_DEST_ID = 5 #归档目标多副本节点ID
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP22 #归档目标实例名
ARCH_DEST_ID = 6 #归档目标多副本节点ID
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/bp23/DAMENG/arch #本地归档文件路径
ARCH_FILE_SIZE = 2048 #本地单个归档文件最大值,单位MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0表示无限制
启动 SP 和 BP 没有先后之分。
后台启动
dm8dpc>$vi /dm8/script/dmspstart.sh
dmserver /dm8/data/sp1/DAMENG/dm.ini dpc_mode=SP
dm8dpc>$chmod +x dmspstart.sh
dm8dpc>$./dmspstart.sh&
此处以 RAFT_1 组的启动方式为例,三个 BP 的启动顺序没有要求,RAFT_2 组配置完成后,也按照相同方式启动即可。
dm8dpc>$vi /dm8/script/dmbpstart1.sh
dmserver /dm8/data/bp11/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm8/data/bp12/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm8/data/bp13/DAMENG/dm.ini dpc_mode=BP MOUNT
dm8dpc>$chmod +x dmbpstart1.sh
dm8dpc>$./dmbpstart1.sh &
dm8dpc>$vi /dm8/script/dmbpstart2.sh
dmserver /dm8/data/bp21/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm8/data/bp22/DAMENG/dm.ini dpc_mode=BP MOUNT
dmserver /dm8/data/bp23/DAMENG/dm.ini dpc_mode=BP MOUNT
dm8dpc>$chmod +x dmbpstart2.sh
dm8dpc>$./dmbpstart2.sh &
启动完成后,RAFT 组内的 BP 会自动选出主库,待主库选举完成后,整个DMDPC系统即可正常运行。至此,DMDPC 集群搭建完毕。
MP、SP、BP 全部正常启动,且均处于 OPEN 状态,才是一个正常的 DMDPC 系统!
注意
当BP处于下述情况时,表示无可用BP,系统异常,报错“无效的系统状态”。无可用BP的情况为:
1.BP处于非OPEN状态;
2.BP尚未成功启动;
3.BP全部宕机;
4.BP如果是多副本环境,确认是否所有BP组都已经选举出主库,并且主库也已切换为Primary模式和Open状态。
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。
注意
如果没有按正常顺序退出,可能会导致剩下的机器直接宕机。此时,只能对其他的机器采用强杀。这种服务器异常退出的情况,当再次重启的时候,服务器需要做大量的REDO日志,因此重启的时间会稍长一些,其它没有影响。