本页面介绍了如何在 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 版本
如需升级 15.12.0 版本,请更新集群清单文件中的 databaseVersion
和 controlPlaneAgentsVersion
字段,然后重新应用该文件。
以下是清单文件的开头部分,其中指定 databaseVersion
为 15.12.0 版,而 controlPlaneAgentsVersion
为 1.5.0 版:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
spec:
databaseVersion: "15.12.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)
|
升级流程成功,但备用实例未与主实例同步,无法建立同步复制。
大量流量流向主实例。随着流量减少,备用实例会逐渐赶上主实例的数据状态。发生这种情况后, |
选择修复次要版本不同的主实例和备用实例中的一个选项。 |
all standbys upgrade succeeded but the switchover instance failed
to promote an upgraded standby.
|
您的备用实例已成功升级,但切换流程失败。 |
|
standby instance upgrade failed but rollback succeeded.
|
您的备用实例未成功升级,但 AlloyDB Omni 操作器已成功将其恢复到先前版本。 |
|
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 操作器版本。
如需降级实例,请按照升级流程操作,并将清单文件中的
databaseVersion
和controlPlaneAgentsVersion
字段更改为您之前使用的版本。