程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> pgpool的健康檢查和failover代碼

pgpool的健康檢查和failover代碼

編輯:關於PHP編程

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()的切換過程

  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進程

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved