確保高可用性 Patroni 設定的可靠性和品質,對於維持 AlloyDB Omni 資料庫持續運作,以及盡可能縮短停機時間至關重要。本頁面提供 Patroni 叢集測試的完整指南,涵蓋各種故障情境、複製一致性和容錯移轉機制。
測試 Patroni 設定
連線至任一 Patroni 執行個體 (
alloydb-patroni1、alloydb-patroni2或alloydb-patroni3),然後前往 AlloyDB Omni Patroni 資料夾。cd /alloydb/
檢查 Patroni 記錄。
docker compose logs alloydbomni-patroni
最後幾筆項目應會反映 Patroni 節點的相關資訊。您應該會看到類似下方的內容。
alloydbomni-patroni | 2024-06-12 15:10:29,020 INFO: no action. I am (patroni1), the leader with the lock alloydbomni-patroni | 2024-06-12 15:10:39,010 INFO: no action. I am (patroni1), the leader with the lock alloydbomni-patroni | 2024-06-12 15:10:49,007 INFO: no action. I am (patroni1), the leader with the lock
連線至任何執行 Linux 的執行個體,該執行個體必須與主要 Patroni 執行個體
alloydb-patroni1建立網路連線,並取得執行個體的相關資訊。您可能需要執行sudo apt-get install jq -y安裝jq工具。curl -s http://alloydb-patroni1:8008/patroni | jq .
您應該會看到類似下方的內容。
{ "state": "running", "postmaster_start_time": "2024-05-16 14:12:30.031673+00:00", "role": "master", "server_version": 150005, "xlog": { "location": 83886408 }, "timeline": 1, "replication": [ { "usename": "alloydbreplica", "application_name": "patroni2", "client_addr": "10.172.0.40", "state": "streaming", "sync_state": "async", "sync_priority": 0 }, { "usename": "alloydbreplica", "application_name": "patroni3", "client_addr": "10.172.0.41", "state": "streaming", "sync_state": "async", "sync_priority": 0 } ], "dcs_last_seen": 1715870011, "database_system_identifier": "7369600155531440151", "patroni": { "version": "3.3.0", "scope": "my-patroni-cluster", "name": "patroni1" } }
在 Patroni 節點上呼叫 Patroni HTTP API 端點,會公開 Patroni 管理的特定 PostgreSQL 執行個體狀態和設定的各種詳細資料,包括叢集狀態資訊、時間軸、WAL 資訊,以及指出節點和叢集是否正常運作的健康狀態檢查。
測試 HAProxy 設定
在具備瀏覽器且可連上 HAProxy 節點網路的機器上,前往下列網址:
http://haproxy:7000。或者,您也可以使用 HAProxy 執行個體的外部 IP 位址,而非主機名稱。您應該會看到類似下方的螢幕截圖。

圖 1. HAProxy 狀態頁面,顯示 Patroni 節點的健康狀態和延遲時間。
在 HAProxy 資訊主頁中,您可以查看主要 Patroni 節點
patroni1和兩個副本patroni2和patroni3的健康狀態和延遲時間。您可以執行查詢,查看叢集中的複製統計資料。透過 pgAdmin 等用戶端連線至 HAProxy,然後連線至主要資料庫伺服器,並執行下列查詢。
SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;您應該會看到類似下圖的畫面,顯示
patroni2和patroni3正在從patroni1串流。
圖 2:pg_stat_replication 輸出內容,顯示 Patroni 節點的複製狀態。
測試自動容錯移轉
在本節中,我們會在三節點叢集中停止附加的 Patroni 容器,模擬主要節點發生中斷。您可以停止主要節點上的 Patroni 服務來模擬服務中斷,或強制執行一些防火牆規則來停止與該節點的通訊。
在主要 Patroni 執行個體上,前往 AlloyDB Omni Patroni 資料夾。
cd /alloydb/
停止容器。
docker compose down
輸出內容應類似下方範例。這應該會驗證容器和網路是否已停止。
[+] Running 2/2 ✔ Container alloydb-patroni Removed ✔ Network alloydbomni-patroni_default Removed
重新整理 HAProxy 資訊主頁,查看容錯移轉的運作方式。

圖 3:HAProxy 資訊主頁,顯示從主要節點到待命節點的容錯移轉。
patroni3執行個體已成為新的主要執行個體,而patroni2是唯一剩餘的副本。先前的主要伺服器「patroni1」已停機,且健康狀態檢查未通過。Patroni 結合監控、共識和自動化調度管理功能,執行及管理容錯移轉。一旦主要節點未能在指定逾時時間內更新租約,或回報失敗,叢集中的其他節點就會透過共識系統辨識出這種情況。其餘節點會協調選取最合適的副本,並升級為新的主要副本。選取候選副本後,Patroni 會套用必要變更 (例如更新 PostgreSQL 設定,以及重新播放任何未處理的 WAL 記錄),將這個節點升級為主要節點。接著,新的主要節點會更新共識系統的狀態,其他副本則會重新設定,以遵循新的主要節點,包括切換複製來源,以及可能趕上任何新交易。HAProxy 會偵測新的主要執行個體,並據此重新導向用戶端連線,盡可能減少中斷。
從 pgAdmin 等用戶端,透過 HAProxy 連線至資料庫伺服器,並在容錯移轉後檢查叢集中的複製統計資料。
SELECT pid, usename, application_name, client_addr, state, sync_state FROM pg_stat_replication;您應該會看到類似下圖的畫面,顯示目前只有
patroni2正在串流。
圖 4. pg_stat_replication 輸出內容,顯示容錯移轉後 Patroni 節點的複製狀態。
三個節點的叢集可以再承受一次中斷。如果停止目前的主要節點
patroni3,系統會再次執行容錯移轉。
圖 5. HAProxy 資訊主頁顯示從主要節點
patroni3容錯移轉至待命節點patroni2。
備用方案注意事項
備援是指在發生容錯移轉後,恢復先前來源節點的程序。一般來說,高可用性資料庫叢集不建議使用自動回復功能,因為這會導致多項重大問題,例如復原不完整、發生腦裂情境的風險,以及複製延遲。
在 Patroni 叢集中,如果您啟動模擬中斷的兩個節點,這些節點會以待命副本的形式重新加入叢集。

圖 6:HAProxy 資訊主頁顯示 patroni1 和 patroni3 還原為待命節點。
現在,patroni1 和 patroni3 會從目前的主要執行個體 patroni2 複製資料。

圖 7. pg_stat_replication 輸出內容,顯示備用 Patroni 節點的複製狀態。
如要手動還原為初始主要節點,可以使用 patronictl 指令列介面。選擇手動復原,可確保復原程序更可靠、一致且經過徹底驗證,維持資料庫系統的完整性和可用性。