pgpool的健康检查和failover代码

健康检查
通过创建到后端的连接实施健康检查

main()
  PgpoolMain()
    processState = PERFORMING_HEALTH_CHECK;
      do_health_check()
        make_persistent_db_connection()
          discard_persistent_db_connection() 

如果连接创建失败,会抛出异常,进而跳转到统一的异常处理点,如果超过重试次数,将后端降级,并最终调用pgpool.conf配置文件里设置的failover_command。

main()
  PgpoolMain()
    if(processState == PERFORMING_HEALTH_CHECK)
      process_backend_health_check_failure()
        degenerate_backend_set(&health_check_node_id,1)
          degenerate_backend_set_ex()
            register_node_operation_request(NODE_DOWN_REQUEST)
              failover()
                trigger_failover_command() 

failover()的切换过程

  1. 再次确认后端状态,如无效更新后端的backend_status为CON_DOWN
  2. 获取第一个状态正常的后端作为new_master
  3. kill所有子进程(这是基于pgpool做HA的一个很大的优势,可以可靠的切断所有来自客户端的连接,隔离故障节点)
  4. 对down掉的后端执行pgpool.conf配置文件里设置的failover_command
  5. 如果down掉的是primary,搜索新的primary,即第一个"SELECT pg_is_in_recovery()"返回不是t的后端。
  6. 重启所有子进程
  7. 发送restart通知给worker进程
  8. 通知PCP子进程failover/failback完成
  9. 发送restart通知给pcp进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值