在 Kubernetes 中管理高可用性

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

概览

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

启用高可用性

在数据库集群中启用高可用性之前,请确保您的 Kubernetes 集群满足以下条件:

  • 可用于两个完整数据副本的存储空间
  • 并行运行的两个数据库实例所需的计算资源

如需启用高可用性,请按以下步骤操作:

  1. 修改数据库集群的清单,使其 spec 部分下包含 availability 部分。本部分通过设置 numberOfStandbys 参数,来定义您要添加的备用设备数量。

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    NUMBER_OF_STANDBYS 替换为您要添加的备用设备数量。最大值为 5。如果您要设置高可用性,但不确定需要多少个备用设备,请先将值设置为 12

  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: 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