測試高可用性設定

選取文件版本:

確保高可用性 Patroni 設定的可靠性和品質,對於維持 AlloyDB Omni 資料庫持續運作,以及盡可能縮短停機時間至關重要。本頁面提供 Patroni 叢集測試的完整指南,涵蓋各種故障情境、複製一致性和容錯移轉機制。

測試 Patroni 設定

  1. 連線至任一 Patroni 執行個體 (alloydb-patroni1、alloydb-patroni2 或 alloydb-patroni3),然後前往 AlloyDB Omni Patroni 資料夾。

    cd /alloydb/
    
  2. 檢查 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
    

  3. 連線至任何執行 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 設定

  1. 在具備瀏覽器且可連上 HAProxy 節點網路的機器上,前往下列網址:http://haproxy:7000。或者,您也可以使用 HAProxy 執行個體的外部 IP 位址,而非主機名稱。

    您應該會看到類似下方的螢幕截圖。

    HAProxy 狀態頁面,顯示 Patroni 節點的健康狀態和延遲時間

    圖 1. HAProxy 狀態頁面,顯示 Patroni 節點的健康狀態和延遲時間。

    在 HAProxy 資訊主頁中,您可以查看主要 Patroni 節點 patroni1 和兩個副本 patroni2 和 patroni3 的健康狀態和延遲時間。

  2. 您可以執行查詢,查看叢集中的複製統計資料。透過 pgAdmin 等用戶端連線至 HAProxy,然後連線至主要資料庫伺服器,並執行下列查詢。

    SELECT
          pid, usename, application_name, client_addr, state, sync_state
    FROM
          pg_stat_replication;
    

    您應該會看到類似下圖的畫面,顯示 patroni2 和 patroni3 正在從 patroni1 串流。

    pg_stat_replication 輸出內容,顯示 Patroni 節點的複製狀態

    圖 2:pg_stat_replication 輸出內容,顯示 Patroni 節點的複製狀態。

測試自動容錯移轉

在本節中,我們會在三節點叢集中停止附加的 Patroni 容器,模擬主要節點發生中斷。您可以停止主要節點上的 Patroni 服務來模擬服務中斷,或強制執行一些防火牆規則來停止與該節點的通訊。

  1. 在主要 Patroni 執行個體上,前往 AlloyDB Omni Patroni 資料夾。

    cd /alloydb/
    
  2. 停止容器。

    docker compose down
    

    輸出內容應類似下方範例。這應該會驗證容器和網路是否已停止。

    [+] Running 2/2
    ✔ Container alloydb-patroni            Removed
    ✔ Network alloydbomni-patroni_default  Removed
    

  3. 重新整理 HAProxy 資訊主頁,查看容錯移轉的運作方式。

    HAProxy 資訊主頁顯示從主要節點容錯移轉至待命節點

    圖 3:HAProxy 資訊主頁,顯示從主要節點到待命節點的容錯移轉。

    patroni3 執行個體已成為新的主要執行個體,而 patroni2 是唯一剩餘的副本。先前的主要伺服器「patroni1」已停機,且健康狀態檢查未通過。

    Patroni 結合監控、共識和自動化調度管理功能,執行及管理容錯移轉。一旦主要節點未能在指定逾時時間內更新租約,或回報失敗,叢集中的其他節點就會透過共識系統辨識出這種情況。其餘節點會協調選取最合適的副本,並升級為新的主要副本。選取候選副本後,Patroni 會套用必要變更 (例如更新 PostgreSQL 設定,以及重新播放任何未處理的 WAL 記錄),將這個節點升級為主要節點。接著,新的主要節點會更新共識系統的狀態,其他副本則會重新設定,以遵循新的主要節點,包括切換複製來源,以及可能趕上任何新交易。HAProxy 會偵測新的主要執行個體,並據此重新導向用戶端連線,盡可能減少中斷。

  4. 從 pgAdmin 等用戶端,透過 HAProxy 連線至資料庫伺服器,並在容錯移轉後檢查叢集中的複製統計資料。

    SELECT
          pid, usename, application_name, client_addr, state, sync_state
    FROM
          pg_stat_replication;
    

    您應該會看到類似下圖的畫面,顯示目前只有 patroni2 正在串流。

    pg_stat_replication 輸出內容,顯示容錯移轉後 Patroni 節點的複製狀態

    圖 4. pg_stat_replication 輸出內容,顯示容錯移轉後 Patroni 節點的複製狀態。

  5. 三個節點的叢集可以再承受一次中斷。如果停止目前的主要節點 patroni3,系統會再次執行容錯移轉。

    HAProxy 資訊主頁,顯示從主要節點 `patroni3` 容錯移轉至待命節點 `patroni2`

    圖 5. HAProxy 資訊主頁顯示從主要節點 patroni3容錯移轉至待命節點 patroni2。

備用方案注意事項

備援是指在發生容錯移轉後,恢復先前來源節點的程序。一般來說,高可用性資料庫叢集不建議使用自動回復功能,因為這會導致多項重大問題,例如復原不完整、發生腦裂情境的風險,以及複製延遲。

在 Patroni 叢集中,如果您啟動模擬中斷的兩個節點,這些節點會以待命副本的形式重新加入叢集。

HAProxy 資訊主頁顯示「patroni1」和「patroni3」已還原為待命節點

圖 6:HAProxy 資訊主頁顯示 patroni1 和 patroni3 還原為待命節點。

現在,patroni1 和 patroni3 會從目前的主要執行個體 patroni2 複製資料。

pg_stat_replication 輸出內容,顯示容錯回復後 Patroni 節點的複製狀態

圖 7. pg_stat_replication 輸出內容,顯示備用 Patroni 節點的複製狀態。

如要手動還原為初始主要節點,可以使用 patronictl 指令列介面。選擇手動復原,可確保復原程序更可靠、一致且經過徹底驗證,維持資料庫系統的完整性和可用性。