在 Kubernetes 上为 AlloyDB Omni 执行次要数据库版本升级

选择文档版本:

本页面介绍了如何在 Kubernetes 上为 AlloyDB Omni 执行数据库次要版本升级。

如需执行数据库次要版本升级,有两个选项可以选择:

  • 低停机时间升级:对于运行 AlloyDB Omni 15.7.1 版或更高版本的高可用性 (HA) 环境,AlloyDB Omni 会先升级备用实例。然后,AlloyDB Omni 操作器会执行切换,将其中一个升级的备用实例提升为新的主实例。切换成功后,旧的主实例会更新。

    此过程可确保在升级期间将停机时间降至最短。

  • 同步升级:在所有其他情况下,AlloyDB Omni 操作器会同时升级所有实例。这意味着您会在升级期间遇到停机时间。

限制

对于低停机时间升级,任何给定时间都有一个备用实例不可用。为确保数据库集群不会达到零恢复点目标 (RPO),也不会面临丢失数据的风险,数据库集群必须有一个主实例和至少两个备用实例。

准备工作

  • 如果您的集群是高可用性集群,并且 AlloyDB Omni 版本低于 15.7.1,请先按照更新数据库集群中列出的步骤操作,然后再按照此次要版本升级流程操作。
  • 确定流量较低的时段,以便执行次要版本升级。
  • 为避免任何数据丢失,请备份数据

启用低停机时间的次要数据库版本升级流程

如需启用低停机时间的次要数据库版本升级流程,请向数据库集群添加以下注释。

kubectl annotate dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME
dbcluster.dbadmin.goog/enableLDTM=true

执行以下变量替换操作:

  • DB_CLUSTER_NAME:您的数据库集群的名称。 这是您在创建数据库集群时提供的同一个名称。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni

升级 AlloyDB Omni 版本

如需升级 16.8.0 版本,请更新集群清单文件中的 databaseVersioncontrolPlaneAgentsVersion 字段,然后重新应用该文件。

以下是清单文件的开头部分,其中指定 databaseVersion 为 16.8.0 版,而 controlPlaneAgentsVersion 为 1.5.0 版:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
    name: DB_CLUSTER_NAME
spec:
    databaseVersion: "16.8.0"
    controlPlaneAgentsVersion: "1.5.0"
...

执行以下变量替换操作:

  • DB_CLUSTER_NAME:您的数据库集群的名称。 这是您在创建数据库集群时提供的同一个名称。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni

监控升级流程

更新清单文件后,AlloyDB Omni 操作器会启动升级流程。如需监控升级流程,请检查 DBCUpgradeInProgress 条件。

kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o yaml | yq '.status.conditions[] | select(.type == "DBCUpgradeInProgress")'

执行以下变量替换操作:

  • DB_CLUSTER_NAME:您的数据库集群的名称。 这是您在创建数据库集群时提供的同一个名称。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni

在流程进行期间,状态为 true。流程完成后,相应条件的状态会更改为 false

问题排查

如果您在升级过程中收到任何失败消息,请参阅以下部分:

升级前失败

如果您在数据库集群上收到升级前失败消息,请检查该消息并相应地解决问题。

如果您想绕过升级前失败消息,可以启用 force-upgrade 注释。

kubectl annotate dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME upgrade.alloydbomni.dbadmin.google/force-upgrade=true

执行以下变量替换操作:

  • DB_CLUSTER_NAME:您的数据库集群的名称。 这是您在创建数据库集群时提供的同一个名称。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni

升级流程完成后,将 force-upgrade 注释设置为 false

升级失败

在自动升级流程期间,高可用性环境可能会在多个点发生故障。如需详细了解每种故障情形以及 AlloyDB Omni 操作器采取的后续操作,请参阅下表。

失败消息 说明 需要用户执行的操作
standby instance upgrade succeeded but the replication lag of the standby(s) is too high to be promoted to synchronous standby(s)

升级流程成功,但备用实例未与主实例同步,无法建立同步复制。

大量流量流向主实例。随着流量减少,备用实例会逐渐赶上主实例的数据状态。发生这种情况后,HAReady 条件会变为 true

选择修复次要版本不同的主实例和备用实例中的一个选项。

all standbys upgrade succeeded but the switchover instance failed to promote an upgraded standby.

您的备用实例已成功升级,但切换流程失败。

  1. 检查切换自定义资源的状态,以确定导致失败的原因。
  2. 选择修复次要版本不同的主实例和备用实例中的一个选项。
standby instance upgrade failed but rollback succeeded.

您的备用实例未成功升级,但 AlloyDB Omni 操作器已成功将其恢复到先前版本。

  1. 检查升级失败消息。
  2. 选择修复次要版本不同的主实例和备用实例中的一个选项。
standby instance upgrade failed and rollback failed.

备用实例未成功升级,并且 AlloyDB Omni 操作器无法将该实例恢复到先前版本。

与 Google 支持团队联系以排查问题。

修复次要版本不同的主实例和备用实例

如需解决此问题,请选择以下选项之一:

  • 如果导致升级失败的问题已解决,请重试升级。

    如需重试升级,请从实例中移除升级的 start-time 注释。移除注释后,AlloyDB Omni 操作器会生成新的开始时间并重新启动升级流程。

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME upgrade.alloydbomni.dbadmin.google/start-time-
    

    执行以下变量替换操作:

    • DB_CLUSTER_NAME:您的数据库集群的名称。 这是您在创建数据库集群时提供的同一个名称。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni
  • 如果导致升级失败的问题仍然存在,请将实例降级到先前的 AlloyDB Omni 操作器版本。

    如需降级实例,请按照升级流程操作,并将清单文件中的 databaseVersioncontrolPlaneAgentsVersion 字段更改为您之前使用的版本。