主库故障后立即重启,此时主库的守护进程Q变成Starup状态,重新进入守护进程的启动流程,将数据一致的备库归档设置为有效状态,其余备库归档设置成无效状态,并重新Open主库。Open成功后继续作为主库,当检测到归档状态无效的备库正常时会启动Recovery处理流程,重新同步主备库数据。
备库产生故障(硬件故障或者内部网卡故障)时,主库的处理流程对手动切换、自动切换模式处理上有些差异。
对于手动切换模式,检测到备库故障,满足Failover条件时,库的守护进程立即切换到Failover状态,执行对应的故障处理,如果不满足切换Failover 条件,则保持 当前状态不变。
手动切换模式下,主库守护进程切换Failover条件:
1.备库实例故障,或者主备库之间出现网络故障,或者备库重时校验LSN不匹配
这三种场景下引发主库同步日志到备库失败挂起,主库实例处Suspend状态
2.主库到此备库的归档状态是Valid(读写分离集群没有此限制)
3.主库的守护进程处于Startup、Open或Recoverya状态
4.当前没有监视器命令正在执行
对于自动切换模式,主库的守护进程会自动判断切换到 Failover 状态或者 Confirm 确认状态,如果两种状态切换条件都不满足,则保持当前状态不变。
自动切换模式下,主库守护进程不进入 Confirm 确认状态,直接切换到Failover 条件:
1.前四项条件,和上面列出的手动切换条件相同
2.备库实例故障,备库守护进程正常
如果只满足条件1,不满足条件2,则主库守护进程会先进入 Confirm 确认状态,等待确认监视器的确认消息。主库的守护进程进入Confirm 确认状态后,会有下面几种不同
1.主库和确认监视器之间网络连接正常
主库的守护进程收到了确认监视器返回的确认消息,如果确认监视器认定可以执行 Faiover,则主库的守护进程会切换为 Failover 状态并执行对应的处理;如果确认监视器认定不满足执行 Failover 条件,则主库的守护进程会一直保持在 Confrm 状态。确认监视器认定主库可以执行 Failover 条件:
1)主库守护进程处于 Confirm 状态
2)主库实例正常,处于 Suspend 状态
3)主库没有被接管,不存在其他主库
4)没有 takeover/switchover 命令在执行
5)当前所有归档有效的备库均可以加入主库
2.主库和确认监视器之间网络连接异常,或者没有启动确认监视器。满足下条件后,主库允许切换至 Fallover 状态执行故障处理:
1)主库实例正常,处于 Suspend 状态
2)备库守护进程正常
3)主库没有被接管,不存在其他主库
4)没有 takeover/switchover 命令正在执行
5)备库故障前可以加入主库
3.主库和确认监视器网络恢复正常后,主库已经被接管。老主库的守护进程切换为 Starup 状态,重新判断是否可加入新主库。 主库守护进程进入 Failover 状态后的执行流程(自动或手动切换模式下执行流程相同)
1)对实时主备或 MPP 主备,通知主库修改发送归档失败的备库归档状态无效
2)通知主库重新 Open。
3)将主库的守护进程切换为 Open 状态
文章
阅读量
获赞