注册
DPC集群8种动态扩缩容场景命令行实践步骤
培训园地/ 文章详情 /

DPC集群8种动态扩缩容场景命令行实践步骤

好好好大蛮 2025/12/11 183 0 0

文档目录总览

1 动态扩缩容架构图总览
2 相关视图
3 命令行动态扩缩容步骤
数据库版本
3.1 BP横向扩容
3.2 BP横向缩容
3.3 SP横向扩容
3.4 SP横向缩容
3.5 BP纵向扩容
3.6 BP纵向缩容
3.7 MP纵向扩容
3.8 MP纵向缩容

1动态扩缩容架构图总览

DMDPC的8种扩缩容场景架构变化如下:
注:纵向(Scale-Up)指通过为单一节点增加资源(如CPU、内存)或为其配置多个副本来提升能力与可靠性;横向(Scale-Out)则指通过增加节点数量来扩展系统整体容量与性能。
注意:在实际实践中为了更好的管理容灾节实例(副本节点)和高性能实例(数据分布式节点),已知“①客户端通过IP+PORT区分实例,②不同容灾实例需分布到不同服务器,③多个高性能实例可以位于同一服务器”,所有在架构规划之初,推荐同一RAFT组的副本节点分配相同PORT,各高性能实例(特别是同一服务器)分配不同PORT,或者所有实例全部使用不同端口。本文档所有实例全部使用不同端口。

  1. BP横向扩缩容
    图片1.png
  2. SP横向扩缩容
    图片2.png
  3. BP纵向扩缩容
    图片3.png
  4. MP纵向扩缩容
    图片4.png

2相关视图

视图名称 作用
DPC_BP_GROUP 记录系统中注册的每个 BP 组信息
DPC_BP_RAFT 记录系统中注册的每个 RAFT 组信息
DPC_INSTANCE 记录系统中所有实例对象信息
DPC_NET_CONF 记录连接配置参数
DPC_TABLESPACE 记录 DMDPC 系统的用户表空间、不记录SYSTEM\ROLL\TEMP\MAIN表空间
DPC_HTS 记录 DMDPC 系统的混合表空间
V$ARCH_STATUS 用于查看归档状态
V$RLOG_RAFT_INFO 查询当前节点的选举状态和日志提交信息。=配置成多副本系统的情况下,V$RLOG_RAFT_INFO 的值才是真实有效的,非多副本系统情况下,V$RLOG_RAFT_INFO 的值无实际意义。
V$SQL_NODE_HISTORY 查询 sql 执行节点信息、查询所有执行的 sql 节点执行情况
V$DPC_MP_CFG 记录 RAFT 组内的 MP 实例信息
V$DPC_EDCT_RAFT DMDPC 系统各节点内存中记录的RAFT信息、对应 DPC_BP_RAFT 系统表的内容
V$RAFT_SWITCH_INFO 记录多副本当前节点的历史切换信息,直连多副本节点查询。

3命令行动态扩缩容步骤

数据库版本

DM Database Server 64 V8
05134284368-20250423-270902-20149

3.1BP横向扩容

以单机DMDPC的BP横向扩容为例,创建的新实例要求与DMDPC原有实例不属于同一RAFT组,在元数据服务节点为其配置BP组和容错域(可以与原有BP组和容错域一致、也可新建),MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置),扩容完成后通过计算节点统一检查集群状态。案例实践步骤如下:
图片5.png
1、SP节点,查看单机DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

图片6.png
2、初始化BP3实例并注册服务:

---dmdba初始化实例
dminit path=/home/dmdba/data/bp3 instance_name=BP3 port_num=5203 ap_port_num=6203 dpc_mode=BP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
---root用户进入/home/dmdba/dmdbms/script/root/注册服务:
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/bp3/DAMENG/dm.ini -p BP3_DPC

图片7.png
3、MP节点,注册RAFT组,组名为RAFT_3:

SP_CREATE_DPC_RAFT('BP','RAFT_3');

图片8.png

4、MP节点,在RAFT_3组内注册BP实例BP3:

SP_CREATE_DPC_INSTANCE('RAFT_3','BP3','BP',6203,5203, '10.10.10.11','10.10.10.11','NORMAL',1,'BP instance');

图片9.png
5、MP节点,新建BP组BG_2:
PS:此处可以不创建新BP组,若此处不创建则下一步将前面新建的RAFT组加入已有的BP组即可。

SP_CREATE_DPC_BP_GROUP('BG_2','bp group2');

图片10.png
6、MP节点,往BP组BG_2中添加RAFT组RAFT_3:
PS:可以将RAFT_3直接加入已有的BP组BG_1

SP_BP_GROUP_ADD_RAFT('BG_2','RAFT_3');

图片11.png

7、MP节点,往容错域中添加实例--可选:

SP_FAULT_DOMAIN_MV_INST('FDOM_1','BP3');

图片12.png
8、将MP.INI文件拷贝到BP的库目录DAMENG下:

[dmdba@DMB DAMENG]$ cat mp.ini
mp_host=10.10.10.11
mp_port=7000
[dmdba@DMB DAMENG]$ pwd
/home/dmdba/data/bp3/DAMENG

图片13.png
9、MP节点,检查注册是否成功:
PS:根据RAFT_ID匹配实例在哪个RAFT组中

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

图片14.png
10、启动BP3实例:

---前台启动
dmserver /home/dmdba/data/bp3/DAMENG/dm.ini dpc_mode=BP
---服务脚本方式启动
PS:需要先修改脚本中的变量DPC_MODE配置,取值由%DPC_MODE%改为BP
DmServiceBP3_DPC start

图片15.png

11、SP节点,检查实例状态:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;

图片16.png

篇幅原因:后续步骤不提供执行结果截图

3.2BP横向缩容

以单机DMDPC的BP横向缩容为例,接着前面BP扩容后的环境进行说明,先依此删除扩容时创建的容错域、BP组、RAFT组,再停止实例和移除相关文件。案例实践步骤如下:
图片17.png
1、SP节点,查看单机DMDPC环境基本信息:

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

2、MP节点,移除BP3实例:

SP_DROP_DPC_INSTANCE('BP3');

3、MP节点,验证BP3实例注册信息已移除:

select * from DPC_INSTANCE;

4、MP节点,删除RAFT_3组:

SP_DROP_DPC_BP_RAFT('RAFT_3'); 

5、MP节点,验证RAFT_3组已删除:

select * from DPC_BP_RAFT;

6、MP节点,删除BG_2组:

SP_DROP_DPC_BP_GROUP('BG_2');

7、MP节点,验证BG_2组已删除:

select * from DPC_BP_GROUP;

8、关闭BP3实例:

DmServiceBP3_DPC stop

9、SP节点,检查实例状态:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;

10、清理BP3实例:

---root用户进入/home/dmdba/dmdbms/script/root/移除服务
./dm_service_uninstaller.sh -n DmServiceBP3_DPC
---清理文件
mv /home/dmdba/data/bp3 /tmp/

3.3SP横向扩容

以单机DMDPC的SP横向扩容为例,创建的新实例要求与DMDPC原有实例不属于同一RAFT组,MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置),扩容完成后通过计算节点同一检查集群状态。案例实践步骤如下:
图片18.png
1、SP节点,查看单机DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、初始化SP2实例并注册服务:

---dmdba初始化实例
dminit path=/home/dmdba/data/sp2 instance_name=SP2 port_num=5302 ap_port_num=6302 dpc_mode=SP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
---root用户进入/home/dmdba/dmdbms/script/root/注册服务:
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/sp2/DAMENG/dm.ini -p SP2_DPC

3、MP节点,创建一个新的 RAFT 组,名称为 RAFT_SP2:

SP_CREATE_DPC_RAFT('SP', 'RAFT_SP2');

4、MP节点,在 RAFT_SP2 内注册 SP 实例SP2:

SP_CREATE_DPC_INSTANCE('RAFT_SP2','SP2','SP',6302,5302, '10.10.10.11','10.10.10.11','NORMAL',2,'SP instance');

5、将MP.INI文件拷贝到BP的库目录DAMENG下:

[dmdba@DMB DAMENG]$ cat mp.ini
mp_host=10.10.10.11
mp_port=7000
[dmdba@DMB DAMENG]$ pwd
/home/dmdba/data/sp2/DAMENG

6、SP节点,检查注册是否成功:
PS:根据RAFT_ID匹配实例在哪个RAFT组中

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

7,启动SP2实例:

---前台启动
dmserver /home/dmdba/data/sp3/DAMENG/dm.ini dpc_mode=BP
---服务脚本方式启动
PS:需要先修改脚本中的变量DPC_MODE配置,取值由%DPC_MODE%改为SP
DmServiceSP2_DPC start

8、SP节点,检查实例状态:

---登录新增的SP2实例查看实例状态
select INSTANCE_NAME,NAME,STATUS$ from v$instance;

3.4SP横向缩容

以单机DMDPC的SP横向缩容为例,接着前面SP扩容后的环境进行说明,先停止实例,再删除扩容时创建的RAFT组和移除相关文件。案例实践步骤如下:
图片19.png
1、SP节点,查看单机DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、关闭SP2实例:

DmServiceSP2_DPC stop

3、MP节点,移除SP2实例:

SP_DROP_DPC_INSTANCE('SP2');
PS:如果不关闭SP2实例执行移除SP2实例命令会报错:“[-3845]:SP节点活动或者非正常退出时不允许被删除.”

4、MP节点,验证SP2实例注册信息已移除:

select * from DPC_INSTANCE;

5、MP节点,删除RAFT_SP2组:

SP_DROP_DPC_BP_RAFT('RAFT_SP2');

6、MP节点,验证RAFT_SP2组已删除:

select * from DPC_BP_RAFT;

7、SP节点,检查实例状态:

select INSTANCE_NAME,NAME,STATUS$ from v$instance;

8、清理SP2实例:

---root用户进入/home/dmdba/dmdbms/script/root/移除服务
./dm_service_uninstaller.sh -n DmServiceSP2_DPC
---清理文件
mv /home/dmdba/data/sp2 /tmp/

3.5BP纵向扩容

多副本架构下动态添加BP节点的流程与非多副本架构存在差异,创建的新实例要求与DMDPC原有实例属于同一RAFT组,新实例加入原有RAFT组后自动加入原有RAFT组的BP组和容错域中,MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置)且新实例的归档状态可以根据情况选择RAFT和LEARNER(当前步骤配置为RAFT),通过联机备份恢复将RAFT组中BP主节点数据同步到新实例,由于是联机备份的数据,所以新实例启动后会与主库存在一定的延迟,这是需要将新实例以LEARNER角色加入RAFT主备集群,待同步完成后扩容完成后再调整新节点角色为FOLLOWER,最后通过计算节点同一检查集群状态。此处以BP多副本DMDPC的BP纵向扩容为例,将RAFT_1组中的BP节点由3副本扩容为5副本的案例实践步骤如下:
图片20.png
1、SP节点,查看DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、初始化BP1C、BP1CC实例并注册服务:

---dmdba初始化实例
dminit path=/home/dmdba/data/bp1c instance_name=BP1C port_num=5231 ap_port_num=6231 dpc_mode=BP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
dminit path=/home/dmdba/data/bp1cc instance_name=BP1CC port_num=5241 ap_port_num=6241 dpc_mode=BP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
---root用户进入/home/dmdba/dmdbms/script/root/注册服务:
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/bp1c/DAMENG/dm.ini -p BP1C_DPC
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/bp1cc/DAMENG/dm.ini -p BP1CC_DPC

3、MP节点,注册RAFT_1组BP实例BP1C和BP1CC:

SP_CREATE_DPC_INSTANCE('RAFT_1','BP1C','BP',6231,5231, '10.10.10.11','10.10.10.11','STANDBY',0,'BP instance');
SP_CREATE_DPC_INSTANCE('RAFT_1','BP1CC','BP',6241,5241, '10.10.10.11','10.10.10.11','STANDBY',0,'BP instance');

