在 Kubernetes 中管理高可用性

本頁面說明如何啟用及測試 Kubernetes AlloyDB Omni 資料庫叢集的高可用性 (HA)。本文假設您具備套用 Kubernetes 資訊清單檔案和使用 kubectl 指令列工具的基本知識。

總覽

如要在資料庫叢集啟用高可用性,請設定 AlloyDB Omni Kubernetes 運算子,建立主要資料庫執行個體的待命副本。AlloyDB Omni operator 會設定資料庫叢集,持續更新這個副本上的資料,並比對主要執行個體上的所有資料變更。

您也可以在已啟用 TDE 的資料庫叢集中啟用高可用性。如要進一步瞭解如何建立已啟用 TDE 的叢集,請參閱「建立已啟用 TDE 的叢集」。

啟用高可用性

在資料庫叢集啟用高可用性之前,請確認 Kubernetes 叢集符合下列條件:

  • 可儲存兩份完整資料

  • 兩個資料庫執行個體並行運作的運算資源

如要啟用高可用性,請按照下列步驟操作:

  1. 修改資料庫叢集的資訊清單,在 spec 區段下方加入 availability 區段。這個部分使用 numberOfStandbys 參數指定要新增的待命執行個體數量。

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    將 NUMBER_OF_STANDBYS 替換為要新增的待命節點數量。最大值為 5。如果不確定需要的待命數量,請先將值設為 1 或 2。

  2. 重新套用資訊清單。

停用高可用性

如要停用高可用性,請按照下列步驟操作:

  1. 在叢集的資訊清單中,將 numberOfStandbys 設為 0:

    spec:
      availability:
        numberOfStandbys: 0
    
  2. 重新套用資訊清單。

驗證資料庫叢集的高可用性

如要查看資料庫叢集的高可用性狀態,請檢查其 HAReady 狀態。如果 HAReady 的狀態為 True,表示高可用性已啟用,且在叢集上運作。如果是 False,則表示已啟用,但尚未準備就緒,因為正在設定中。

如要使用 kubectl 指令列查看 HAReady 狀態,請執行下列指令:

kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACE

更改下列內容:

  • DB_CLUSTER_NAME:資料庫叢集的名稱。

  • NAMESPACE:資料庫叢集的命名空間。

容錯移轉至待命執行個體

如果主要執行個體在可設定的時間內無法使用,AlloyDB Omni operator 會自動從主要資料庫執行個體容錯移轉至待命執行個體。下列參數會決定何時啟動自動容錯移轉:

  • 健康狀態檢查間隔 (預設為 30 秒)

  • 連續健康狀態檢查失敗次數 (預設為 3)

如果連續失敗的健康狀態檢查次數達到指定數量,且每次失敗的健康狀態檢查之間的時間間隔達到指定時間,系統就會啟動自動容錯移轉。如果保留預設值,則在連續 3 次健康狀態檢查失敗 (每次間隔 30 秒) 後,系統會自動容錯移轉。

如要快速從非預期故障中復原,並盡可能縮短停機時間,手動容錯移轉是很好的選擇。

AlloyDB Omni operator 支援自動和手動容錯移轉。自動容錯移轉功能預設為啟用。

容錯移轉會導致下列事件順序:

  1. AlloyDB Omni operator 會將主要資料庫執行個體離線。

  2. AlloyDB Omni operator 會將待命副本升級為新的主要資料庫執行個體。

  3. AlloyDB Omni operator 會刪除先前的主要資料庫執行個體。

  4. AlloyDB Omni operator 會建立新的待命副本。

停用自動容錯移轉

資料庫叢集預設會啟用自動容錯移轉功能。

如要停用自動容錯移轉功能,請按照下列步驟操作:

  1. 在叢集的資訊清單中,將 enableAutoFailover 設為 false:

    spec:
      availability:
        enableAutoFailover: false
    

調整自動容錯移轉觸發條件設定

您可以透過設定,調整每個資料庫叢集的自動容錯移轉。

AlloyDB Omni operator 會定期對主要資料庫執行個體和所有待命副本執行健康狀態檢查。健康狀態檢查的預設頻率為 30 秒。如果執行個體達到自動容錯移轉觸發門檻,AlloyDB Omni operator 就會觸發自動容錯移轉。

門檻值是指觸發容錯移轉前,健康狀態檢查連續失敗的次數。如要變更健康狀態檢查週期或門檻值,請在叢集的資訊清單中,將 healthcheckPeriodSeconds 和 autoFailoverTriggerThreshold 欄位設為整數值:

spec:
  availability:
    healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
    autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD

更改下列內容:

  • HEALTHCHECK_PERIOD:整數值,表示每次健康狀態檢查之間的等待秒數。預設值為 30。最小值為 4,最大值為 86400 (相當於 24 小時)。

  • AUTOFAILOVER_TRIGGER_THRESHOLD:整數值,代表觸發容錯移轉前,健康狀態檢查連續失敗的次數。預設值為 3。最小值為 0。沒有最大值。如果這個欄位設為 0,系統會改用預設值 3。

觸發手動容錯移轉

如要觸發手動容錯移轉,請建立並套用新容錯移轉資源的資訊清單:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
  name: FAILOVER_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME

