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纵向缩容
DMDPC的8种扩缩容场景架构变化如下:
注:纵向(Scale-Up)指通过为单一节点增加资源(如CPU、内存)或为其配置多个副本来提升能力与可靠性;横向(Scale-Out)则指通过增加节点数量来扩展系统整体容量与性能。
注意:在实际实践中为了更好的管理容灾节实例(副本节点)和高性能实例(数据分布式节点),已知“①客户端通过IP+PORT区分实例,②不同容灾实例需分布到不同服务器,③多个高性能实例可以位于同一服务器”,所有在架构规划之初,推荐同一RAFT组的副本节点分配相同PORT,各高性能实例(特别是同一服务器)分配不同PORT,或者所有实例全部使用不同端口。本文档所有实例全部使用不同端口。
| 视图名称 | 作用 |
|---|---|
| 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 | 记录多副本当前节点的历史切换信息,直连多副本节点查询。 |
DM Database Server 64 V8
05134284368-20250423-270902-20149
以单机DMDPC的BP横向扩容为例,创建的新实例要求与DMDPC原有实例不属于同一RAFT组,在元数据服务节点为其配置BP组和容错域(可以与原有BP组和容错域一致、也可新建),MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置),扩容完成后通过计算节点统一检查集群状态。案例实践步骤如下:
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、初始化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
3、MP节点,注册RAFT组,组名为RAFT_3:
SP_CREATE_DPC_RAFT('BP','RAFT_3');
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');
5、MP节点,新建BP组BG_2:
PS:此处可以不创建新BP组,若此处不创建则下一步将前面新建的RAFT组加入已有的BP组即可。
SP_CREATE_DPC_BP_GROUP('BG_2','bp group2');
6、MP节点,往BP组BG_2中添加RAFT组RAFT_3:
PS:可以将RAFT_3直接加入已有的BP组BG_1
SP_BP_GROUP_ADD_RAFT('BG_2','RAFT_3');
7、MP节点,往容错域中添加实例--可选:
SP_FAULT_DOMAIN_MV_INST('FDOM_1','BP3');
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
9、MP节点,检查注册是否成功:
PS:根据RAFT_ID匹配实例在哪个RAFT组中
select * from DPC_BP_GROUP;
select * from DPC_INSTANCE;
select * from DPC_BP_RAFT;
10、启动BP3实例:
---前台启动
dmserver /home/dmdba/data/bp3/DAMENG/dm.ini dpc_mode=BP
---服务脚本方式启动
PS:需要先修改脚本中的变量DPC_MODE配置,取值由%DPC_MODE%改为BP
DmServiceBP3_DPC start
11、SP节点,检查实例状态:
select INSTANCE_NAME,NAME,STATUS$ from v$instance;
篇幅原因:后续步骤不提供执行结果截图
以单机DMDPC的BP横向缩容为例,接着前面BP扩容后的环境进行说明,先依此删除扩容时创建的容错域、BP组、RAFT组,再停止实例和移除相关文件。案例实践步骤如下:
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/
以单机DMDPC的SP横向扩容为例,创建的新实例要求与DMDPC原有实例不属于同一RAFT组,MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置),扩容完成后通过计算节点同一检查集群状态。案例实践步骤如下:
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;
以单机DMDPC的SP横向缩容为例,接着前面SP扩容后的环境进行说明,先停止实例,再删除扩容时创建的RAFT组和移除相关文件。案例实践步骤如下:
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/
多副本架构下动态添加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副本的案例实践步骤如下:
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;
以BP多副本DMDPC的BP纵向缩容为例,先依此将目标实例从RAFT组和集群中移出,再停止实例和移除相关文件。接着前面扩容后5副本BP缩容回3副本进行说明,案例实践步骤如下:
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/
以MP多副本DMDPC的MP纵向扩容为例,创建的新实例要求与DMDPC原有实例属于同一RAFT组,新实例加入原有RAFT组后自动加入原有RAFT组的容错域中,MP.INI文件要保持DMDPC全局节点保持一致(每个实例都需要配置)且新实例的归档状态可以根据情况选择RAFT和LEARNER(当前步骤配置为LEARNER),通过联机备份恢复将RAFT组中MP主节点数据同步到新实例,由于是联机备份的数据,所以新实例启动后会与主库存在一定的延迟,这是需要将新实例以LEARNER角色加入RAFT集群,待同步完成后扩容完成后再调整新节点角色为FOLLOWER,最后通过计算节点同一检查集群状态。将MP_RAFT组中的MP节点由3副本扩容为5副本的案例实践步骤如下:
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;
以MP多副本DMDPC的MP纵向缩容为例,先依此将目标实例从RAFT组和集群中移出,再停止实例和移除相关文件,缩容后各节点的MP.INI文件需要调整删除实例的归档配置。接着前面扩容后5副本MP缩容回3副本进行说明,案例实践步骤如下:
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/
文章
阅读量
获赞
