pgpool的健康检查和failover代码

简介: 健康检查 通过创建到后端的连接实施健康检查 main() PgpoolMain() processState = PERFORMING_HEALTH_CHECK; do_health_check() make_...

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

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进程
相关文章
|
2月前
|
运维 负载均衡 监控
中间件故障转移(Failover)
【7月更文挑战第24天】
31 2
|
3月前
|
运维 负载均衡 监控
解析ProxySQL的故障转移机制
解析ProxySQL的故障转移机制
88 0
|
存储 Unix 关系型数据库
failover机制和NFS服务
failover机制和NFS服务
154 0
|
SQL 关系型数据库 MySQL
MySQL MGR集群单主模式的自动搭建和自动化故障修复
MySQL MGR集群单主模式的自动搭建和自动化故障修复/*the waiting game:尽管人生如此艰难,不要放弃;不要妥协;不要失去希望*/ 随着MySQL MGR的版本的升级以及技术成熟,在把MHA拉下神坛之后, MGR越来越成为MySQL高可用的首选方案。
1242 0
|
关系型数据库 MySQL 网络协议
Galera Cluster中节点异常宕机排查
背景 在Group Replication发布之前,MySQL官方复制有异步、半同步。当时弥补全同步的方案,大多数公司会选择Galera cluster,主要有percona server的PXC和MariaDB的MGC两种版本,而且都嵌入到各自的版本中。
2776 0
|
Shell
高可用检测脚本failover.sh
#!/bin/sh VIP="10.0.0.1" DEV="eth0" healthcheck(){ ping -c 1 -w 1 $VIP >/dev/null return $? } ip_takeover(){ MAC=`ip link sho...
1139 0
|
关系型数据库 MySQL 数据中心
|
网络协议 关系型数据库 MySQL