在 Kubernetes 中管理高可用性

選取說明文件版本:

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

總覽

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

啟用高可用性

在資料庫叢集上啟用高可用性之前,請確認 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 條件。如果這個值的 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 Operator 會將主要資料庫執行個體離線。

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

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

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

停用自動容錯移轉

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

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

  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 Operator 支援手動切換。

切換作業會依序執行下列事件:

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

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

  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