注册
达梦数据库学习25:主备切换switchover过程
专栏/技术分享/ 文章详情 /

达梦数据库学习25:主备切换switchover过程

Hi70KG 2023/09/25 1803 0 0
摘要

主备切换switchover过程

switchover DMSVR01
[monitor]         2023-09-15 15:15:33: 开始切换实例DMSVR01
[monitor]         2023-09-15 15:15:33: 通知守护进程DMSVR02切换SWITCHOVER状态
[monitor]         2023-09-15 15:15:33: 守护进程(DMSVR02)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2023-09-15 15:15:34: 切换守护进程DMSVR02为SWITCHOVER状态成功
[monitor]         2023-09-15 15:15:34: 通知守护进程DMSVR01切换SWITCHOVER状态
[monitor]         2023-09-15 15:15:34: 守护进程(DMSVR01)状态切换 [OPEN-->SWITCHOVER]
[monitor]         2023-09-15 15:15:35: 切换守护进程DMSVR01为SWITCHOVER状态成功
[monitor]         2023-09-15 15:15:35: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2023-09-15 15:15:36: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2023-09-15 15:15:36: 实例DMSVR01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor]         2023-09-15 15:15:36: 实例DMSVR01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor]         2023-09-15 15:15:36: 实例DMSVR02开始执行ALTER DATABASE MOUNT语句
[monitor]         2023-09-15 15:15:36: 实例DMSVR02执行ALTER DATABASE MOUNT语句成功
[monitor]         2023-09-15 15:15:36: 实例DMSVR01开始执行SP_APPLY_KEEP_PKG()语句
[monitor]         2023-09-15 15:15:37: 实例DMSVR01执行SP_APPLY_KEEP_PKG()语句成功
[monitor]         2023-09-15 15:15:37: 实例DMSVR01开始执行ALTER DATABASE MOUNT语句
[monitor]         2023-09-15 15:15:37: 实例DMSVR01执行ALTER DATABASE MOUNT语句成功
[monitor]         2023-09-15 15:15:37: 实例DMSVR02开始执行ALTER DATABASE STANDBY语句
[monitor]         2023-09-15 15:15:38: 实例DMSVR02执行ALTER DATABASE STANDBY语句成功
[monitor]         2023-09-15 15:15:38: 实例DMSVR01开始执行ALTER DATABASE PRIMARY语句
[monitor]         2023-09-15 15:15:38: 实例DMSVR01执行ALTER DATABASE PRIMARY语句成功
[monitor]         2023-09-15 15:15:38: 通知实例DMSVR01修改所有归档状态无效
[monitor]         2023-09-15 15:15:38: 修改所有实例归档为无效状态成功
[monitor]         2023-09-15 15:15:38: 实例DMSVR02开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2023-09-15 15:15:38: 实例DMSVR02执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2023-09-15 15:15:38: 实例DMSVR01开始执行ALTER DATABASE OPEN FORCE语句
[monitor]         2023-09-15 15:15:40: 实例DMSVR01执行ALTER DATABASE OPEN FORCE语句成功
[monitor]         2023-09-15 15:15:40: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2023-09-15 15:15:40: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2023-09-15 15:15:40: 实例DMSVR01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor]         2023-09-15 15:15:40: 实例DMSVR01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor]         2023-09-15 15:15:40: 通知守护进程DMSVR02切换OPEN状态
[monitor]         2023-09-15 15:15:40: 守护进程(DMSVR02)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2023-09-15 15:15:41: 切换守护进程DMSVR02为OPEN状态成功
[monitor]         2023-09-15 15:15:41: 通知守护进程DMSVR01切换OPEN状态
[monitor]         2023-09-15 15:15:41: 守护进程(DMSVR01)状态切换 [SWITCHOVER-->OPEN]
[monitor]         2023-09-15 15:15:41: 切换守护进程DMSVR01为OPEN状态成功
[monitor]         2023-09-15 15:15:41: 通知组(GRP1)的守护进程执行清理操作
[monitor]         2023-09-15 15:15:41: 清理守护进程(DMSVR01)请求成功
[monitor]         2023-09-15 15:15:41: 清理守护进程(DMSVR02)请求成功
[monitor]         2023-09-15 15:15:41: 实例DMSVR01切换成功

主备SWITCHOVER状态的工作流程如以上所示。

SWITCHOVER主要功能是保证整个故障切换过程中整个集群的无数据丢失,以及从库与主库数据保持一致。

主备库切换当需要对主库进行维护或需要滚动升级时,可以执行Switchover命令,实现主备库切换。如果存在多个备库,则需要先执行Choose Switchover命令,选出守护进程组中可以切换的备库。通过Choose Switchover命令选择可切换的备库需要一定的条件,具体内容如下。

(1)主库守护进程是Open状态。

(2)备库守护进程是Open状态。

(3)主库与备库的OPEN记录项内容相同,并且守护进程控制文件是Valid状态(内存值)。

(4)主库正常运行。

(5)备库正常运行。

(6)主库处于Open状态

(7)备库处于Open状态。

(8)主库到备库的归档是Valid状态。

主备切换操作流程

监视器首先通知待切换主备库的守护进程修改为 Switchover 状态,设置成功以后,其他监视器将不能再进行命令操作。守护进程收到监视器将实例 Mount 的命令,转发到本地实例执行,实例执行完成后返回执行结果。执行结果包含在实例向守护进程发送的消息中,守护进程根据消息中的执行码判断是否执行成功,并响应监视器

分析以上流程可知晓大致分为以下几个阶段

(1)将主备库的守护进程切换到SWITCHOVER状态,个人理解SWITCHOVER状态相当于一个快照状态,即主备切换前后是在一个独立的状态下进行,如果SWITCHOVER失败,可以回退到SWITCHOVER状态的时刻。

(2)将原主库DMSVR02切换到mount状态,使得不再产生新的relog日志。

(3)新主库开始执行SP_APPLY_KEEP_PKG()语句重演原主库的redolog的确保主备数据保持一致。

(4)主备模式之间的交换,原主库DMSVR02切换STANDBY模式,原主库DMSVR01切换PRAMARY模式。

(5)修改所有实例的归档状态为无效状态

(6)强制FORCE打开主库和备库。

(7)如果主库和备库打开成功,意味着切换成功,就无需回退,所以从守护进程的SWITCHOVER状态切换到OPEN状态

(8)守护进程中或者内存中还有原来主备的陈旧的信息,需要清理重新生成

(9)响应监视器返回执行成功

总结

Swithover命令完成后,主备库之间的数据是不完全同步的,要由新的主库的守护进程通过Recovery流程,重新同步数据到新的备库。Switchover命令会修改切换后主库守护进程INST_RECOVER_TIME的内存值为3s(默认为60s),确保尽快启动故障恢复流程,同步主库数据完成后,重新将归档设置为Valid状态。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服