本主题介绍 GKE 上的 Apigee Hybrid 多区域部署、本地部署的 Anthos GKE、Microsoft® Azure Kubernetes Service (AKS)、Amazon Elastic Kubernetes Service (EKS) 和 RedHat OpenShift。在前提条件和过程中选择您的平台。
多区域部署的拓扑包括以下内容:
- 主动-主动:您的应用部署在多个地理位置,并且您的部署需要低延迟时间 API 响应时。您可以选择在距离您客户端最近的多个地理位置部署 Hybrid。例如:美国西海岸、美国东海岸、欧洲、亚太区域。
- 主动-被动:您拥有主要区域和故障切换或灾难恢复区域时。
多区域混合部署中的区域通过 Cassandra 通信,如下图所示:
前提条件
在为多个区域配置 Hybrid 之前,您必须先满足以下前提条件:
GKE
- 在不同的网络(例如不同的云服务提供商、不同的 VPC 网络、云端和本地等)之间安装多区域 Apigee 部署时,您必须在这些不同网络之间提供内部连接,以供 Cassandra 用于在节点之间进行通信。 这可以通过 VPN 或云专用的连接解决方案来实现。
- 如果您在一个集群中使用 Workload Identity 来对服务账号进行身份验证,我们强烈建议您对要扩展到的每个集群都使用 Workload Identity。请参阅在 GKE 上启用 Workload Identity 或在 AKS 和 EKS 上启用工作负载身份联合。
- 在多个具有不同 CIDR 块的区域中设置 Kubernetes 集群。
- 确保每个集群中都安装了 cert-manager。
- 设置跨区域通信。
- 确保所有 Cassandra pod 都能够解析自己的主机名。如果 hostNetwork 设置为 hostNetwork,则主机名是 Cassandra pod 名称。如果 hostNetwork 设置为 hostNetwork,则主机名是运行 Cassandra pod 的 Kubernetes 节点主机名。
- Cassandra 多区域要求:
- 确保 pod 网络命名空间具有跨区域的连接,包括防火墙、vpn、vpc 对等互连和 vNet 对等互连。大多数 GKE 安装都是如此。
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
cassandra.hostNetwork: true
,以启用 KuberneteshostNetwork
功能。如需详细了解使用
hostNetwork
的需求,请参阅下面的孤岛模式集群和 hostNetwork。 - 请先在现有集群上启用
hostNetwork
,然后再将多区域配置扩展到新区域。 - 启用
hostNetwork
后,请确保工作器节点可以执行其主机名的正向 DNS 查找。Apigee Cassandra 使用正向 DNS 查找在启动时获取主机 IP。 - 在跨所有区域的 Kubernetes 集群之间打开 TCP 端口 7001,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
如需了解详情,请参阅 Kubernetes 文档。
GKE On-Prem
- 在不同的网络(例如不同的云服务提供商、不同的 VPC 网络、云端和本地等)之间安装多区域 Apigee 部署时,您必须在这些不同网络之间提供内部连接,以供 Cassandra 用于在节点之间进行通信。 这可以通过 VPN 或云专用的连接解决方案来实现。
- 在多个具有不同 CIDR 块的区域中设置 Kubernetes 集群。
- 确保每个集群中都安装了 cert-manager。
- 设置跨区域通信。
- 确保所有 Cassandra pod 都能够解析自己的主机名。如果 hostNetwork 设置为 hostNetwork,则主机名是 Cassandra pod 名称。如果 hostNetwork 设置为 hostNetwork,则主机名是运行 Cassandra pod 的 Kubernetes 节点主机名。
- Cassandra 多区域要求:
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 GKE On-Prem 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
cassandra.hostNetwork: true
,以启用 KuberneteshostNetwork
功能。如需详细了解使用
hostNetwork
的需求,请参阅下面的孤岛模式集群和 hostNetwork。 - 请先在现有集群上启用
hostNetwork
,然后再将多区域配置扩展到新区域。 - 启用
hostNetwork
后,请确保工作器节点可以执行其主机名的正向 DNS 查找。Apigee Cassandra 使用正向 DNS 查找在启动时获取主机 IP。 - 在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 GKE On-Prem 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
如需了解详情,请参阅 Kubernetes 文档。
AKS
- 在不同的网络(例如不同的云服务提供商、不同的 VPC 网络、云端和本地等)之间安装多区域 Apigee 部署时,您必须在这些不同网络之间提供内部连接,以供 Cassandra 用于在节点之间进行通信。 这可以通过 VPN 或云专用的连接解决方案来实现。
- 按照混合安装指南中的说明,在移到集群设置步骤之前,先满足 Google Cloud 和组织配置等前提条件。
- 确保每个集群中都安装了 cert-manager。
- 确保所有 Cassandra pod 都能够解析自己的主机名。如果 hostNetwork 设置为 hostNetwork,则主机名是 Cassandra pod 名称。如果 hostNetwork 设置为 hostNetwork,则主机名是运行 Cassandra pod 的 Kubernetes 节点主机名。
- Cassandra 多区域要求:
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 AKS 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
cassandra.hostNetwork: true
,以启用 KuberneteshostNetwork
功能。如需详细了解使用
hostNetwork
的需求,请参阅下面的孤岛模式集群和 hostNetwork。 - 请先在现有集群上启用
hostNetwork
,然后再将多区域配置扩展到新区域。 - 启用
hostNetwork
后,请确保工作器节点可以执行其主机名的正向 DNS 查找。Apigee Cassandra 使用正向 DNS 查找在启动时获取主机 IP。 - 在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 AKS 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
如需了解详情,请参阅 Kubernetes 文档。
EKS
- 在不同的网络(例如不同的云服务提供商、不同的 VPC 网络、云端和本地等)之间安装多区域 Apigee 部署时,您必须在这些不同网络之间提供内部连接,以供 Cassandra 用于在节点之间进行通信。 这可以通过 VPN 或云专用的连接解决方案来实现。
- 按照混合安装指南中的说明,在移到集群设置步骤之前,先满足 Google Cloud 和组织配置等前提条件。
- 确保每个集群中都安装了 cert-manager。
- 确保所有 Cassandra pod 都能够解析自己的主机名。如果 hostNetwork 设置为 hostNetwork,则主机名是 Cassandra pod 名称。如果 hostNetwork 设置为 hostNetwork,则主机名是运行 Cassandra pod 的 Kubernetes 节点主机名。
- Cassandra 多区域要求:
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
cassandra.hostNetwork: true
,以启用 KuberneteshostNetwork
功能。默认情况下,Amazon EKS 使用完全集成的网络模型。如需详细了解使用
hostNetwork
的需求,请参阅下面的孤岛模式集群和 hostNetwork。 - 请先在现有集群上启用
hostNetwork
,然后再将多区域配置扩展到新区域。 - 启用
hostNetwork
后,请确保工作器节点可以执行其主机名的正向 DNS 查找。Apigee Cassandra 使用正向 DNS 查找在启动时获取主机 IP。 - 在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
如需了解详情,请参阅 Kubernetes 文档。
OpenShift
- 在不同的网络(例如不同的云服务提供商、不同的 VPC 网络、云端和本地等)之间安装多区域 Apigee 部署时,您必须在这些不同网络之间提供内部连接,以供 Cassandra 用于在节点之间进行通信。 这可以通过 VPN 或云专用的连接解决方案来实现。
- 按照混合安装指南中的说明,在移到集群设置步骤之前,先满足 Google Cloud 和组织配置等前提条件。
- 确保每个集群中都安装了 cert-manager。
- 确保所有 Cassandra pod 都能够解析自己的主机名。如果 hostNetwork 设置为 hostNetwork,则主机名是 Cassandra pod 名称。如果 hostNetwork 设置为 hostNetwork,则主机名是运行 Cassandra pod 的 Kubernetes 节点主机名。
- Cassandra 多区域要求:
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 OpenShift 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
cassandra.hostNetwork: true
,以启用 KuberneteshostNetwork
功能。如需详细了解使用
hostNetwork
的需求,请参阅下面的孤岛模式集群和 hostNetwork。 - 请先在现有集群上启用
hostNetwork
,然后再将多区域配置扩展到新区域。 - 启用
hostNetwork
后,请确保工作器节点可以执行其主机名的正向 DNS 查找。Apigee Cassandra 使用正向 DNS 查找在启动时获取主机 IP。 - 在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
- 如果 pod 网络命名空间在集群之间没有连接(集群以“孤岛网络模式”运行,这是 OpenShift 安装的默认情况),请在 Apigee Hybrid 多区域安装的所有区域的替换文件中设置
如需了解详情,请参阅 Kubernetes 文档。
孤岛模式集群和 hostNetwork
Kubernetes 集群有两种主要网络模型:完全集成(或平面)和孤岛模式。Apigee 建议尽可能使用平面网络模型,因为它可以简化多区域 Cassandra 连接。在孤岛模式下配置 Kubernetes 集群时,Pod 网络是隔离的。Pod 无法使用 Pod IP 地址与其他集群中运行的 Pod 直接通信。如需详细了解这两种网络模型之间的差异以及每种模型的示例,请参阅典型的网络模型实现。
当 Apigee Hybrid 使用孤岛模式网络模型在两个或多个 Kubernetes 集群上运行时,需要通过 cassandra.hostNetwork 属性启用 Cassandra 的 hostNetwork
设置。默认情况下,Kubernetes Pod 被隔离到单独的网络命名空间中,从而阻止其使用 Kubernetes 工作器节点 IP 地址。当 hostNetwork
设置为 true
时,Pod 不会隔离在自己的网络命名空间中,而是使用 Pod 调度到的 Kubernetes 工作器节点的 IP 地址和主机名。这样,Cassandra 便能以原生方式使用 Kubernetes 工作器节点 IP 作为其 IP,使 Cassandra 能够在以孤岛模式运行的多个集群中的所有 Cassandra Pod 之间建立全网状拓扑。
Cassandra 主机名解析
虽然 Cassandra Pod 不会按主机名解析其他 Cassandra Pod,但在启动时,Cassandra 会检查其主机名是否可被 DNS 解析。由于 hostNetwork
设置为 true 时,Pod 主机名与 Kubernetes 工作器节点主机名相同,因此工作器节点主机名必须能够通过集群 DNS 服务解析为 IP 地址。如果 Kubernetes 工作器节点主机名无法解析,则 Cassandra Pod 将无法完全启动。因此,在将 hostNetwork
设置为 true
时,Kubernetes 工作器节点主机名必须能够从集群中的 Pod 进行解析。
为多区域配置 Apigee Hybrid
本部分介绍如何为多区域配置 Apigee Hybrid。
GKE
配置多区域种子主机
本部分介绍如何将现有 Cassandra 集群扩展到新区域。 此设置允许新区域引导集群并加入现有数据中心。如果没有此配置,多区域 Kubernetes 集群不会相互了解。
-
对于创建的第一个区域,获取 apigee 命名空间中的 pod:
kubectl get pods -o wide -n apigee
- 确定此区域中 Cassandra 的多区域种子主机地址,例如
10.0.0.11
。 -
为第二个区域准备
overrides.yaml
文件,并添加种子主机 IP 地址,如下所示:cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
请替换以下内容:
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
10.0.0.11
。 - 将 DATACENTER_NAME 替换为数据中心名称,例如
dc-2
。 - 将 RACK_NAME 替换为机架名称,例如
ra-1
。 - 将 CLUSTER_NAME 替换为 Cassandra 集群的名称。默认情况下,值为
apigeecluster
。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。您可以随意选择自己的值,但该值在所有区域必须相同。
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
配置第二个区域
如需设置新区域,请执行以下操作:
-
在第二个区域中安装 cert-manager。
- 将证书从现有集群复制到新集群。
Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
-
将上下文设置为原始命名空间:
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
将当前命名空间配置导出到文件:
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
将
apigee-ca
Secret 导出到文件:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
将上下文设置为新区域的集群名称:
kubectl config use-context NEW_CLUSTER_NAME
-
将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:
kubectl apply -f apigee-namespace.yaml
-
将密钥导入新集群:
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
按照相应步骤将 Apigee Hybrid CRD 安装到新区域中。
-
现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 通过运行以下命令来验证 Cassandra 集群设置。输出应显示现有数据中心和新数据中心。
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
显示成功设置的示例:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 在新数据中心中的所有 pod 上设置 Cassandra。
- 使用以下命令从集群中获取
apigeeorg
:kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
例如:
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- 创建 cassandra 数据复制自定义资源 (
YAML
) 文件。该文件可以采用任何名称。在以下示例中,该文件的名称为datareplication.yaml
。该文件必须包含以下内容:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
其中:
- REGION_EXPANSION 是您为此元数据指定的名称。您可以使用任何名称。
- NAMESPACE 是
overrides.yaml
中提供的同一命名空间。它通常为“apigee
”。 - APIGEEORG_VALUE 是上一步中
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
命令的输出值。例如rg-hybrid-b7d3b9c
- SOURCE_REGION 是来源区域,它是来自来源区域 overrides.yaml 的 cassandra 部分下的数据中心值
例如:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 使用以下命令应用
CassandraDataReplication
:kubectl apply -f datareplication.yaml
- 使用以下命令从集群中获取
- 使用以下命令验证重建状态。
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
结果应如下所示:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 数据复制完成且通过验证后,更新种子主机:
-
从
overrides-DATACENTER_NAME.yaml
中移除multiRegionSeedHost: 10.0.0.11
。 -
重新应用更改以更新 apigee 数据存储区 CR:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
从
- 从日志中验证重建进程。此外,使用
nodetool status
命令验证数据大小。kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
以下示例显示了日志条目示例:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
检查 Cassandra 集群状态
以下命令可用于查看该集群在两个数据中心中是否成功设置。该命令将检查两个区域的 nodetool 状态。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
GKE On-Prem
配置多区域种子主机
本部分介绍如何将现有 Cassandra 集群扩展到新区域。 此设置允许新区域引导集群并加入现有数据中心。如果没有此配置,多区域 Kubernetes 集群不会相互了解。
-
对于创建的第一个区域,获取 apigee 命名空间中的 pod:
kubectl get pods -o wide -n apigee
- 确定此区域中 Cassandra 的多区域种子主机地址,例如
10.0.0.11
。 -
为第二个区域准备
overrides.yaml
文件,并添加种子主机 IP 地址,如下所示:cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
请替换以下内容:
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
10.0.0.11
。 - 将 DATACENTER_NAME 替换为数据中心名称,例如
dc-2
。 - 将 RACK_NAME 替换为机架名称,例如
ra-1
。 - 将 CLUSTER_NAME 替换为 Cassandra 集群的名称。默认情况下,值为
apigeecluster
。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。您可以随意选择自己的值,但该值在所有区域必须相同。
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
配置第二个区域
如需设置新区域,请执行以下操作:
-
在第二个区域中安装 cert-manager。
- 将证书从现有集群复制到新集群。
Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
-
将上下文设置为原始命名空间:
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
将当前命名空间配置导出到文件:
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
将
apigee-ca
Secret 导出到文件:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
将上下文设置为新区域的集群名称:
kubectl config use-context NEW_CLUSTER_NAME
-
将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:
kubectl apply -f apigee-namespace.yaml
-
将密钥导入新集群:
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
按照相应步骤将 Apigee Hybrid CRD 安装到新区域中。
-
现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 通过运行以下命令来验证 Cassandra 集群设置。输出应显示现有数据中心和新数据中心。
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
显示成功设置的示例:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 在新数据中心中的所有 pod 上设置 Cassandra。
- 使用以下命令从集群中获取
apigeeorg
:kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
例如:
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- 创建 cassandra 数据复制自定义资源 (
YAML
) 文件。该文件可以采用任何名称。在以下示例中,该文件的名称为datareplication.yaml
。该文件必须包含以下内容:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
其中:
- REGION_EXPANSION 是您为此元数据指定的名称。您可以使用任何名称。
- NAMESPACE 是
overrides.yaml
中提供的同一命名空间。它通常为“apigee
”。 - APIGEEORG_VALUE 是上一步中
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
命令的输出值。例如rg-hybrid-b7d3b9c
- SOURCE_REGION 是来源区域,它是来自来源区域 overrides.yaml 的 cassandra 部分下的数据中心值
例如:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 使用以下命令应用
CassandraDataReplication
:kubectl apply -f datareplication.yaml
- 使用以下命令从集群中获取
- 使用以下命令验证重建状态。
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
结果应如下所示:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 数据复制完成且通过验证后,更新种子主机:
-
从
overrides-DATACENTER_NAME.yaml
中移除multiRegionSeedHost: 10.0.0.11
。 -
重新应用更改以更新 apigee 数据存储区 CR:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
从
- 从日志中验证重建进程。此外,使用
nodetool status
命令验证数据大小。kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
以下示例显示了日志条目示例:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
检查 Cassandra 集群状态
以下命令可用于查看该集群在两个数据中心中是否成功设置。该命令将检查两个区域的 nodetool 状态。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
AKS
在每个区域中创建虚拟网络
按照此处的 Azure 建议建立跨区域通信:VNet 到 VNet:跨不同区域连接 Azure 中的虚拟网络。
创建多区域集群
在多个具有不同 CIDR 块的区域中设置 Kubernetes 集群。另请参阅“第 1 步:创建集群”。使用您之前创建的位置和虚拟网络名称。
在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
配置多区域种子主机
本部分介绍如何将现有 Cassandra 集群扩展到新区域。 此设置允许新区域引导集群并加入现有数据中心。如果没有此配置,多区域 Kubernetes 集群不会相互了解。
-
对于创建的第一个区域,获取 apigee 命名空间中的 pod:
kubectl get pods -o wide -n apigee
- 确定此区域中 Cassandra 的多区域种子主机地址,例如
10.0.0.11
。 -
为第二个区域准备
overrides.yaml
文件,并添加种子主机 IP 地址,如下所示:cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
请替换以下内容:
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
10.0.0.11
。 - 将 DATACENTER_NAME 替换为数据中心名称,例如
dc-2
。 - 将 RACK_NAME 替换为机架名称,例如
ra-1
。 - 将 CLUSTER_NAME 替换为 Cassandra 集群的名称。默认情况下,值为
apigeecluster
。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。您可以随意选择自己的值,但该值在所有区域必须相同。
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
配置第二个区域
如需设置新区域,请执行以下操作:
-
在第二个区域中安装 cert-manager。
- 将证书从现有集群复制到新集群。
Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
-
将上下文设置为原始命名空间:
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
将当前命名空间配置导出到文件:
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
将
apigee-ca
Secret 导出到文件:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
将上下文设置为新区域的集群名称:
kubectl config use-context NEW_CLUSTER_NAME
-
将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:
kubectl apply -f apigee-namespace.yaml
-
将密钥导入新集群:
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
按照相应步骤将 Apigee Hybrid CRD 安装到新区域中。
-
现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 通过运行以下命令来验证 Cassandra 集群设置。输出应显示现有数据中心和新数据中心。
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
显示成功设置的示例:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 在新数据中心中的所有 pod 上设置 Cassandra。
- 使用以下命令从集群中获取
apigeeorg
:kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
例如:
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- 创建 cassandra 数据复制自定义资源 (
YAML
) 文件。该文件可以采用任何名称。在以下示例中,该文件的名称为datareplication.yaml
。该文件必须包含以下内容:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
其中:
- REGION_EXPANSION 是您为此元数据指定的名称。您可以使用任何名称。
- NAMESPACE 是
overrides.yaml
中提供的同一命名空间。它通常为“apigee
”。 - APIGEEORG_VALUE 是上一步中
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
命令的输出值。例如rg-hybrid-b7d3b9c
- SOURCE_REGION 是来源区域,它是来自来源区域 overrides.yaml 的 cassandra 部分下的数据中心值
例如:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 使用以下命令应用
CassandraDataReplication
:kubectl apply -f datareplication.yaml
- 使用以下命令从集群中获取
- 使用以下命令验证重建状态。
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
结果应如下所示:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 数据复制完成且通过验证后,更新种子主机:
-
从
overrides-DATACENTER_NAME.yaml
中移除multiRegionSeedHost: 10.0.0.11
。 -
重新应用更改以更新 apigee 数据存储区 CR:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
从
- 从日志中验证重建进程。此外,使用
nodetool status
命令验证数据大小。kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
以下示例显示了日志条目示例:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
检查 Cassandra 集群状态
以下命令可用于查看该集群在两个数据中心中是否成功设置。该命令将检查两个区域的 nodetool 状态。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
EKS
在每个区域中创建虚拟网络
按照 AWS 建议建立跨区域通信,如什么是 VPC 对等互连?中所述。用于不同区域的 AWS 术语是“区域间 VPC 对等互连”。
创建多区域集群
在多个具有不同 CIDR 块的区域中设置 Kubernetes 集群。另请参阅“第 1 步:创建集群”。使用您之前创建的位置和虚拟网络名称。
在跨所有区域的 Kubernetes 集群之间打开 Cassandra 端口,使跨区域和数据中心的工作器节点能够进行通信。如需了解 Cassandra 端口号,请参阅配置端口。
配置多区域种子主机
本部分介绍如何将现有 Cassandra 集群扩展到新区域。 此设置允许新区域引导集群并加入现有数据中心。如果没有此配置,多区域 Kubernetes 集群不会相互了解。
-
对于创建的第一个区域,获取 apigee 命名空间中的 pod:
kubectl get pods -o wide -n apigee
- 确定此区域中 Cassandra 的多区域种子主机地址,例如
10.0.0.11
。 -
为第二个区域准备
overrides.yaml
文件,并添加种子主机 IP 地址,如下所示:cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
请替换以下内容:
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
10.0.0.11
。 - 将 DATACENTER_NAME 替换为数据中心名称,例如
dc-2
。 - 将 RACK_NAME 替换为机架名称,例如
ra-1
。 - 将 CLUSTER_NAME 替换为 Cassandra 集群的名称。默认情况下,值为
apigeecluster
。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。您可以随意选择自己的值,但该值在所有区域必须相同。
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
配置第二个区域
如需设置新区域,请执行以下操作:
-
在第二个区域中安装 cert-manager。
- 将证书从现有集群复制到新集群。
Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
-
将上下文设置为原始命名空间:
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
将当前命名空间配置导出到文件:
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
将
apigee-ca
Secret 导出到文件:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
将上下文设置为新区域的集群名称:
kubectl config use-context NEW_CLUSTER_NAME
-
将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:
kubectl apply -f apigee-namespace.yaml
-
将密钥导入新集群:
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
按照相应步骤将 Apigee Hybrid CRD 安装到新区域中。
-
现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 通过运行以下命令来验证 Cassandra 集群设置。输出应显示现有数据中心和新数据中心。
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
显示成功设置的示例:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 在新数据中心中的所有 pod 上设置 Cassandra。
- 使用以下命令从集群中获取
apigeeorg
:kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
例如:
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- 创建 cassandra 数据复制自定义资源 (
YAML
) 文件。该文件可以采用任何名称。在以下示例中,该文件的名称为datareplication.yaml
。该文件必须包含以下内容:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
其中:
- REGION_EXPANSION 是您为此元数据指定的名称。您可以使用任何名称。
- NAMESPACE 是
overrides.yaml
中提供的同一命名空间。它通常为“apigee
”。 - APIGEEORG_VALUE 是上一步中
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
命令的输出值。例如rg-hybrid-b7d3b9c
- SOURCE_REGION 是来源区域,它是来自来源区域 overrides.yaml 的 cassandra 部分下的数据中心值
例如:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 使用以下命令应用
CassandraDataReplication
:kubectl apply -f datareplication.yaml
- 使用以下命令从集群中获取
- 使用以下命令验证重建状态。
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
结果应如下所示:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 数据复制完成且通过验证后,更新种子主机:
-
从
overrides-DATACENTER_NAME.yaml
中移除multiRegionSeedHost: 10.0.0.11
。 -
重新应用更改以更新 apigee 数据存储区 CR:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
从
- 从日志中验证重建进程。此外,使用
nodetool status
命令验证数据大小。kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
以下示例显示了日志条目示例:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
检查 Cassandra 集群状态
以下命令可用于查看该集群在两个数据中心中是否成功设置。该命令将检查两个区域的 nodetool 状态。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
OpenShift
配置多区域种子主机
本部分介绍如何将现有 Cassandra 集群扩展到新区域。 此设置允许新区域引导集群并加入现有数据中心。如果没有此配置,多区域 Kubernetes 集群不会相互了解。
-
对于创建的第一个区域,获取 apigee 命名空间中的 pod:
kubectl get pods -o wide -n apigee
- 确定此区域中 Cassandra 的多区域种子主机地址,例如
10.0.0.11
。 -
为第二个区域准备
overrides.yaml
文件,并添加种子主机 IP 地址,如下所示:cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
请替换以下内容:
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
10.0.0.11
。 - 将 DATACENTER_NAME 替换为数据中心名称,例如
dc-2
。 - 将 RACK_NAME 替换为机架名称,例如
ra-1
。 - 将 CLUSTER_NAME 替换为 Cassandra 集群的名称。默认情况下,值为
apigeecluster
。如果您使用其他集群名称,则必须为 cassandra.clusterName 指定值。您可以随意选择自己的值,但该值在所有区域必须相同。
- 将 SEED_HOST_IP_ADDRESS 替换为种子主机 IP 地址,例如
配置第二个区域
如需设置新区域,请执行以下操作:
-
在第二个区域中安装 cert-manager。
- 将证书从现有集群复制到新集群。
Cassandra 和其他混合组件会将新 CA 根用于 mTLS。因此,务必确保集群具有一致的证书。
-
将上下文设置为原始命名空间:
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
将当前命名空间配置导出到文件:
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
将
apigee-ca
Secret 导出到文件:kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
将上下文设置为新区域的集群名称:
kubectl config use-context NEW_CLUSTER_NAME
-
将命名空间配置导入新集群。如果您在新区域中使用不同的命名空间,请务必更新文件中的命名空间:
kubectl apply -f apigee-namespace.yaml
-
将密钥导入新集群:
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
按照相应步骤将 Apigee Hybrid CRD 安装到新区域中。
-
现在,使用以下 Helm 图表命令将 Apigee Hybrid 安装到新区域中(如同区域 1 中的操作):
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 通过运行以下命令来验证 Cassandra 集群设置。输出应显示现有数据中心和新数据中心。
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
显示成功设置的示例:
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 在新数据中心中的所有 pod 上设置 Cassandra。
- 使用以下命令从集群中获取
apigeeorg
:kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
例如:
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- 创建 cassandra 数据复制自定义资源 (
YAML
) 文件。该文件可以采用任何名称。在以下示例中,该文件的名称为datareplication.yaml
。该文件必须包含以下内容:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
其中:
- REGION_EXPANSION 是您为此元数据指定的名称。您可以使用任何名称。
- NAMESPACE 是
overrides.yaml
中提供的同一命名空间。它通常为“apigee
”。 - APIGEEORG_VALUE 是上一步中
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
命令的输出值。例如rg-hybrid-b7d3b9c
- SOURCE_REGION 是来源区域,它是来自来源区域 overrides.yaml 的 cassandra 部分下的数据中心值
例如:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 使用以下命令应用
CassandraDataReplication
:kubectl apply -f datareplication.yaml
- 使用以下命令从集群中获取
- 使用以下命令验证重建状态。
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
结果应如下所示:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 数据复制完成且通过验证后,更新种子主机:
-
从
overrides-DATACENTER_NAME.yaml
中移除multiRegionSeedHost: 10.0.0.11
。 -
重新应用更改以更新 apigee 数据存储区 CR:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
从
- 从日志中验证重建进程。此外,使用
nodetool status
命令验证数据大小。kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
以下示例显示了日志条目示例:
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
检查 Cassandra 集群状态
以下命令可用于查看该集群在两个数据中心中是否成功设置。该命令将检查两个区域的 nodetool 状态。
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
问题排查
请参阅 Cassandra 数据复制失败。