在 Kubernetes 中管理高可用性

本页介绍了如何在基于 Kubernetes 的 AlloyDB Omni 数据库集群上启用和测试高可用性 (HA)。若要执行本文档中记录的任务,您需要具备有关应用 Kubernetes 清单文件和使用 kubectl 命令行工具的基本知识。

概览

您可以指示 AlloyDB Omni Kubernetes Operator 创建主数据库实例的待机副本,以便在数据库集群中启用高可用性。AlloyDB Omni Operator 会将您的数据库集群配置为持续更新此副本上的数据,以匹配主实例上数据的所有更改。

启用高可用性

在对数据库集群启用 HA 之前,请确保您的 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. 重新应用清单。

验证数据库集群的高可用性

如需查看数据库集群的当前高可用性状态,请检查该集群状态的 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 运算符会将之前的主数据库实例切换为备用副本。

执行切换

在执行切换操作之前,请确保满足以下条件:

如需执行切换,请为新的切换资源创建并应用清单:

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

替换以下内容:

  • SWITCHOVER_NAME:此切换资源的名称,例如 switchover-1

  • DB_CLUSTER_NAME:切换操作应用的主数据库实例的名称。

  • STANBDY_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