人大金仓数据库KingbaseES repmgr-02-集群故障节点恢复流程

关键字:KingbaseES、人大金仓、集群故障

1.1、对失效节点的自动恢复流程图:(备库恢复由主库的repmgrd来实现)

主机repmgrd服务监控到节点失效后,会对失效的节点执行自动恢复。如下是备机节点的恢复流程图。

故障节点恢复代码主要流程:

  • main():repmgrd启动时候的主函数
    • MonitorLoop():监控的Loop函数,在该函数中才最终确定监控的模式是primary、standby还是witness
      • MonitorStreamingPrimary():根据数据库节点角色在while中选择合适的监控函数(此处角色是primary)
        • while中不断循环监控节点状态:在特定的监控模式下循环监控节点,监控的主要逻辑在该函数中
        • CheckOtherNodes():检查其它standby的存活状态,每一轮的监控都会检查本地节点与其它节点的状态。
          • pthread_create():如果发现有standby节点出现故障,创建线程去恢复故障的节点
          • AutoRecoveryThreadMain():线程执行恢复的主函数

RecoveryFailedNode():恢复故障的节点

DoRemoteCommand():在故障服务器上执行具体的恢复命令,真正对故障节点进行恢复

1.2、主机故障后的自动故障恢复

备机repmgrd服务持续监控主机数据库的状态,主机故障后可自动完成故障的转移。每个节点的repmgrd之间是没有通信的,服务监控的对象是Kingbase实例。执行主节点的故障恢复由kbha第三方守护进程来实现。

故障主节点恢复代码主要流程:

  • main():kbha的函数入口:对命令进行解析后,根据action的类型调用switch对应的函数
    • KbhaActionRunningDaemon():该函数对应的action是KBHA_DAEMON,即守护模式
      • while中进行循环守护的监控
      • IsKESRunning():判断节点primary是否还存活,如果故障则执行恢复
      • RecoveryClusterOnAllFails():执行故障节点的恢复,仅恢复故障的primary节点
        • StartDatabase():启动本地的数据库,和恢复standby节点不同,不需要连接到远程服务器后再执行恢复操作。

总结:需要注意的是,standby节点的故障恢复是由primary节点服务器上的repmgrd守护进程来实现,而primary节点的故障是由kbha第三方守护进程来实现。在kbha监控的每一轮循环中,都会去尝试启动repmgrd(启动的时候会检测该进程是否存在,如果不存在则启动,否则直接返回)。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值