pgpool mysql_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()的切换过程

再次确认后端状态,如无效更新后端的backend_status为CON_DOWN

获取第一个状态正常的后端作为new_master

kill所有子进程(这是基于pgpool做HA的一个很大的优势,可以可靠的切断所有来自客户端的连接,隔离故障节点)

对down掉的后端执行pgpool.conf配置文件里设置的failover_command

如果down掉的是primary,搜索新的primary,即第一个"SELECT pg_is_in_recovery()"返回不是t的后端。

重启所有子进程

发送restart通知给worker进程

通知PCP子进程failover/failback完成

发送restart通知给pcp进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值