段落引用前遇见某一现场有一主两备改造为一主一备一实时。日常中我们指的备库均为实时备库(REALTIME),但由于网络或其他问题,现场不希望备库出现问题后导致主库进入不可读的状态,且对数据的实时性也具有一定要求,此时就可以采用同步备库(SYNC)的方式来做主备库同步。
操作系统 | Redhat6.9 |
---|---|
数据库版本 | 05134284194-20240814-239099-20108 |
服务器内存 | 5GB |
数据库软件路径 | /home/dmdba/dm/dmdbms |
数据路径 | /dbdata/dmdata |
归档路径 | /dbarch/dmarch |
日志路径 | /home/dmdba/dm/dmdbms/log |
内部通信IP网络 | 192.168.20.61 |
对外服务IP地址 | 192.168.20.31 |
操作系统 | Redhat6.9 |
---|---|
数据库版本 | 05134284194-20240814-239099-20108 |
服务器内存 | 5GB |
数据库软件路径 | /home/dmdba/dm/dmdbms |
数据路径 | /dbdata/dmdata |
归档路径 | /dbarch/dmarch |
日志路径 | /home/dmdba/dm/dmdbms/log |
内部通信IP网络 | 192.168.20.62 |
对外服务IP地址 | 192.168.20.32 |
操作系统 | Redhat6.9 |
---|---|
数据库版本 | 05134284194-20240814-239099-20108 |
服务器内存 | 4GB |
数据库软件路径 | /home/dmdba/dm/dmdbms |
数据路径 | /dbdata/dmdata |
归档路径 | /dbarch/dmarch |
日志路径 | /home/dmdba/dm/dmdbms/log |
内部通信IP网络 | 192.168.20.64 |
对外服务IP地址 | 192.168.20.34 |
操作系统 | Redhat6.9 |
---|---|
数据库版本 | 05134284194-20240814-239099-20108 |
服务器内存 | 2GB |
数据库软件路径 | /home/dmdba/dm/dmdbms |
数据路径 | /dbdata/dmdata |
归档路径 | /dbarch/dmarch |
日志路径 | /home/dmdba/dm/dmdbms/log |
内部通信IP网络 | 192.168.20.63 |
对外服务IP地址 | 192.168.20.33 |
现有环境为一主两备,由于一备机服务器需要搬迁至异地机房,根据需求将搬迁至异地机房的实时备库更改为同步备库,本次对一主两备架构进行改造测试,改造后架构为一主一备加同步备库。
特性 | 同步备库(SYNC) | 实时备库(REALTIME) |
---|---|---|
日志发送时机 | 主库归档日志刷盘后发送 | 主库写入联机日志前发送 |
响应机制 | 收到日志立即响应主库 | 事务一致模式需重演后响应,高性能模式立即响应 |
失败处理 | 设置归档为无效状态,不挂起主库 | 主库挂起(Suspend)等待守护进程干预 |
适用场景 | 高可用容灾,允许短暂数据延迟 | 强一致性场景,要求零数据丢失 |
改造前环境信息:
机器名 | IP地址 | 初始状态 |
---|---|---|
dm8_01 | 外部服务IP:192.168.20.31 | 主库:GRP1_DM1 |
dm8_01 | 内部通信IP:192.168.20.61 | 主库:GRP1_DM1 |
dm8_02 | 外部服务IP:192.168.20.33 | 备库一:GRP1_DM2 |
dm8_02 | 内部通信IP:192.168.20.63 | 备库一:GRP1_DM2 |
dm8_03 | 外部服务IP:192.168.20.34 | 备库二:GRP1_DM3 |
dm8_03 | 内部通信IP:192.168.20.64 | 备库二:GRP1_DM3 |
本次测试将会把GRP1_DM3改造为同步备库。 |
备份:
dm8_01、dm8_02、dm8_03中执行:
cd /dbdata/dmdata/DAMENG
cp dm.ini dm.ini_250419
cp dmmal.ini dm.ini_250419
cp dmwatcher.ini dmwatcher.ini_bak
cp dmarch.ini dmarch.ini_bak
修改dmarch.ini,将三台数据库中的GRP1_DM3修改为SYNC:
GRP1_DM1,GRP1_DM2进行如下操作:
vi dmarch.ini
[ARCHIVE_REALTIME2]
ARCH_TYPE = SYNC
ARCH_DEST = GRP1_DM3
ARCH_RECOVER_TIME = 5 同步备库的异步恢复间隔
GRP1_DM3进行如下操作:
vi dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dbarch/dmarch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 1024
修改GRP1_DM3的守护类型和故障切换模式:
vi dmwatcher.ini
DW_TYPE = LOCAL
DW_MODE = MANUAL
停止先后顺序有要求,必须要先停止主库
./DmWatcherServiceDM1 stop
./DmWatcherServiceDM2 stop
./DmWatcherServiceDM3 stop
./DmServiceDM1 stop
./DmServiceDM2 stop
./DmServiceDM3 stop
按照GRP1_DM2、GRP1_DM1、GRP1_DM3先后执行实例启动:
./dmserver /dbdata/dmdata/DAMENG/dm.ini mount
按照如下顺序执行守护进程启动:
./DmWatcherServiceDM2 start
./DmWatcherServiceDM1 start
./DmWatcherServiceDM3 start
启动后监视器显示如下:
Down掉主库的内部通信网络,实时备库自动接管,切换为主库
Down掉实时备库内部通信网卡,主库进行FAILOVER,强制切换为OPEN状态,如下图:
其中主主库会短时进入到SUPPEND状态,如下图:
实时备库网络恢复后,实时备库追上同步,如下图:
Down掉同步备库网卡内部通信网卡,主库读写不受到影响,同步备库归档状态切换为INVALID,等待网络恢复后异步恢复。
网络恢复后同步备库追上同步后归档状态切换为有效
无法写入数据,只能进行现在数据读取
同步备库无法通过dmmontor去切换为主库
可以暂时将主备库的内部通信IP地址更换为外部访问IP地址恢复对外服务。
Down掉主库和同步备库的内部通信网卡,实时备库会自动接管切换为主库。
目前主库为GRP1_DM2,强制对GRP1_DM2虚拟机进行关机
观察监视器输出
实时备库自动接管,切换为主库。
同步备库数据同步正常。
目前实时备库为GRP1_DM2,强制对GRP1_DM2虚拟机进行关机
观察监视器输出:备库服务器掉电后,主库会进入failover流程,强制OPEN。如下图:
主库会短时进入到SUPPEND状态,如下图:
只能够将同步备库更改为实时备库,并强制takeover force切换为主库。如下步骤所示:
先停止同步备库的运行和原来的GRP1_DM1、GRP1_DM2库的运行:
更改同步备库的dmarch.ini和dmwathcer.ini两个配置文件(先备份):
然后启动GRP1_DM3:
进入到监视器中,执行takeover force命令:
注意:takeover无法执行成功
GRP1_DM3接管完成后可正常读写,业务恢复访问:
后继数据库进入备库重建及同步备库重建环节。
dmmal.ini
dmwatcher.ini
dmarch.ini
dm.ini
dmmal.ini
dmarch.ini
dmwatcher.ini
dm.ini
dmmal.ini
dmarch.ini
dmwatcher.ini
dm.ini
dmarch.ini
dmmal.ini
dmwatcher.ini
dm.ini
dmarch.ini
dmmal.ini
dmwatcher.ini
dm.ini
文章
阅读量
获赞