4、MP节点,为副本新实例注册两个容错域:

SP_CREATE_FAULT_DOMAIN ('FDOM_4', 'WUHANC');
SP_CREATE_FAULT_DOMAIN ('FDOM_5','WUHANCC');
SP_FAULT_DOMAIN_MV_INST('WUHANC', 'BP1C');
SP_FAULT_DOMAIN_MV_INST('WUHANCC', 'BP1CC');

5、MP节点,检查注册情况:

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

6、BP1C,BP1CC开启归档:

修改实例文件dm.ini的ARCH_INI参数值为1

7、配置RAFT_1组BP节点归档文件dmarch.ini:

PS:新增实例的ARCH_TPYE可以取值RAFT和LEARNER
---新增实例以BP1C的dmarch.ini为例
cat dmarch.ini
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 3000 #选举超时时间,5个库设置不同以尽快选出主库
XMAL_IP = 10.10.10.11 #本地通信 IP
XMAL_PORT = 6231 #本地通信端口,与ap_port_num一致
RAFT_SELF_ID = 4 #指定自身编号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1 #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6201 #归档目标通信端口,与ap_port_num一致
ARCH_DEST_ID = 1 #指定归档目标节点编号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1S #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6211 #归档目标通信端口,与ap_port_num一致
ARCH_DEST_ID = 2 #指定归档目标节点编号
[ARCHIVE_RAFT3]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1SS #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6221 #归档目标通信端口,与ap_port_num一致
ARCH_DEST_ID = 3 #指定归档目标节点编号
[ARCHIVE_RAFT4]
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1CC #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6241 #归档目标通信端口,与ap_port_num一致
ARCH_DEST_ID = 5 #指定归档目标节点编号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/arch/bp1c #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
---原3副本实例的dmarch.ini添加如下配置
[ARCHIVE_RAFT3] 
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1C #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6231 #归档目标通信端口,与ap_port_num一致
ARCH_DEST_ID = 4 #指定归档目标节点编号
[ARCHIVE_RAFT4] 
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = BP1CC #归档目标实例名
ARCH_DEST_IP = 10.10.10.11 #归档目标 IP
ARCH_DEST_PORT = 6241 #归档目标通信端口
ARCH_DEST_ID =5 #指定归档目标节点编号

8、配置 mp.ini 与本集群的其他节点 mp.ini 文件内容一致:

[dmdba@DMB DAMENG]$ cat mp.ini
mp_host=10.10.10.11
mp_port=7000
[dmdba@DMB DAMENG]$ pwd
/home/dmdba/data/bp1c/DAMENG

9、BP节点,使用DMAP,联机备份RAFT_1组的BP主库:

SQL>BACKUP DATABASE BACKUPSET '/home/dmdba/backup/bp1';

10、使用DMRMAN,还原数据到BP1C、BP1CC节点:

---查看魔数bak_magic
SHOW BACKUPSET '/home/dmdba/backup/bp1_BP1';
---还原 BP1C
RMAN>RESTORE DATABASE '/home/dmdba/arch/bp1c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/bp1' USE BAK_MAGIC 0;
RMAN>RECOVER DATABASE '/home/dmdba/arch/bp1c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/bp1' USE BAK_MAGIC 0 UNTIL END_LSN;
RMAN>RECOVER DATABASE '/home/dmdba/arch/bp1c/DAMENG/dm.ini' UPDATE DB_MAGIC;
---还原 BP1CC
RMAN>RESTORE DATABASE '/home/dmdba/arch/bp1cc/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/bp1' USE BAK_MAGIC 0;
RMAN>RECOVER DATABASE '/home/dmdba/arch/bp1cc/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/bp1' USE BAK_MAGIC 0 UNTIL END_LSN;
RMAN>RECOVER DATABASE '/home/dmdba/arch/bp1cc/DAMENG/dm.ini' UPDATE DB_MAGIC;

11、启动 BP1C,BP1CC实例:

