在 Kubernetes 中管理高可用性

選取文件版本:

本頁說明如何啟用及測試 Kubernetes 型 AlloyDB Omni 資料庫叢集的高可用性 (HA)。執行本文所述工作時,您需要具備套用 Kubernetes 資訊清單檔案,以及使用 kubectl 指令列工具的基本知識。

總覽

您可以指示 AlloyDB Omni Kubernetes 運算子為主要資料庫執行個體建立待命副本,在資料庫叢集中啟用高可用性。AlloyDB Omni Operator 會設定資料庫叢集,持續更新這個副本上的資料,與主要執行個體上的所有資料變更保持一致。

啟用高可用性

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

  • 儲存兩份完整的資料副本
  • 並行執行的兩個資料庫執行個體的運算資源

如要啟用 HA,請按照下列步驟操作:

  1. 修改資料庫叢集的資訊清單,在 spec 區段下方加入 availability 區段。本節會設定 numberOfStandbys 參數,定義要新增的備援數量。

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    NUMBER_OF_STANDBYS 替換為要新增的待命節點數量。上限為 5。如果您要設定 HA,但不確定需要多少備援,請先將值設為 12

  2. 重新套用資訊清單。

停用高可用性

如要停用 HA,請按照下列步驟操作:

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

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

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

如要查看資料庫叢集目前的 HA 狀態,請檢查該叢集狀態的 HAReady 條件。如果這個值設為 status,則表示已設定高可用性,且資料庫叢集正在運作。True

如要在指令列中檢查這個值,請執行下列指令:

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

更改下列內容:

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

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

容錯移轉至待機執行個體

如果主要執行個體無法使用超過 90 秒,AlloyDB Omni Operator 會自動從主要資料庫執行個體容錯移轉至待命執行個體。

如果主要資料庫在備份完全更新前無法使用,即使可能遺失少量資料,您仍可選擇容錯移轉,從意外故障中快速復原並盡量縮短停機時間。

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

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

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

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

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

  4. AlloyDB Omni 運算子會建立新的待命副本。

停用自動容錯移轉

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

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

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

    spec:
      availability:
        enableAutoFailover: false
    
  2. 重新套用資訊清單。

觸發手動容錯移轉

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

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 運算子支援手動切換。

切換作業會導致下列事件依序發生:

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

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

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

執行切換作業

執行切換作業前,請確認下列事項:

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

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:要升級為新主資料庫的資料庫執行個體名稱。

    如要找出待命副本名稱,請執行下列指令: posix-terminal kubectl get instances.alloydbomni.internal.dbadmin.goog

將待命備用資源做為唯讀執行個體使用

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

  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