此过程涉及从 Apigee Hybrid 1.11.x 版升级到 Apigee Hybrid 1.12.3 版。
相对于 Apigee Hybrid v1.11 的更改
Apigee Hybrid 1.12 版引入了以下会影响升级过程的更改。如需查看 v1.12 中功能的完整列表,请参阅 Hybrid v1.12.0 版本说明。
- Cassandra 4.x:从 1.12 版开始,Apigee Hybrid 使用 Cassandra 4 及更高版本。
-
apigeectl
弃用:从 1.12 版开始,Apigee Hybrid 仅支持使用 Helm 来安装和管理 Hybrid 安装。 -
现已推出一套用于监控 Apigee 代理和目标端点的新指标。对于 Hybrid v1.12,默认情况下不再使用
ProxyV2
和TargetV2
受监控的资源。所有代理和目标指标都会发布到Proxy
和Target
受监控的资源。如需继续向
ProxyV2
和TargetV2
受监控的资源发出指标,请在overrides.yaml
中将metrics.disablePrometheusPipeline
设置为true
。如果您配置了基于指标的提醒,请确认为 Hybrid 安装使用了正确的指标。如需了解详情,请参阅基于指标的提醒。
开始升级到 1.12 版之前的注意事项
从 Apigee Hybrid 1.11 版升级到 1.12 版包括 Cassandra 数据库从 3.11.x 版升级到 4.x 版。虽然 Cassandra 升级作为 Apigee Hybrid 升级过程的一部分进行处理,但请规划以下注意事项:
- Cassandra 版本升级会在后台进行,并且一次在 1 个 Pod(或 Cassandra 节点)上进行,因此请规划在升级期间减少数据库容量。
- 开始升级之前,扩缩 Cassandra 容量并确保磁盘利用率接近或低于 50%。
- 验证和测试 Cassandra 备份和恢复程序。
- 开始升级和验证备份之前,请备份 Hybrid 1.11 版安装中的 Cassandra 数据。
- 由于
Cassandra
执行的升级后任务,升级apigee-datastore
会导致 CPU 消耗暂时增加 - 升级了
apigee-datastore
(Cassandra) 组件后,您无法将该组件回滚到先前的版本。有两种场景需在升级apigee-datastore
组件后将升级回滚到 Hybrid v1.12:- 如果
apigee-datastore
组件处于良好状态,但其他组件需要回滚,您可以单独回滚这些其他组件。 - 如果
apigee-datastore
组件处于错误状态,您必须从 v1.11 备份恢复到 v1.11 安装。
- 如果
升级单区域安装之前的注意事项
如果您需要回滚到先前版本的 Apigee Hybrid,则该过程可能需要停机。因此,如果您要升级单区域安装,则可能需要按照以下顺序创建第二个区域,然后一次仅升级一个区域:
- 使用同一 Hybrid 版本向现有安装添加第二个区域。请参阅 1.11 版文档中的多区域部署。
- 开始升级之前,备份并验证第一个区域中的数据。请参阅 1.11 版文档中的 Cassandra 备份概览。
- 将新添加的区域升级到 Hybrid 1.12。
- 将流量切换到新区域并验证流量。
- 验证后,使用 Hybrid 1.12 升级旧区域。
- 将所有流量切换回旧区域,并验证流量。
- 停用新区域。
升级多区域安装之前的注意事项
Apigee 建议按以下顺序来升级多区域安装:
- 开始升级之前,备份并验证每个区域中的数据。
- 在一个区域中升级 Hybrid 版本,并确保所有 Pod 都处于运行状态以验证升级。
- 验证新升级的区域中的流量。
- 仅在验证上一个区域中的流量后才升级每个后续区域。
- 如果可能需要回滚多区域部署中的升级,请准备将流量从失败区域迁出,并考虑在将流量转移到的区域中添加足够的容量来处理两个区域的流量。
前提条件
升级到 Hybrid 1.12 版之前,请确保您的安装满足以下要求:
- 使用 Helm 管理的 Apigee Hybrid 1.11 版安装。
- 如果您要使用
apigeectl
管理 Hybrid 安装,则必须先将集群迁移到 Helm 管理。请参阅 Hybrid v1.11 文档中的将 Apigee Hybrid 从 apigeectl 迁移到 Helm。 - 如果 Hybrid 安装运行的版本低于 v1.11,则在升级到 v1.12 之前,您必须先升级到 1.11 版。请参阅将 Apigee Hybrid 升级到 1.11 版。
- 如果您要使用
- Helm v3.14.2+ 版。
kubectl
1.27、1.28 或 1.29 版(推荐)。- cert-manager v1.13.0 版。如果需要,您会在下面的准备升级到版本部分中升级 cert-manager。
限制
规划从 Apigee Hybrid 1.11 版到 1.12 版的升级时,请注意以下限制。如果您需要在升级后回滚或恢复,规划有助于减少所需的停机时间。
- 由于两个版本之间不兼容,因此 Hybrid 1.12 中的备份无法在 Hybrid 1.11 中恢复,反之亦然。
- 升级到 1.12 版期间,您无法扩缩数据存储区 Pod。开始升级 Hybrid 安装之前,请先解决所有区域中的扩缩需求。
- 在单区域 Hybrid 安装中,数据存储区升级过程完成后,便无法回滚数据存储区组件。您无法将 Cassandra 4.x 数据存储区回滚到 Cassandra 3.x 数据存储区。这需要通过 Cassandra 3.x 数据的最新备份(来自 Hybrid 1.11 版安装)进行恢复。
- 升级过程中不支持删除或添加区域。在多区域升级中,您必须先完成所有区域的升级,然后才能添加或删除区域。
升级到 1.12.3 版概览。
以下各部分介绍升级 Apigee Hybrid 的过程:
准备升级到 1.12 版
备份 Cassandra
- 开始升级之前,请在所有适用区域中备份 Cassandra 数据库,并验证 Hybrid 1.11 版安装中的数据。请参阅 1.11 版文档中的监控备份。
- 开始升级过程之前,请重启集群中的所有 Cassandra Pod,以便任何遗留问题都可以出现。
如需重启并测试 Cassandra Pod,请单独删除每个 Pod(一次删除一个 Pod),然后验证其是否恢复为运行状态以及就绪性探测是否通过:
-
列出 cassandra pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandra
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h . . . - 删除 Pod:
kubectl delete pod -n APIGEE_NAMESPACE CASSANDRA_POD_NAME
例如:
kubectl delete pod -n apigee apigee-cassandra-default-0
- 通过再次列出 Cassandra Pod 来检查状态:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandra
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 16s apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h . . .
-
列出 cassandra pod:
- 再次应用上一个已知替换文件,确保未对其进行任何更改,以便您可以使用同一配置升级到 Hybrid 1.12 版。
- 确保所有区域中的所有 Cassandra 节点都处于
UN
(启动/正常)状态。如果任何 Cassandra 节点处于其他状态,请先解决该状态,然后再开始升级。您可以使用以下命令验证 Cassandra 节点的状态:
- 列出 cassandra pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandra
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 16m apigee-cassandra-default-4 1/1 Running 0 14m apigee-cassandra-default-5 1/1 Running 0 13m apigee-cassandra-default-6 1/1 Running 0 9m apigee-cassandra-default-7 1/1 Running 0 9m apigee-cassandra-default-8 1/1 Running 0 8m - 使用
kubectl nodetool status
命令检查每个 Cassandra Pod 的节点状态:kubectl -n APIGEE_NAMESPACE exec -it CASSANDRA_POD_NAME nodetool status
例如:
kubectl -n apigee exec -it apigee-cassandra-default-0 nodetool status
Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 690.17 KiB 256 48.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 705.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.11.11 674.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 697.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 703.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 700.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1 UN 10.16.11.3 697.03 KiB 256 49.8% dad221ff-dad1-de33-2cd3-f1.672367e6f ra-1 UN 10.16.14.16 704.04 KiB 256 50.9% 1feed042-a4b6-24ab-49a1-24d4cef95473 ra-1 UN 10.16.16.1 699.82 KiB 256 50.6% beef93af-fee0-8e9d-8bbf-efc22d653596 ra-1
- 列出 cassandra pod:
备份 Hybrid 安装目录
- 这些说明将环境变量 APIGEE_HELM_CHARTS_HOME 用于文件系统中安装了 Helm 图表的目录。如果需要,请切换到此目录,然后使用以下命令定义变量:
Linux
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOME
Mac OS
export APIGEE_HELM_CHARTS_HOME=$PWD
echo $APIGEE_HELM_CHARTS_HOME
Windows
set APIGEE_HELM_CHARTS_HOME=%CD%
echo %APIGEE_HELM_CHARTS_HOME%
- 创建 1.11 版
$APIGEE_HELM_CHARTS_HOME/
目录的备份副本。您可以使用任何备份过程。例如,您可以使用以下命令创建整个目录的tar
文件:tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.11-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
- 按照 Cassandra 备份和恢复中的说明备份 Cassandra 数据库。
- 如果您使用替换文件中的服务证书文件 (
.json
) 对服务账号进行身份验证,请确保服务账号证书文件位于正确的 Helm 图表目录中。Helm 图表无法读取每个图表目录之外的文件。如果您使用 Kubernetes Secret 或 Workload Identity 对服务账号进行身份验证,则无需执行此步骤。
下表展示了每个服务账号文件的目标位置,具体取决于您的安装类型:
生产
服务账号 默认文件名 Helm 图表目录 apigee-cassandra
PROJECT_ID-apigee-cassandra.json
$APIGEE_HELM_CHARTS_HOME/apigee-datastore/
apigee-logger
PROJECT_ID-apigee-logger.json
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
apigee-mart
PROJECT_ID-apigee-mart.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
apigee-metrics
PROJECT_ID-apigee-metrics.json
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
apigee-runtime
PROJECT_ID-apigee-runtime.json
$APIGEE_HELM_CHARTS_HOME/apigee-env
apigee-synchronizer
PROJECT_ID-apigee-synchronizer.json
$APIGEE_HELM_CHARTS_HOME/apigee-env/
apigee-udca
PROJECT_ID-apigee-udca.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
apigee-watcher
PROJECT_ID-apigee-watcher.json
$APIGEE_HELM_CHARTS_HOME/apigee-org/
非生产
创建以下每个目录中的
apigee-non-prod
服务账号文件的副本:服务账号 默认文件名 Helm 图表目录 apigee-non-prod
PROJECT_ID-apigee-non-prod.json
$APIGEE_HELM_CHARTS_HOME/apigee-datastore/
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
$APIGEE_HELM_CHARTS_HOME/apigee-org/
$APIGEE_HELM_CHARTS_HOME/apigee-env/
-
确保您的 TLS 证书和密钥文件(
.crt
、.key
和/或.pem
)位于$APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/
目录中。
升级 Kubernetes 版本
检查您的 Kubernetes 平台版本,并根据需要将 Kubernetes 平台升级到 Hybrid 1.11 和 Hybrid 1.12 均支持的版本。如需帮助,请参阅该平台的相关文档。
安装 Hybrid 1.12.3 运行时
准备 Helm 图表升级
- 拉取 Apigee Helm 图表。
Apigee Hybrid 图表托管在 Google Artifact Registry 中:
oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
使用以下
pull
命令将所有 Apigee Hybrid Helm 图表复制到您的本地存储空间:export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.12.3
helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar
- 根据需要升级 cert-manager。
如果您需要升级 cert-manager 版本,请使用以下命令安装新版本:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
- 安装更新后的 Apigee CRD:
-
通过运行以下命令使用
kubectl
试运行功能:kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run
-
使用试运行命令进行验证后,运行以下命令:
kubectl apply -k apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 使用
kubectl get crds
命令验证安装:kubectl get crds | grep apigee
输出内容应如下所示:
apigeedatastores.apigee.cloud.google.com 2023-10-09T14:48:30Z apigeedeployments.apigee.cloud.google.com 2023-10-09T14:48:30Z apigeeenvironments.apigee.cloud.google.com 2023-10-09T14:48:31Z apigeeissues.apigee.cloud.google.com 2023-10-09T14:48:31Z apigeeorganizations.apigee.cloud.google.com 2023-10-09T14:48:32Z apigeeredis.apigee.cloud.google.com 2023-10-09T14:48:33Z apigeerouteconfigs.apigee.cloud.google.com 2023-10-09T14:48:33Z apigeeroutes.apigee.cloud.google.com 2023-10-09T14:48:33Z apigeetelemetries.apigee.cloud.google.com 2023-10-09T14:48:34Z cassandradatareplications.apigee.cloud.google.com 2023-10-09T14:48:35Z
-
-
检查集群节点上的标签。默认情况下,Apigee 会将数据 pod 调度到带有
cloud.google.com/gke-nodepool=apigee-data
标签的节点上,并将运行时 pod 调度到带有cloud.google.com/gke-nodepool=apigee-runtime
标签的节点上。您可以在overrides.yaml
文件中自定义节点池标签。如需了解详情,请参阅配置专用节点池。
安装 Apigee Hybrid Helm 图表
- 如果没有,请转到
APIGEE_HELM_CHARTS_HOME
目录。从该目录运行以下命令。 - 升级 Apigee Operator/Controller:
试运行:
helm upgrade operator apigee-operator/ \ --install \ --create-namespace \ --namespace apigee-system \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade operator apigee-operator/ \ --install \ --create-namespace \ --namespace apigee-system \ -f OVERRIDES_FILE
验证 Apigee Operator 安装:
helm ls -n apigee-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator apigee-system 3 2023-06-26 00:42:44.492009 -0800 PST deployed apigee-operator-1.12.3 1.12.3
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee-system get deploy apigee-controller-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 7d20h
- 升级 Apigee 数据存储区:
试运行:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查
apigeedatastore
的状态来验证它已启动并正在运行:kubectl -n apigee get apigeedatastore default
NAME STATE AGE default running 2d
- 升级 Apigee 遥测:
试运行:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeetelemetry apigee-telemetry
NAME STATE AGE apigee-telemetry running 2d
- 升级 Apigee Redis:
试运行:
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeredis default
NAME STATE AGE default running 2d
- 升级 Apigee 入站流量管理器:
试运行:
helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade ingress-manager apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee get deployment apigee-ingressgateway-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-ingressgateway-manager 2/2 2 2 2d
- 升级 Apigee 组织:
试运行:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
升级图表:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
通过检查相应组织的状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeorg
NAME STATE AGE apigee-org1-xxxxx running 2d
- 升级环境。
一次只能安装一个环境。使用
--set env=
ENV_NAME 指定环境:试运行:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE \ --dry-run
- ENV_RELEASE_NAME 是您之前安装
apigee-env
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-env-ENV_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_NAME。 - ENV_NAME 是您要升级的环境的名称。
- OVERRIDES_FILE 是 v.1.12.3 的新替换文件
升级图表:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
通过检查相应环境的状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeenv
NAME STATE AGE GATEWAYTYPE apigee-org1-dev-xxx running 2d
- ENV_RELEASE_NAME 是您之前安装
-
升级环境组 (
virtualhosts
)。- 一次只能升级一个环境组 (virtualhost)。使用
--set envgroup=
ENV_GROUP_NAME 指定环境组。对 override.yaml 文件中提到的每个环境组重复运行以下命令:试运行:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE \ --dry-run
ENV_GROUP_RELEASE_NAME 是您之前安装
apigee-virtualhost
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-virtualhost-ENV_GROUP_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_GROUP_NAME。升级图表:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE
- 检查 ApigeeRoute (AR) 的状态。
安装
virtualhosts
会创建 ApigeeRouteConfig (ARC),它会在 Apigee Watcher 从控制平面拉取环境组相关详细信息后在内部创建 ApigeeRoute (AR)。因此,请检查相应 AR 的状态是否为正在运行:kubectl -n apigee get arc
NAME STATE AGE apigee-org1-dev-egroup 2d
kubectl -n apigee get ar
NAME STATE AGE apigee-org1-dev-egroup-xxxxxx running 2d
- 一次只能升级一个环境组 (virtualhost)。使用
回滚到先前的版本
根据升级到 Apigee Hybrid 1.12 版后 apigee-datastore
组件的状态,本节划分为多个部分。有一些过程适用于在 apigee-datastore
组件处于良好状态的情况下进行单区域或多区域回滚,还有一些过程适用于在 apigee-datastore
处于错误状态的情况下从备份恢复。
单区域回滚和恢复
在 apigee-datastore
处于良好状态时回滚
此过程介绍了如何将每个 Apigee Hybrid 组件从 v1.12 回滚到 v1.11(apigee-datastore
除外)。v1.12 apigee-datastore
组件向后兼容 Hybrid v1.11 组件。
如需将单区域安装回滚到 1.11 版,请执行以下操作:
- 开始回滚之前,验证所有 Pod 是否都处于运行状态:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
-
使用 helm 验证组件的版本:
helm -n APIGEE_NAMESPACE list
helm -n apigee-system list
例如:
helm -n apigee list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION datastore apigee 2 2024-03-29 17:08:07.917848253 +0000 UTC deployed apigee-datastore-1.12.0 1.12.0 ingress-manager apigee 2 2024-03-29 17:21:02.917333616 +0000 UTC deployed apigee-ingress-manager-1.12.0 1.12.0 redis apigee 2 2024-03-29 17:19:51.143728084 +0000 UTC deployed apigee-redis-1.12.0 1.12.0 telemetry apigee 2 2024-03-29 17:16:09.883885403 +0000 UTC deployed apigee-telemetry-1.12.0 1.12.0 myhybridorg apigee 2 2024-03-29 17:21:50.899855344 +0000 UTC deployed apigee-org-1.12.0 1.12.0
-
使用以下命令回滚每个组件(
apigee-datastore
除外):- 创建以下环境变量:
- PREVIOUS_HELM_CHARTS_HOME:先前 Apigee Hybrid Helm 图表的安装目录。这是要回滚到的版本。
- 回滚 virtualhost。对替换文件中提到的每个环境组重复运行以下命令。
helm upgrade ENV_GROUP_RELEASE_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f PREVIOUS_OVERRIDES_FILE
ENV_GROUP_RELEASE_NAME 是您之前安装
apigee-virtualhost
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-virtualhost-ENV_GROUP_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_GROUP_NAME。 - 回滚环境。对替换文件中提到的每个环境重复运行以下命令。
helm upgrade apigee-env-ENV_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=ENV_NAME \ -f PREVIOUS_OVERRIDES_FILE
ENV_RELEASE_NAME 是您之前安装
apigee-env
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-env-ENV_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_NAME。通过检查相应环境的状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeenv
NAME STATE AGE GATEWAYTYPE apigee-org1-dev-xxx running 2d
- 回滚组织:
helm upgrade ORG_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查相应组织的状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeorg
NAME STATE AGE apigee-org1-xxxxx running 2d
- 回滚入站流量管理器:
helm upgrade ingress-manager $PREVIOUS_HELM_CHARTS_HOME/apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee get deployment apigee-ingressgateway-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-ingressgateway-manager 2/2 2 2 2d
- 回滚 Redis:
helm upgrade redis $PREVIOUS_HELM_CHARTS_HOME/apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeredis default
NAME STATE AGE default running 2d
- 回滚 Apigee Telemetry:
helm upgrade telemetry $PREVIOUS_HELM_CHARTS_HOME/apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeetelemetry apigee-telemetry
NAME STATE AGE apigee-telemetry running 2d
- 回滚 Apigee 控制器:
helm upgrade operator $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
验证 Apigee Operator 安装:
helm ls -n apigee-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator apigee-system 3 2023-06-26 00:42:44.492009 -0800 PST deployed apigee-operator-1.12.3 1.12.3
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee-system get deploy apigee-controller-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 7d20h
- 回滚 Apigee Hybrid CRD:
kubectl apply -k $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 创建以下环境变量:
- 验证所有 Pod 是否都处于运行或已完成状态:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
-
验证所有组件的版本。除数据存储区外,所有组件都应是先前的版本:
helm -n APIGEE_NAMESPACE list
helm -n apigee-system list
例如:
helm -n apigee list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION datastore apigee 2 2024-03-29 18:47:55.979671057 +0000 UTC deployed apigee-datastore-1.12.0 1.12.0 ingress-manager apigee 3 2024-03-14 19:14:57.905700154 +0000 UTC deployed apigee-ingress-manager-1.11.0 1.11.0 redis apigee 3 2024-03-14 19:15:49.406917944 +0000 UTC deployed apigee-redis-1.11.0 1.11.0 telemetry apigee 3 2024-03-14 19:17:04.803421424 +0000 UTC deployed apigee-telemetry-1.11.0 1.11.0 myhybridorg apigee 3 2024-03-14 19:13:17.807673713 +0000 UTC deployed apigee-org-1.11.0 1.11.0
在 apigee-datastore
未处于良好状态时恢复
如果 apigee-datastore
组件升级失败,您无法将 apigee-datastore
从 1.12 版回滚到 1.11 版。而是必须通过由 v1.11 安装生成的备份进行恢复。请使用以下顺序恢复先前的版本。
- 如果您没有活跃的 Apigee Hybrid 1.11 版安装(例如在其他区域中),请使用备份的图表和替换文件创建新的 v1.11 安装。请参阅 Apigee Hybrid 1.11 版安装说明。
- 按照以下方面的说明,从备份恢复 v1.11 区域(或新安装):
- Cloud Storage Interface (CSI) 备份:Cassandra CSI 备份和恢复。
- 非 CSI 备份:在单个区域中恢复。
- 验证发送到恢复后的安装的流量
- 可选:按照卸载 Hybrid 运行时中的说明移除 1.12 版安装。
多区域回滚和恢复
在 apigee-datastore
处于良好状态时回滚
此过程介绍了如何将每个 Apigee Hybrid 组件从 v1.12 回滚到 v1.11(apigee-datastore
除外)。v1.12 apigee-datastore
组件向后兼容 Hybrid v1.11 组件。
- 开始回滚之前,验证所有 Pod 是否都处于运行状态:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
- 确保所有区域中的所有 Cassandra 节点都处于
UN
(启动/正常)状态。如果任何 Cassandra 节点处于其他状态,请先解决该状态,然后再开始升级过程。您可以使用以下命令验证 Cassandra 节点的状态:
- 列出 cassandra pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandra
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 16m apigee-cassandra-default-4 1/1 Running 0 14m apigee-cassandra-default-5 1/1 Running 0 13m apigee-cassandra-default-6 1/1 Running 0 9m apigee-cassandra-default-7 1/1 Running 0 9m apigee-cassandra-default-8 1/1 Running 0 8m - 使用
kubectl nodetool status
命令检查每个 Cassandra Pod 的节点状态:kubectl -n APIGEE_NAMESPACE exec -it CASSANDRA_POD_NAME -- nodetool -u JMX_USER -pw JMX_PASSWORD
例如:
kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u jmxuser -pw JMX_PASSWORD status
Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 690.17 KiB 256 48.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 705.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.11.11 674.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 697.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 703.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 700.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1 UN 10.16.11.3 697.03 KiB 256 49.8% dad221ff-dad1-de33-2cd3-f1.672367e6f ra-1 UN 10.16.14.16 704.04 KiB 256 50.9% 1feed042-a4b6-24ab-49a1-24d4cef95473 ra-1 UN 10.16.16.1 699.82 KiB 256 50.6% beef93af-fee0-8e9d-8bbf-efc22d653596 ra-1
如果并非所有 Cassandra Pod 都处于
UN
状态,请按照从 Cassandra 集群中移除已关闭节点中的说明操作。 - 列出 cassandra pod:
- 导航到之前的 Apigee Hybrid Helm 图表的安装目录
-
将上下文更改为已升级的区域
kubectl config use-context UPGRADED_REGION_CONTEXT
- 验证所有 Pod 是否都处于运行状态:
kubectl get pods -n APIGEE_NAMESPACE
kubectl get pods -n apigee-system
- 使用 helm 命令确保所有版本都已升级到 Hybrid v1.12:
helm -n APIGEE_NAMESPACE list
helm -n apigee-system list
例如:
helm -n apigee list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION datastore apigee 2 2024-03-29 17:08:07.917848253 +0000 UTC deployed apigee-datastore-1.12.0 1.12.0 ingress-manager apigee 2 2024-03-29 17:21:02.917333616 +0000 UTC deployed apigee-ingress-manager-1.12.0 1.12.0 redis apigee 2 2024-03-29 17:19:51.143728084 +0000 UTC deployed apigee-redis-1.12.0 1.12.0 telemetry apigee 2 2024-03-29 17:16:09.883885403 +0000 UTC deployed apigee-telemetry-1.12.0 1.12.0 myhybridorg apigee 2 2024-03-29 17:21:50.899855344 +0000 UTC deployed apigee-org-1.12.0 1.12.0
-
使用以下命令回滚每个组件(
apigee-datastore
除外):- 创建以下环境变量:
- PREVIOUS_HELM_CHARTS_HOME:先前 Apigee Hybrid Helm 图表的安装目录。这是要回滚到的版本。
- 回滚 virtualhost。对替换文件中提到的每个环境组重复运行以下命令。
helm upgrade ENV_GROUP_RELEASE_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f PREVIOUS_OVERRIDES_FILE
ENV_GROUP_RELEASE_NAME 是您之前安装
apigee-virtualhost
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-virtualhost-ENV_GROUP_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_GROUP_NAME。 - 回滚环境。对替换文件中提到的每个环境重复运行以下命令。
helm upgrade apigee-env-ENV_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=ENV_NAME \ -f PREVIOUS_OVERRIDES_FILE
ENV_RELEASE_NAME 是您之前安装
apigee-env
图表时使用的名称。在 Hybrid v1.10 中,该名称通常是apigee-env-ENV_NAME
。在 Hybrid v1.11 及更高版本中,该名称通常是 ENV_NAME。通过检查相应环境的状态来验证每个环境已启动并正在运行:
kubectl -n apigee get apigeeenv
NAME STATE AGE GATEWAYTYPE apigee-org1-dev-xxx running 2d
- 回滚组织:
helm upgrade ORG_NAME $PREVIOUS_HELM_CHARTS_HOME/apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查相应组织的状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeorg
NAME STATE AGE apigee-org1-xxxxx running 2d
- 回滚入站流量管理器:
helm upgrade ingress-manager $PREVIOUS_HELM_CHARTS_HOME/apigee-ingress-manager/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee get deployment apigee-ingressgateway-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-ingressgateway-manager 2/2 2 2 2d
- 回滚 Redis:
helm upgrade redis $PREVIOUS_HELM_CHARTS_HOME/apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeeredis default
NAME STATE AGE default running 2d
- 回滚 Apigee Telemetry:
helm upgrade telemetry $PREVIOUS_HELM_CHARTS_HOME/apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
通过检查状态来验证它已启动并正在运行:
kubectl -n apigee get apigeetelemetry apigee-telemetry
NAME STATE AGE apigee-telemetry running 2d
- 回滚 Apigee 控制器:
helm upgrade operator $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/ \ --install \ --namespace apigee-system \ --atomic \ -f PREVIOUS_OVERRIDES_FILE
验证 Apigee Operator 安装:
helm ls -n apigee-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator apigee-system 3 2023-06-26 00:42:44.492009 -0800 PST deployed apigee-operator-1.12.3 1.12.3
通过检查可用性来验证它已启动并正在运行:
kubectl -n apigee-system get deploy apigee-controller-manager
NAME READY UP-TO-DATE AVAILABLE AGE apigee-controller-manager 1/1 1 1 7d20h
- 回滚 Apigee Hybrid CRD:
kubectl apply -k $PREVIOUS_HELM_CHARTS_HOME/apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false
- 创建以下环境变量:
-
验证所有组件的版本。除
datastore
外,所有组件都应是先前的版本:helm -n APIGEE_NAMESPACE list
helm -n apigee-system list
例如:
helm -n apigee list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION datastore apigee 2 2024-03-29 18:47:55.979671057 +0000 UTC deployed apigee-datastore-1.12.0 1.12.0 ingress-manager apigee 3 2024-03-14 19:14:57.905700154 +0000 UTC deployed apigee-ingress-manager-1.11.0 1.11.0 redis apigee 3 2024-03-14 19:15:49.406917944 +0000 UTC deployed apigee-redis-1.11.0 1.11.0 telemetry apigee 3 2024-03-14 19:17:04.803421424 +0000 UTC deployed apigee-telemetry-1.11.0 1.11.0 myhybridorg apigee 3 2024-03-14 19:13:17.807673713 +0000 UTC deployed apigee-org-1.11.0 1.11.0
此时,所有版本(
datastore
除外)都已回滚到先前的版本。
将多区域安装恢复到先前的版本
可通过从多区域安装中移除对多区域升级中升级失败的区域的引用,来恢复该区域。仅当 Hybrid 1.11 上至少有 1 个动态区域时,才能使用此方法。v1.12 数据存储区与 v1.11 组件兼容。
如需从健康状况良好的区域恢复故障区域,请执行以下步骤:
- 将 API 流量从受影响的区域重定向到正常工作的区域。相应地规划容量,以支持从故障区域转移的流量。
- 停用受影响的区域。对于每个受影响的区域,请按照停用 Hybrid 区域中所述的步骤执行操作。等待停用完成,然后再继续执行下一步操作。
- 按照从失败的升级恢复区域中的说明清理失败区域。
- 恢复受影响的区域。如需恢复,请创建一个新区域,如 GKE、GKE On-Prem 和 AKS 上的多区域部署中所述。
在 apigee-datastore
处于错误状态的情况下从备份恢复多区域安装
如果 apigee-datastore
组件升级失败,您无法从 1.12 版回滚到 1.11 版。而是必须通过由 v1.11 安装生成的备份进行恢复。请使用以下顺序恢复先前的版本。
- 如果您没有活跃的 Apigee Hybrid 1.11 版安装(例如在其他区域中),请使用备份的图表和替换文件创建新的 v1.11 安装。请参阅 Apigee Hybrid 1.11 版安装说明。
- 按照以下方面的说明,从备份恢复 v1.11 区域(或新安装):
- Cloud Storage Interface (CSI) 备份:Cassandra CSI 备份和恢复。
- 非 CSI 备份:在多个区域中恢复。
- 验证发送到恢复后的安装的流量
- 对于多区域安装,请重新构建和恢复下一个区域。请参阅“在多个区域中恢复”中的“使用备份进行恢复”中的说明。
- 按照卸载 Hybrid 运行时中的说明移除 1.12 版安装。
附录:从失败的升级恢复区域
如果从 1.11 升级到 1.12 失败,请移除数据中心。
-
从动态区域验证 Cassandra 集群状态:
-
将 kubectl 上下文切换到要移除的区域:
kubectl config use-context CONTEXT_OF_LIVE_REGION
- 列出 cassandra pod:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
例如:
kubectl get pods -n apigee -l app=apigee-cassandra
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h - 对其中一个 Cassandra Pod 执行 exec:
kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
-
验证 Cassandra 集群的状态:
nodetool -u JMX_USER -pw JMX_PASSWORD status
输出内容应如下所示:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.48.12.16 813.84 KiB 256 100.0% a6340ad9-37ba-4ec8-a8c2-f7b7ac931807 ra-1 UN 10.48.14.16 859.89 KiB 256 100.0% 39f03c51-e387-4dac-8360-6d8732e690a7 ra-1 UN 10.48.0.18 888.95 KiB 256 100.0% 0d57df49-52e4-4c01-832d-d9df845ab732 ra-1
-
描述集群,以验证您是否仅看到来自动态区域的 Cassandra Pod 的 IP 并且它们全都采用同一架构版本:
nodetool -u JMX_USER -pw JMX_PASSWORD describecluster
输出内容应如下所示:
nodetool -u JMX_USER -pw JMX_PASSWORD describecluster
Schema versions: 4bebf2de-0582-31b4-9c5f-e36f60127e1b: [10.48.14.16, 10.48.12.16, 10.48.0.18]
-
将 kubectl 上下文切换到要移除的区域:
-
清理 Cassandra 键空间复制:
-
获取
user-setup
作业并将其删除。系统会立即创建新的user-setup
作业。kubectl get jobs -n APIGEE_NAMESPACE
例如:
kubectl get jobs -n apigee
NAME COMPLETIONS DURATION AGE apigee-cassandra-schema-setup-myhybridorg-8b3e61d 1/1 6m35s 3h5m apigee-cassandra-schema-val-myhybridorg-8b3e61d-28499150 1/1 10s 9m22s apigee-cassandra-user-setup-myhybridorg-8b3e61d 0/1 21s 21skubectl delete jobs USER_SETUP_JOB_NAME -n APIGEE_NAMESPACE
输出应显示新作业正在启动:
kubectl delete jobs apigee-cassandra-user-setup-myhybridorg-8b3e61d -n apigee
apigee-cassandra-user-setup-myhybridorg-8b3e61d-wl92b 0/1 Init:0/1 0 1s - 按照创建客户端容器中的说明创建客户端容器,以验证 Cassandra 键空间复制设置。
-
获取所有键空间。对 cassandra-client Pod 执行 exec,然后启动 cqlsh 客户端:
kubectl exec -it -n APIGEE_NAMESPACE cassandra-client -- /bin/bash
使用
ddl user
连接到 Cassandra 服务器,因为它具有运行以下命令所需的权限:cqlsh apigee-cassandra-default.apigee.svc.cluster.local -u DDL_USER -p DDL_PASSWORD --ssl
获取键空间:
select * from system_schema.keyspaces;
输出应如下所示,其中
dc-1
是动态 DC:select * from system_schema.keyspaces;
keyspace_name | durable_writes | replication --------------------------+----------------+-------------------------------------------------------------------------------- kvm_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_auth | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} quota_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} cache_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} rtc_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_distributed | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_traces | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} kms_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} (11 rows) - 如果由于某种原因,
user-setup
作业仍然出错并且验证失败,请使用以下命令更正键空间中的复制。kubectl exec -it -n APIGEE_NAMESPACE cassandra-client -- /bin/bash
使用
ddl user
连接到 Cassandra 服务器,因为它具有运行以下命令所需的权限:cqlsh apigee-cassandra-default.apigee.svc.cluster.local -u DDL_USER -p DDL_PASSWORD --ssl
获取键空间:
select * from system_schema.keyspaces;
使用上述命令中的键空间名称,并在以下示例中替换这些名称
alter keyspace quota_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace kms_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace kvm_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace cache_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace perses_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace rtc_myhybridorg_hybrid WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace system_distributed WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
alter keyspace system_traces WITH replication = {'class': 'NetworkTopologyStrategy', 'LIVE_DC_NAME':'3'};
- 使用以下
cqlsh
命令验证所有键空间是否在正确的区域中进行复制:select * from system_schema.keyspaces;
例如:
select * from system_schema.keyspaces;
keyspace_name | durable_writes | replication -------------------------+----------------+-------------------------------------------------------------------------------- kvm_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_auth | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} quota_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} cache_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} rtc_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_distributed | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_traces | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} kms_myhybridorg_hybrid | True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} (11 rows)
-
获取
在此阶段,您已从 Cassandra 集群中完全移除对失效 DC 的所有引用。
附录:从 Cassandra 集群中移除已关闭节点
在回滚多区域安装并且并非所有 Cassandra Pod 都处于启动/正常 (UN
) 状态时,请使用此过程。
- 对其中一个 Cassandra Pod 执行 exec:
kubectl exec -it -n CASSANDRA_POD_NAME -- /bin/bash
-
验证 Cassandra 集群的状态:
nodetool -u JMX_USER -pw JMX_PASSWORD status
-
验证节点是否确实已关闭 (
DN
)。对 Cassandra Pod 无法启动的区域中的 Cassandra Pod 执行 exec。Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.48.12.16 1.15 MiB 256 100.0% a6340ad9-37ba-4ec8-a8c2-f7b7ac931807 ra-1 UN 10.48.0.18 1.21 MiB 256 100.0% 0d57df49-52e4-4c01-832d-d9df845ab732 ra-1 UN 10.48.14.16 1.18 MiB 256 100.0% 39f03c51-e387-4dac-8360-6d8732e690a7 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack DN 10.8.4.4 432.42 KiB 256 100.0% cd672398-5c45-4c88-a424-86d757951e53 rc-1 UN 10.8.19.6 5.8 MiB 256 100.0% 84f771f3-3632-4155-b27f-a67125d73bc5 rc-1 UN 10.8.21.5 5.74 MiB 256 100.0% f6f21b70-348d-482d-89fa-14b7147a5042 rc-1
-
移除对已关闭 (
DN
) 节点的引用。在上面的示例中,我们将移除对主机10.8.4.4
的引用kubectl exec -it -n apigee apigee-cassandra-default-2 -- /bin/bash nodetool -u JMX_USER -pw JMX_PASSWORD removenode HOST_ID
-
移除引用后,终止 Pod。新的 Cassandra Pod 应启动并加入集群
kubectl delete pod -n POD_NAME
-
验证新的 Cassandra Pod 是否已加入集群。
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.48.12.16 1.16 MiB 256 100.0% a6340ad9-37ba-4ec8-a8c2-f7b7ac931807 ra-1 UN 10.48.0.18 1.22 MiB 256 100.0% 0d57df49-52e4-4c01-832d-d9df845ab732 ra-1 UN 10.48.14.16 1.19 MiB 256 100.0% 39f03c51-e387-4dac-8360-6d8732e690a7 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.8.19.6 5.77 MiB 256 100.0% 84f771f3-3632-4155-b27f-a67125d73bc5 rc-1 UN 10.8.4.5 246.99 KiB 256 100.0% 0182e675-eec8-4d68-a465-69211b621601 rc-1 UN 10.8.21.5 5.69 MiB 256 100.0% f6f21b70-348d-482d-89fa-14b7147a5042 rc-1
此时,您可以继续升级或回滚集群其余区域。
附录:问题排查:apigee-datastore
在回滚后处于卡滞状态
升级后将 apigee-datastore
回滚到 Hybrid 1.11,而它处于卡滞状态时,请使用此过程。
-
再次更正数据存储区控制器状态之前,请验证它是否处于
releasing
状态以及 Pod 是否未随 Cassandra 集群状态一起启动。-
使用 Helm 命令验证数据存储区是否已回滚:
helm -n APIGEE_NAMESPACE list
例如:
helm -n apigee list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION datastore apigee 3 2024-04-04 22:15:08.792539892 +0000 UTC deployed apigee-datastore-1.11.0 1.11.0 ingress-manager apigee 1 2024-04-02 22:24:27.564184968 +0000 UTC deployed apigee-ingress-manager-1.12.0 1.12.0 redis apigee 1 2024-04-02 22:23:59.938637491 +0000 UTC deployed apigee-redis-1.12.0 1.12.0 telemetry apigee 1 2024-04-02 22:23:39.458134303 +0000 UTC deployed apigee-telemetry-1.12 1.12.0 myhybridorg apigee 1 2024-04-02 23:36:32.614927914 +0000 UTC deployed apigee-org-1.12.0 1.12.0 - 获取 Cassandra Pod 的状态:
kubectl get pods -n APIGEE_NAMESPACE
例如:
kubectl get pods -n apigee
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 0/1 CrashLoopBackOff 4 (13s ago) 2m13s - 验证
apigeeds
控制器是否卡滞在正在发布状态:kubectl get apigeeds -n APIGEE_NAMESPACE
例如:
kubectl get apigeeds -n apigee
NAME STATE AGE default releasing 46h -
验证 Cassandra 节点状态(注意一个节点处于
DN
状态,而这是卡滞在CrashLoopBackOff
状态的节点):kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE -- nodetool -u JMX_USER -pw JMX_PASSWORD status
例如:
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u jmxuser -pw JMX_PASSWORD status
Defaulted container "apigee-cassandra" out of: apigee-cassandra, apigee-cassandra-ulimit-init (init) Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.68.7.28 2.12 MiB 256 100.0% 4de9df37-3997-43e7-8b5b-632d1feb14d3 rc-1 UN 10.68.10.29 2.14 MiB 256 100.0% a54e673b-ec63-4c08-af32-ea6c00194452 rc-1 DN 10.68.6.26 5.77 MiB 256 100.0% 0fe8c2f4-40bf-4ba8-887b-9462159cac45 rc-1
-
使用 Helm 命令验证数据存储区是否已回滚:
-
使用 1.12 图表升级数据存储区。
helm upgrade datastore APIGEE_HELM_1.12.0_HOME/apigee-datastore/ --install --namespace APIGEE_NAMESPACE -f overrides.yaml
-
验证所有 Pod 是否都是
Running
,并且 Cassandra 集群再次健康状况良好。- 再次验证所有 Pod 是否都是
READY
:kubectl get pods -n APIGEE_NAMESPACE
例如:
kubectl get pods -n apigee
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 29h apigee-cassandra-default-1 1/1 Running 0 29h apigee-cassandra-default-2 1/1 Running 0 60m - 验证 Cassandra 集群状态:
kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE -- nodetool -u JMX_USER -pw JMX_PASSWORD status
例如:
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u jmxuser -pw JMX_PASSWORD status
Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.68.4.15 2.05 MiB 256 100.0% 0fe8c2f4-40bf-4ba8-887b-9462159cac45 rc-1 UN 10.68.7.28 3.84 MiB 256 100.0% 4de9df37-3997-43e7-8b5b-632d1feb14d3 rc-1 UN 10.68.10.29 3.91 MiB 256 100.0% a54e673b-ec63-4c08-af32-ea6c00194452 rc-1 - 验证
apigeeds
控制器的状态:kubectl get apigeeds -n APIGEE_NAMESPACE
例如:
kubectl get apigeeds -n apigee
NAME STATE AGE default running 2d1h
- 再次验证所有 Pod 是否都是
此时,您已修复数据存储区,它应处于 running
状态。