配置高可用性

高可用性配置的目的是当数据库集群实例不可用时减少停机时间。当实例内存不足时,可能会发生这种情况。借助高可用性,您的数据可以继续供客户端应用使用。

在站点内,该配置由主实例和备用副本组成。在事务被报告为已提交之前,对主实例执行的所有写入操作都会复制到备用副本。如果主实例不可用,GDC 会自动将备用副本提升为新的主实例。然后,应用流量会被重新路由到新的主实例。此过程称为故障切换。

在主实例上连续 3 次健康检查失败(每次间隔 30 秒)后,系统会启动自动故障切换。

GDC 同时支持自动故障切换和手动故障切换。自动故障切换默认处于启用状态,您可以根据需要停用自动故障切换。您还可以随时手动触发故障切换,以从意外故障中恢复并尽可能缩短停机时间。

故障切换涉及以下过程(按顺序):

  1. GDC 会使主实例离线。

  2. GDC 会将备用副本转换为新的活跃数据库集群。

  3. GDC 会删除之前处于活跃状态的数据库集群。

  4. GDC 会创建一个新的备用副本。

更新现有集群

您可以更新现有数据库集群的高可用性设置:

控制台

  1. 在导航菜单中,选择数据库服务。

  2. 在数据库集群列表中,点击要更新的数据库集群。

  3. 在高可用性部分中选择修改 修改。

    修改数据库集群的高可用性设置。

  4. 选择启用同可用区备用实例,以开启或关闭与主数据库集群位于同一可用区的备用实例的可用性。

  5. 点击保存。

  6. 在数据库集群列表的高可用性列中查看数据库集群的状态,验证其是否反映了高可用性更新。

gdcloud

  1. 更新数据库集群的高可用性配置:

    gdcloud database clusters update CLUSTER_NAME \
        --availability-type HA_TYPE
    

    替换以下内容:

    • CLUSTER_NAME:数据库集群的名称。
    • HA_TYPE:数据库集群的高可用性级别。您可以设置 zonal 或 zonal_ha。默认情况下会设置 zonal 值。
  2. 验证数据库集群是否反映了高可用性更新:

    gdcloud database clusters list
    

API

  1. 更新数据库集群的高可用性配置:

      kubectl patch dbcluster.postgresql.dbadmin.gdc.goog DBCLUSTER_NAME \
        -n USER_PROJECT \
        -p '{"spec": {"availability": {"enableHighAvailability": HA_ENABLED}}}' \
        --type=merge
    

    执行以下变量替换操作:

    • DBCLUSTER_NAME:数据库集群的名称。
    • USER_PROJECT:在其中创建了数据库集群的用户项目的名称。
    • HA_ENABLED:数据库集群的高可用性级别。您可以设置 true 或 false。默认情况下,系统会设置 false 值。
  2. 验证数据库集群是否反映了高可用性更新:

    kubectl get dbcluster.DBENGINE_NAME.dbadmin.gdc.goog DBCLUSTER_NAME \
      -n USER_PROJECT \
      -o yaml
    

迁移到最新的高可用性实现

如需验证高可用性数据库集群是否使用的是最新实现,请检查高可用性数据库集群 CR 上是否存在注解 dbcluster.dbadmin.goog/raasEnabled。此注解只会显示在使用新实现的集群上。如果您没有此注解,可以启用它,并按照以下步骤迁移集群:

  1. 请与您的基础设施运维人员确认,您的 GDC 环境已升级到 1.15.1 或更高版本。
  2. 为数据库集群停用高可用性。等待 HAReady 状态消失,然后重新启用高可用性。
  3. 看到 HAReady in progress 或 HAReady setup complete 后,请检查数据库集群 CR 是否有注解 dbcluster.dbadmin.goog/raasEnabled。如果显示,则表示您的数据库集群已成功迁移。

触发故障切换

如果您已为数据库集群配置高可用性,则可以触发故障切换。如需触发故障切换,请完成以下步骤:

控制台

  1. 在导航菜单中,选择数据库服务。

  2. 在数据库集群列表中,点击要触发故障切换的数据库集群。您的数据库集群必须启用高可用性,才能进行故障切换。

  3. 点击故障切换。

  4. 输入集群的 ID 作为确认短语,然后点击故障切换以触发故障切换过程。

gdcloud

触发数据库集群的故障切换:

gdcloud database clusters failover CLUSTER_NAME

将 CLUSTER_NAME 替换为数据库集群的名称。

API

  apiVersion: fleet.dbadmin.gdc.goog/v1
  kind: Failover
  metadata:
    name: FAILOVER_NAME
    namespace: USER_PROJECT
  spec:
    dbclusterRef: DBCLUSTER_NAME

执行以下变量替换操作:

  • DBCLUSTER_NAME:数据库集群的名称。
  • USER_PROJECT:在其中创建了数据库集群的用户项目的名称。
  • FAILOVER_NAME,故障切换的唯一名称,例如 failover-sample。

停用自动故障切换

自动故障切换在高可用性数据库集群上默认处于启用状态。

如需停用自动故障切换,请在数据库集群的清单中将 enableAutoFailover 设置为 false:

spec:
  availability:
    enableAutoFailover: false

如需使用 API 更新现有数据库集群的自动故障切换配置,请运行以下命令:

kubectl patch dbcluster.postgresql.dbadmin.gdc.goog DBCLUSTER_NAME \
  -n USER_PROJECT \
  -p '{"spec": {"availability": {"enableAutoFailover": AUTO_FAILOVER_ENABLED}}}' \
  --type=merge

执行以下变量替换操作:

  • DBCLUSTER_NAME:数据库集群的名称。
  • USER_PROJECT:在其中创建了数据库集群的用户项目的名称。
  • AUTO_FAILOVER_ENABLED:数据库集群的自动故障切换设置。您可以设置 true 或 false。默认情况下会设置 true 值。