---前台启动
dmserver /home/dmdba/data/bp1c/DAMENG/dm.ini dpc_mode=BP
dmserver /home/dmdba/data/bp1cc/DAMENG/dm.ini dpc_mode=BP
---服务脚本方式启动
PS:需要先修改脚本中的变量DPC_MODE配置,取值由%DPC_MODE%改为BP
DmServiceBP1C_DPC start
DmServiceBP1CC_DPC start

12、RAFT_1组主库,执行增加节点流程:

---以 learner 节点的方式加入集群,从而在不影响集群使用条件下向新节点同步日志(此时新节点是learner)
SP_ADD_RAFT_LEARNER('BP1C','10.10.10.11',6231,4);
SP_ADD_RAFT_LEARNER('BP1CC','10.10.10.11',6241,5);
---将新节点加入集群(此时新节点会成为Follower)
SP_ALTER_RAFT_NODE('BP1/BP1S/BP1SS/BP1C/BP1CC');
PS:加入集群可能报错“[-3903]:LEARNER节点归档状态失效,请等待归档状态恢复有效再执行动态增删节点”。出现问题的原因是dmarch.ini中对新增实例的ARCH_TYPE没有设置成LEARNER,检查新增实例状态是否正确(在数据完成同步后会变比),通过重启新增实例解决。

13、SP节点,检查集群状态:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;
select * from V$ARCH_STATUS;
select TERM_ID,STATE,LEADER,LOG_TERM_ID,C_SEQ,C_LSN,F_SEQ_ARR,F_LSN_ARR,RAFT_SHADOW from V$RLOG_RAFT_INFO;

3.6BP纵向缩容

以BP多副本DMDPC的BP纵向缩容为例,先依此将目标实例从RAFT组和集群中移出,再停止实例和移除相关文件。接着前面扩容后5副本BP缩容回3副本进行说明,案例实践步骤如下:
图片21.png
1、SP节点,查看DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、RAFT_1组主库,执行删除节点操作:

SP_ALTER_RAFT_NODE('BP1/BP1S/BP1SS');
或
SP_DELETE_RAFT_NODE('BP1C/BP1CC');

3、SP节点,验证副本已经删除,不再向目标副本发送归档:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from V$ARCH_STATUS;

4、MP节点,移除副本实例:

SP_DROP_DPC_INSTANCE('BP1C');
SP_DROP_DPC_INSTANCE('BP1CC');

5、MP节点,验证实例已删除:

select * from DPC_INSTANCE;

6、SP节点,检查实例状态:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;

7、关闭BP1C、BP1CC实例:

DmServiceBP1C_DPC stop
DmServiceBP1CC_DPC stop

8、清理BP1C、BP1CC实例:

---root用户进入/home/dmdba/dmdbms/script/root/移除服务
./dm_service_uninstaller.sh -n DmServiceBP1C_DPC
./dm_service_uninstaller.sh -n DmServiceBP1CC_DPC
---清理文件
mv /home/dmdba/data/bp1c /tmp/
mv /home/dmdba/data/bp1cc /tmp/

3.7MP纵向扩容

以MP多副本DMDPC的MP纵向扩容为例,创建的新实例要求与DMDPC原有实例属于同一RAFT组,新实例加入原有RAFT组后自动加入原有RAFT组的容错域中,MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置)且新实例的归档状态可以根据情况选择RAFT和LEARNER(当前步骤配置为LEARNER),通过联机备份恢复将RAFT组中MP主节点数据同步到新实例,由于是联机备份的数据,所以新实例启动后会与主库存在一定的延迟,这是需要将新实例以LEARNER角色加入RAFT集群,待同步完成后扩容完成后再调整新节点角色为FOLLOWER,最后通过计算节点同一检查集群状态。将MP_RAFT组中的MP节点由3副本扩容为5副本的案例实践步骤如下:
图片22.png
1、SP节点,查看DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、初始化MP1C、MP1CC实例并注册服务:

