本主题介绍如何在水平和垂直方向上扩容 Cassandra,以及如何缩容 Cassandra。
水平扩缩 Cassandra
水平扩容 Cassandra
- 在扩缩 Cassandra 之前,请确保您的
apigee-data
节点池根据需要提供额外的容量。另请参阅配置专用节点池。 - 在替换文件中设置
cassandra.replicaCount
配置属性的值。replicaCount
的值必须是3
的倍数。如需确定所需的replicaCount
值,请考虑以下事项:- 估算代理的流量需求。
- 对负载进行测试,并对 CPU 利用率进行合理预测。
- 您可以在不同区域中指定不同的
replicaCount
值。 - 将来,您可以在替换文件中扩展
replicaCount
。
- 应用更改。例如:
Helm
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply --datastore -f OVERRIDES_FILE.yaml
垂直扩缩 Cassandra
本部分介绍了如何垂直扩缩 Cassandra pod 以满足更高的 CPU 和内存要求。
概览
对于 Apigee Hybrid 生产部署,我们建议您至少创建两个单独的节点池:一个用于有状态服务 (Cassandra),一个用于无状态(运行时)服务。如需示例,请参阅 GKE 生产集群要求。
对于有状态 Cassandra 节点池,我们建议从 8 个 CPU 核心和 30 GB 内存开始。预配节点池后,这些设置便无法更改。另请参阅配置 Cassandra 以用于生产。
如果您需要纵向扩容 Cassandra pod 以满足更高的 CPU 和内存要求,请按照本主题中所述的步骤操作。
纵向扩容 Cassandra pod
请按照以下步骤为用于 Cassandra 的有状态节点池增加 CPU 和内存:
- 按照 Kubernetes 平台的说明向集群添加新节点池。安装说明中列出了受支持的平台。
- 验证新节点池是否已准备就绪:
kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE
示例命令:
kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new
输出示例:
NAME STATUS ROLES AGE VERSION gke-apigee-data-new-441387c2-2h5n Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-6941 Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-nhgc Ready <none> 4m29s v1.14.10-gke.17
- 更新替换文件以将新的节点池用于 Cassandra,并将 Pod 资源更新为您要使用的增加后的 CPU 数量和内存大小。例如,对于 GKE 集群,请使用类似如下的配置。如果您使用其他 Kubernetes 平台,则需要相应地调整
apigeeData.key
值:nodeSelector: requiredForScheduling: true apigeeData: key: "NODE_POOL_LABEL_NAME" value: "NODE_POOL_LABEL_VALUE" cassandra: resources: requests: cpu: NODE_POOL_CPU_NUMBER memory: NODE_POOL_MEMORY_SIZE
例如:
nodeSelector: requiredForScheduling: true apigeeData: key: "cloud.google.com/gke-nodepool" value: "apigee-data-new" cassandra: resources: requests: cpu: 14 memory: 16Gi
- 将替换文件应用于集群:
Helm
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply --datastore -f OVERRIDES_FILE.yaml
当您完成这些步骤后,Cassandra pod 便会开始滚动到新的节点池。
缩减 Cassandra
Apigee Hybrid 将一圈 Cassandra 节点用作 StatefulSet。Cassandra 为运行时层面中的某些 Apigee 实体提供永久性存储。如需详细了解 Cassandra,请参阅关于运行时层面。
Cassandra 是一项资源密集型服务,不应和任何其他混合服务一起部署在 pod 上。根据负载,您可能希望扩缩集群中 Cassandra 环中的节点数量。
缩减 Cassandra 环的一般过程如下:
- 确保 Cassandra 集群运行状况良好且有足够的存储空间,支持缩减。
- 更新
overrides.yaml
中的cassandra.replicaCount
属性。 - 应用配置更新。
- 删除永久性卷声明或卷,具体取决于您的集群配置。
注意事项
- 如果除要停用的节点以外的任何节点运行状况不佳,请不要继续。Kubernetes 将无法从集群中缩减这些 pod。
- 始终按三个节点进行缩减或扩容。
缩减 Cassandra
- 按照以下示例所示,验证集群是否正常运行且所有节点都已启动并运行:
kubectl get pods -n yourNamespace -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 -n yourNamespace 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 to 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 集群是否有足够的存储空间来支持缩容。缩容之后,Cassandra 节点的存储量不应超过 75%。
例如,如果您的集群有 6 个 Cassandra 节点,并且全部容量都接近 50%,那么缩减到三个节点会使所有三个节点均为 100%,此时不会留出任何等待操作空间。
但是,如果有 9 个 Cassandra 节点,则所有节点的全部容量都将接近 50%,这会使剩余每个节点各占 75% 的空间。您可以缩小规模。
- 在
overrides.yaml
文件中更新或添加cassandra.replicaCount
属性。例如,如果当前节点数为 9,请将其更改为 6:cassandra: replicaCount: 6 #
- 将配置更改应用到您的集群:
Helm
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply --datastore -f OVERRIDES_FILE.yaml
namespace/apigee unchanged secret/ssl-cassandra unchanged storageclass.storage.k8s.io/apigee-gcepd unchanged service/apigee-cassandra unchanged statefulset.apps/apigee-cassandra configured
- 验证其余所有 Cassandra 节点是否正在运行:
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 3h apigee-cassandra-default-1 1/1 Running 0 3h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 25m apigee-cassandra-default-4 1/1 Running 0 24m apigee-cassandra-default-5 1/1 Running 0 23m
- 验证
cassandra.replicaCount
值是否等于nodetool status
命令返回的节点数。例如,如果您将 Cassandra 缩减为六个节点,请运行以下命令:
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -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 1009.17 KiB 256 73.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 1.65.55 KiB 256 75.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 999.36 KiB 256 72.8% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 1017.03 KiB 256 74.2% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 1061.64 KiB 256 75.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 1049.42 KiB 256 74.9% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
- 在 Cassandra 集群缩减后,验证 pvcs (PersistentVolumeClaim) 是否与剩余的 Cassandra 节点相对应。
获取 pvcs 的名称:
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-5 Bound pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
在此示例中,您应该看不到与三个缩减的节点对应的 pvcs:
cassandra-data-apigee-cassandra-8
cassandra-data-apigee-cassandra-7
cassandra-data-apigee-cassandra-6