达梦自治容灾集群英文全称 DM Autonomous Failover Cluster,简称 DM AFC,是DM9版本中新增加的一种集群,通过自动化的主库选举、故障检测与恢复机制,彻底消除单点故障风险,确保数据零丢失与业务连续性,本文主要介绍DMAFC集群(不包含影子副本)搭建过程及选举测试。
1、集群规划
2、初始化实例
在三台机器上分别初始化三个实例
./dminit path=/dmdata/dmafc/raft01 port_num=1570 instance_name=raft01 sysdba_pwd=xxxx sysauditor_pwd=xxxx
./dminit path=/dmdata/dmafc/raft02 port_num=1571 instance_name=raft02 sysdba_pwd=xxxx sysauditor_pwd=xxxx
./dminit path=/dmdata/dmafc/raft03 port_num=1572 instance_name=raft03 sysdba_pwd=xxxx sysauditor_pwd=xxxx
3、前台启动一次实例
启动后,待显示”SYSTEM IS READY”后,输入exit退出前台启动界面
./dmserver /dmdata/dmafc/raft01/DAMENG/dm.ini
./dmserver /dmdata/dmafc/raft02/DAMENG/dm.ini
./dmserver /dmdata/dmafc/raft03/DAMENG/dm.ini
4、修改dm.ini中配置参数值
将3个实例的dm.ini配置文件中的参数修改如下,开启归档和设置不允许用户直接通过SQL语句修改服务器模式
ARCH_INI=1
ALTER_MODE_STATUS=0
5、脱机备份
将raft01实例全库备份一次
./dmrman ctlstmt="backup database '/dmdata/dmafc/raft01/DAMENG/dm.ini' backupset '/dmdata/fullbak'"
6、创建归档目录
分别在三个实例机器上,创建归档目录
cd /dmdata
mkdir arch
7、归档文件配置dmarch.ini
ARCHIVE_RAFT1、ARCHIVE_RAFT2分别配置其他两个实例的信息,如在raft01机器上配置为raft02和raft03的信息,在raft02机器上配置为raft01和raft03信息,在raft03机器上配置为raft01和raft02信息
在raft01上dmarch.ini配置如下
XMAL_HB_INTERVAL = 5 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 3000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 10.0.0.241 #本地 XMAL 通信 IP
XMAL_PORT = 15700 #本地 XMAL 通信端口
RAFT_SELF_ID = 1 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT02 #归档目标实例名
ARCH_DEST_IP = 10.0.0.242 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15710 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 2 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT03 #归档目标实例名
ARCH_DEST_IP = 10.0.0.243 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15720 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 3 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
在raft02上dmarch.ini配置如下
XMAL_HB_INTERVAL = 5 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 5000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 10.0.0.242 #本地 XMAL 通信 IP
XMAL_PORT = 15710 #本地 XMAL 通信端口
RAFT_SELF_ID = 2 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT01 #归档目标实例名
ARCH_DEST_IP = 10.0.0.241 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15700 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 1 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT03 #归档目标实例名
ARCH_DEST_IP = 10.0.0.243 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15720 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 3 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
在raft03上dmarch.ini配置如下
XMAL_HB_INTERVAL = 5 #副本通信检测间隔
RAFT_HB_INTERVAL = 150 #选举心跳间隔
RAFT_VOTE_INTERVAL = 7000 #选举超时时间,三个库设置不同以尽快选出主库
XMAL_IP = 10.0.0.243 #本地 XMAL 通信 IP
XMAL_PORT = 15720 #本地 XMAL 通信端口
RAFT_SELF_ID = 3 #当前副本号
[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT01 #归档目标实例名
ARCH_DEST_IP = 10.0.0.241 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15700 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 1 #归档目标副本号
[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT #Raft 归档
ARCH_DEST = RAFT02 #归档目标实例名
ARCH_DEST_IP = 10.0.0.242 #归档目标 XMAL 通信 IP
ARCH_DEST_PORT = 15710 #归档目标 XMAL 通信端口
ARCH_DEST_ID = 2 #归档目标副本号
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件路径
ARCH_FILE_SIZE = 128 #本地单个归档文件最大值,单位:MB
ARCH_SPACE_LIMIT = 0 #本地归档文件总大小,0 表示无限制
8、还原备份文件
1、将备份文件从raft01上传到raft02机器上
scp -r fullbak root@192.168.161.242:/dmdata
2、在raft02机器上使用传输过来的备份文件进行还原
./dmrman ctlstmt="restore database '/dmdata/dmafc/raft02/DAMENG/dm.ini' from backupset '/dmdata/fullbak'"
./dmrman ctlstmt="recover database '/dmdata/dmafc/raft02/DAMENG/dm.ini' from backupset '/dmdata/fullbak'"
./dmrman ctlstmt="recover database '/dmdata/dmafc/raft02/DAMENG/dm.ini' update db_magic"
1、将备份文件从raft01上传到raft03机器上
scp -r fullbak root@192.168.161.243:/dmdata
2、在raft03机器上使用传输过来的备份文件进行还原
./dmrman ctlstmt="restore database '/dmdata/dmafc/raft03/DAMENG/dm.ini' from backupset '/dmdata/fullbak'"
./dmrman ctlstmt="recover database '/dmdata/dmafc/raft03/DAMENG/dm.ini' from backupset '/dmdata/fullbak'"
./dmrman ctlstmt="recover database '/dmdata/dmafc/raft03/DAMENG/dm.ini' update db_magic"
9、启动集群
分别在raft01、raft02、raft03机器上,前台启动进程,当出现”SYSTEM IS READY”则表示启动完成,此为前台启动,窗口关闭后进程就会停止
./dmserver /dmdata/dmafc/raft01/DAMENG/dm.ini mount
./dmserver /dmdata/dmafc/raft02/DAMENG/dm.ini mount
./dmserver /dmdata/dmafc/raft03/DAMENG/dm.ini mount
10、注册服务脚本
分别在raft01、raft02、raft03机器上注册服务脚本,注册完成后,用此服务脚本启动,则是后台启动,此时关闭会话窗口进程也不会停止,此步骤必须用root用户操作
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p _RAFT01 -dm_ini /dmdata/dmafc/raft01/DAMENG/dm.ini -m mount
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p _RAFT02 -dm_ini /dmdata/dmafc/raft02/DAMENG/dm.ini -m mount
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p _RAFT03 -dm_ini /dmdata/dmafc/raft03/DAMENG/dm.ini -m mount
11、登录测试
1、通过manager图形化界面或者disql命令行工具分别登录三个节点
./disql sysdba/xxxx:1570
2、查看视图v$global_raft_info,显示raft01为leader,raft02和raft03为follower则正常
3、登录leader节点创建表,之后在另外两个follower节点上查询,确保能查询到创建的表及插入的数据
create table SYSDBA.TEST(ID INT,NAME VARCHAR);
insert into SYSDBA.TEST VALUES(1,‘AA’);
insert into SYSDBA.TEST VALUES(2,‘BB’);
commit;
12、自动选举测试
将当前leader节点(raft01)数据库实例进程关闭,确认是否可以选举出新的leader节点,经测试能正常选举出新的leader节点(raft02)
13、手动指定备库切换测试
1、查看当前集群状态
select * from v$global_raft_info;
2、登录主库将当前主库挂起,执行此操作后,会挂起主库除当前会话外的所有工作线程,用于禁止主库产生新日志,在主库成功切换为备库后,被挂起的工作线程会被自动唤醒
SP_RAFT_SUSPEND_THREAD();
3、查看当前集群状态,当前还未开始切换
4、测试当前主库读写情况,可发现不能写数据但可以查询数据
5、新开一个会话,测试读写情况,发现新的会话无法再登录主库了,备库不能写入数据只能查询数据
6、将备库切换成主库,此处计划将raft03切换成主库,登录raft03库操作
SP_RAFT_SWITCHOVER();
7、再次查看当前集群状态,可确认raft03已切换成主库了
8、再次测试3个节点读写情况,确认其他两个备库只读,新的主库raft03可读可写
文章
阅读量
获赞