---dmdba初始化实例
dminit path=/home/dmdba/data/mp1c instance_name=MP1C port_num=5431 ap_port_num=6431 dpc_mode=MP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
dminit path=/home/dmdba/data/mp1cc instance_name=MP1CC port_num=5441 ap_port_num=6441 dpc_mode=MP SYSDBA_PWD=Dmdba123456 SYSAUDITOR_PWD=Dmdba123456
---root用户进入/home/dmdba/dmdbms/script/root/注册服务:
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/mp1c/DAMENG/dm.ini -p MP1C_DPC
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/mp1cc/DAMENG/dm.ini -p MP1CC_DPC

3、MP节点,注册MP_RAFT组MP实例MP1C和MP1CC:

SP_CREATE_DPC_INSTANCE('', 'MP1C', 'MP', 6431, 5431, '10.10.10.11', 'STANDBY', 0, 'MP instance');
SP_CREATE_DPC_INSTANCE('', 'MP1CC', 'MP', 6441, 5441, '10.10.10.11', 'STANDBY', 0, 'MP instance');

4、打开MP1C、MP1CC归档选项ARCH_INI=1:

修改实例文件dm.ini的ARCH_INI参数值为1

5、配置MP_RAFT组MP节点归档文件dmarch.ini,添加新增的MP副本节点信息:

---新增实例以MP1C的dmarch.ini为例
XMAL_HB_INTERVAL = 5 #节点通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 3000 #选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = 4 #指定自身编号
RAFT_LEARNER = 1 #指定自己是 Learner 节点
[ARCHIVE_RAFT1] 
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = MP1 #归档目标实例名
ARCH_DEST_ID = 1 #指定归档目标节点编号
[ARCHIVE_RAFT2] 
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = MP1S #归档目标实例名
ARCH_DEST_ID = 2 #指定归档目标节点编号
[ARCHIVE_RAFT3] 
ARCH_TYPE = RAFT #RAFT 归档
ARCH_DEST = MP1SS #归档目标实例名
ARCH_DEST_ID = 3 #指定归档目标节点编号
[ARCHIVE_RAFT4] 
ARCH_TYPE = LEARNER #RAFT 归档
ARCH_DEST = MP1CC #归档目标实例名
ARCH_DEST_ID = 5 #指定归档目标节点编号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/arch/mp1c #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位 MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
--原3副本实例的dmarch.ini添加如下配置
[ARCHIVE_RAFT3] 
ARCH_TYPE = LEARNER #RAFT 归档
ARCH_DEST = MP1C #归档目标实例名
ARCH_DEST_ID = 4 #指定归档目标节点编号
[ARCHIVE_RAFT4] 
ARCH_TYPE = LEARNER #RAFT 归档
ARCH_DEST = MP1CC #归档目标实例名
ARCH_DEST_ID = 5 #指定归档目标节点编号

6、配置MP.INI,加上新增的两个MP副本节点,所有节点MP.INI文件保持一致(包括5个MP、1个BP、1个SP):

cat mp.ini
[MP1]
mp_host=10.10.10.11
mp_port=7000
[MP1S]
mp_host=10.10.10.11
mp_port=8000
[MP1SS]
mp_host=10.10.10.11
mp_port=9000
[MP1C]
mp_host=10.10.10.11
mp_port=10000
[MP1CC]
mp_host=10.10.10.11
mp_port=11000

7、MP_RAFT主库,联机备份数据:

SQL>BACKUP DATABASE BACKUPSET '/home/dmdba/backup/mp1/bak';

8、使用DMRMAN,还原数据到MP1C、M1CC节点:

---查看魔数bak_magic
RMAN>SHOW BACKUPSET '/home/dmdba/backup/mp1/bak_MP1';
---还原 MP1C
RMAN>RESTORE DATABASE '/home/dmdba/data/mp1c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/mp1/bak_MP1' USE BAK_MAGIC 0;
RMAN>RECOVER DATABASE '/home/dmdba/data/mp1c/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/mp1/bak_MP1' USE BAK_MAGIC 0 UNTIL END_LSN;
RMAN>RECOVER DATABASE '/home/dmdba/data/mp1c/DAMENG/dm.ini' UPDATE DB_MAGIC;
---还原 MP1CC
RMAN>RESTORE DATABASE '/home/dmdba/data/mp1cc/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/mp1/bak_MP1' USE BAK_MAGIC 0;
RMAN>RECOVER DATABASE '/home/dmdba/data/mp1cc/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/backup/mp1/bak_MP1' USE BAK_MAGIC 0 UNTIL END_LSN;
RMAN>RECOVER DATABASE '/home/dmdba/data/mp1cc/DAMENG/dm.ini' UPDATE DB_MAGIC;

