pgpool mysql_pgpool的健康检查和failover代码
健康檢查
通過創(chuàng)建到后端的連接實施健康檢查
main()
PgpoolMain()
processState = PERFORMING_HEALTH_CHECK;
do_health_check()
make_persistent_db_connection()
discard_persistent_db_connection()
如果連接創(chuàng)建失敗,會拋出異常,進(jìn)而跳轉(zhuǎn)到統(tǒng)一的異常處理點,如果超過重試次數(shù),將后端降級,并最終調(diào)用pgpool.conf配置文件里設(shè)置的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()的切換過程
再次確認(rèn)后端狀態(tài),如無效更新后端的backend_status為CON_DOWN
獲取第一個狀態(tài)正常的后端作為new_master
kill所有子進(jìn)程(這是基于pgpool做HA的一個很大的優(yōu)勢,可以可靠的切斷所有來自客戶端的連接,隔離故障節(jié)點)
對down掉的后端執(zhí)行pgpool.conf配置文件里設(shè)置的failover_command
如果down掉的是primary,搜索新的primary,即第一個"SELECT pg_is_in_recovery()"返回不是t的后端。
重啟所有子進(jìn)程
發(fā)送restart通知給worker進(jìn)程
通知PCP子進(jìn)程failover/failback完成
發(fā)送restart通知給pcp進(jìn)程
總結(jié)
以上是生活随笔為你收集整理的pgpool mysql_pgpool的健康检查和failover代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jq判断复选框是否被选中的3中方法
- 下一篇: 外文文献检索