更改下列內容:

  • FAILOVER_NAME:這項資源的名稱,例如 failover-1。

  • NAMESPACE:這個容錯移轉資源的命名空間,必須與適用的資料庫叢集命名空間相符。

  • DB_CLUSTER_NAME:要容錯移轉的資料庫叢集名稱。

如要監控容錯移轉,請執行下列指令:

kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE

更改下列內容:

  • FAILOVER_NAME:建立容錯移轉資源時指派的名稱。

  • NAMESPACE:資料庫叢集的命名空間。

新的主要資料庫執行個體可供使用後,指令會傳回 Success。如要監控新待命執行個體的狀態,請參閱下一節。

切換至待命執行個體

如要測試災難復原設定,或執行任何其他需要切換主要資料庫和待命副本角色的計畫活動,請執行切換作業。

切換完成後,複製方向以及主要資料庫執行個體和待命副本的角色會反轉。使用切換功能,即可進一步控管災難復原設定測試,且不會遺失資料。

AlloyDB Omni operator 支援手動切換。切換作業會依序執行下列事件:

  1. AlloyDB Omni operator 會將主要資料庫執行個體離線。

  2. AlloyDB Omni operator 會將待命副本升級為新的主要資料庫執行個體。

  3. AlloyDB Omni 運算子會將先前的主要資料庫執行個體切換為待命副本。

執行切換

開始切換前,請先完成下列事項:

如要執行切換,請建立並套用新切換資源的資訊清單:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
    name: SWITCHOVER_NAME
spec:
     dbclusterRef: DB_CLUSTER_NAME
     newPrimary: STANDBY_REPLICA_NAME

更改下列內容:

  • SWITCHOVER_NAME:這個切換資源的名稱,例如 switchover-1。

  • DB_CLUSTER_NAME:要套用切換作業的主要資料庫執行個體名稱。

  • STANDBY_REPLICA_NAME:要升級為新主要執行個體的資料庫執行個體名稱。

    如要找出待命副本名稱,請執行下列指令:

    kubectl get instances.alloydbomni.internal.dbadmin.goog

自動修復待命執行個體

如果待命執行個體無法使用,AlloyDB Omni operator 會刪除舊的待命副本,並建立新的待命副本來取代,藉此修復執行個體。觸發自動修復的預設時間為 90 秒。

自動修復資料庫叢集,有助於維持主要資料庫的健康狀態,並持續複製。

停用自動修復執行個體

根據預設,資料庫叢集會自動啟用待命執行個體修復功能。

如要停用自動修復功能,請按照下列步驟操作:

  1. 在叢集的資訊清單中,將 enableAutoHeal 設為 false:

    spec:
      availability:
        enableAutoHeal: false
    

調整自動修復觸發條件設定

您可以透過設定,調整每個資料庫叢集的自動修復功能。

AlloyDB Omni operator 會定期執行健康狀態檢查,您可以自行設定。詳情請參閱「調整自動容錯移轉觸發條件設定」。如果待命副本達到自動修復觸發門檻,AlloyDB Omni operator 就會觸發自動修復。

門檻值是指健康狀態檢查連續失敗幾次後,會觸發修復作業。如要變更門檻值,請在叢集的資訊清單中設定 autoHealTriggerThreshold:

spec:
  availability:
    autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD

更改下列內容:

  • AUTOHEAL_TRIGGER_THRESHOLD:整數值,代表觸發修復前,健康狀態檢查連續失敗的次數。預設值為 5。由於待命健康狀態檢查可能發生暫時性的一次性錯誤,因此最小值為 2。

排解執行個體修復問題

如果您在單一 Kubernetes 叢集中使用大量資料庫叢集,或資料庫叢集的佈建不足,自動修復功能可能會導致 AlloyDB Omni operator 或資料庫叢集無法使用。如果收到開頭為 HealthCheckProber: health check for instance failed 的錯誤訊息,且錯誤訊息提及逾時或連線失敗,請嘗試下列建議修正方式:

以下是自動修復功能過載可能導致的錯誤範例。這些範例省略了環境詳細資料,可協助您找出錯誤來源,例如叢集名稱或 IP 位址。

  • HealthCheckProber: health check for instance failed" err="DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context deadline exceeded...

  • HealthCheckProber: health check for instance failed" err="rpc error: code = Code(10303) desc = DBSE0303: Healthcheck: Health check table query failed. dbdaemon/healthCheck: read healthcheck table: timeout...

  • HealthCheckProber: health check for instance failed" err="rpc error: code = Code(12415) desc = DBSE2415: Postgres: failed to connect to database. dbdaemon/healthCheck: failed to connect...

將待命副本做為唯讀執行個體

如要將待命副本做為唯讀執行個體,請完成下列步驟:

  1. 在資料庫叢集的資訊清單中,將 enableStandbyAsReadReplica 設為 true:

    spec:
      availability:
        enableStandbyAsReadReplica: true
    
  2. 重新套用資訊清單。

  3. 確認唯讀端點顯示在 DBCluster 物件的 status 欄位中:

    kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAME

    以下範例回應顯示唯讀執行個體的端點:

    Status:
    [...]
    Primary:
      [...]
      Endpoints:
        Name: Read-Write
        Value: 10.128.0.81:5432
        Name: Read-Only
        Value: 10.128.0.82:5432
    

後續步驟