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進程
總結
以上是生活随笔為你收集整理的pgpool mysql_pgpool的健康检查和failover代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jq判断复选框是否被选中的3中方法
- 下一篇: SQL Server 数据恢复