9、启动MP1C、MP1CC:

---前台启动
dmserver /home/dmdba/data/mp1c/DAMENG/dm.ini dpc_mode=MP
dmserver /home/dmdba/data/mp1cc/DAMENG/dm.ini dpc_mode=MP
---服务脚本方式启动
PS:需要先修改脚本中的变量DPC_MODE配置,取值由%DPC_MODE%改为MP
DmServiceMP1C_DPC start
DmServiceMP1CC_DPC start

10、RAFT_1组主库,执行增加节点流程:
(1)以 learner 节点的方式加入集群,从而在不影响集群使用条件下向新节点同步日志(此时新节点是learner)

SP_ADD_RAFT_LEARNER('MP1C','10.10.10.11',6431,4);
SP_ADD_RAFT_LEARNER('MP1CC','10.10.10.11',6441,5);

(2)查看全局实例信息及归档状态

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from V$ARCH_STATUS;

(3)将新节点加入集群(此时新节点会成为candidate)

SP_ALTER_RAFT_NODE('MP1/MP1S/MP1SS/MP1C/MP1CC');

(4)查看全局实例信息及归档状态

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from V$ARCH_STATUS;

11、SP节点,检查集群状态:
PS:此时新增实例状态为open,但是在MP元数据DPC_INSTANCE中SYS_MODE会保持为“6:关闭”状态,可以尝试重启当前主库节点使当前MP_RAFT组发生一次领导者选举过程,主备切换后SYS_MODE会又6变为4,在SP节点查询会话对此动作无感知。

select * from DPC_INSTANCE;

3.8MP纵向缩容

以MP多副本DMDPC的MP纵向缩容为例,先依此将目标实例从RAFT组和集群中移出,再停止实例和移除相关文件,缩容后各节点的MP.INI文件需要调整删除实例的归档配置。接着前面扩容后5副本MP缩容回3副本进行说明,案例实践步骤如下:
图片23.png
1、SP节点,查看DMDPC环境基本信息:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;

2、MP_RAFT组主库,执行删除节点操作:

SP_ALTER_RAFT_NODE('MP1/MP1S/MP1SS');
或
SP_DELETE_RAFT_NODE('MP1C/MP1CC');

3、SP节点,验证副本已经删除,不再向目标副本发送归档:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;
select * from V$ARCH_STATUS;

4、MP节点,移除副本实例:

SP_DROP_DPC_INSTANCE('MP1C');
SP_DROP_DPC_INSTANCE('MP1CC');

5、MP节点,验证实例已删除:

select * from DPC_INSTANCE;

6、修改所有节点的 mp.ini 文件,删除目标MP副本节点的信息

[dmdba@DMB DAMENG]$ cat mp.ini
[MP1]
mp_host=10.10.10.11
mp_port=7000
[MP1S]
mp_host=10.10.10.11
mp_port=8000
[MP1SS]
mp_host=10.10.10.11
mp_port=9000

7、SP节点,检查实例状态:

select INSTANCE_NAME,NAME,STATUS$ from gv$instance;

8、关闭MP1C、MP1CC实例:

DmServiceMP1C_DPC stop
DmServiceMP1CC_DPC stop

9、清理MP1C、MP1CC实例:

---root用户进入/home/dmdba/dmdbms/script/root/移除服务
./dm_service_uninstaller.sh -n DmServiceMP1C_DPC
./dm_service_uninstaller.sh -n DmServiceMP1CC_DPC
---清理文件
mv /home/dmdba/data/mp1c /tmp/
mv /home/dmdba/data/mp1cc /tmp/
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服