网友通过本文主要向大家介绍了pgpool,pgpool ii,pgpool安装,pgpool 视频,postgresql pgpool等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
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进程