이 주제에서는 Cassandra를 수평 및 수직으로 확장하는 방법과 Cassandra를 축소하는 방법을 설명합니다.
Cassandra 수평 확장
Cassandra를 수평으로 확장하려면
- Cassandra를 확장하기 전에 필요에 따라
apigee-data
노드 풀에 추가 용량이 있는지 확인합니다. 전용 노드 풀 구성도 참조하세요. - 재정의 파일에서
cassandra.replicaCount
구성 속성 값을 설정합니다.replicaCount
값은3
의 배수여야 합니다. 원하는replicaCount
값을 확인하려면 다음을 고려하세요.- 프록시에 대한 트래픽 수요를 예상합니다.
- 부하 테스트를 수행하고 CPU 사용률을 합리적으로 예측합니다.
- 리전마다 다른
replicaCount
값을 지정할 수 있습니다. - 향후 재정의 파일에서
replicaCount
를 확장할 수 있습니다.
이 속성에 대한 자세한 내용은 구성 속성 참조를 참조하세요. 런타임 영역 구성요소 관리도 참조하세요.
- 변경사항을 적용합니다. 예를 들면 다음과 같습니다.
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
Cassandra 수직 확장
이 섹션에서는 더 높은 CPU 및 메모리 요구사항을 수용하기 위해 Cassandra 포드를 수직으로 확장하는 방법을 설명합니다.
개요
Apigee Hybrid 프로덕션 배포의 경우 스테이트풀 서비스(Cassandra)용으로 하나, 스테이트리스(runtime) 서비스용으로 하나, 최소 2개의 독립적인 노드 풀을 만드는 것이 좋습니다. 예시에 대해서는 GKE 프로덕션 클러스터 요구사항을 참조하세요.
스테이트풀(Stateful) Cassandra 노드 풀의 경우 8개의 CPU 코어와 30GB의 메모리로 시작하는 것이 좋습니다. 노드 풀이 프로비저닝되면 이 설정을 변경할 수 없습니다. 프로덕션을 위한 Cassandra 구성도 참조하세요.
더 많은 CPU 및 메모리 요구사항을 수용하기 위해 Cassandra 포드를 확장해야 하는 경우에는 이 주제에서 설명된 절차를 따르세요.
Cassandra 포드 확장
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에 새 노드 풀을 사용하도록 재정의 파일을 업데이트하고 사용하려는 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 upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
이 단계를 완료하면 Cassandra pod가 새 노드 풀로 롤링됩니다.
Cassandra 축소
Apigee Hybrid는 Cassandra 노드의 링을 StatefulSet로 사용합니다. Cassandra는 런타임 영역의 특정 Apigee 항목에 영구 스토리지를 제공합니다. Cassandra에 대한 자세한 내용은 런타임 영역 정보를 참조하세요.
Cassandra는 리소스 집약적인 서비스이므로 다른 하이브리드 서비스가 있는 포드에 배포해서는 안 됩니다. 로드에 따라 링의 Cassandra 노드 수를 클러스터에 축소하고자 할 수 있습니다.
Cassandra 링을 축소하는 일반적인 프로세스는 다음과 같습니다.
- Cassandra 클러스터가 정상 상태인지 확인하고 축소하기에 충분한 스토리지가 있는지 확인합니다.
overrides.yaml
의cassandra.replicaCount
속성을 업데이트하세요.- 구성 업데이트를 적용하세요.
- 클러스터 구성에 따라 영구 볼륨 신청 또는 볼륨을 삭제합니다.
알아 두어야 할 사항
- 사용 중단할 노드 이외의 노드가 비정상인 경우 계속 진행하지 마세요. Kubernetes는 클러스터에서 포드를 축소할 수 없습니다.
- 항상 노드 3개의 배수로 확장 또는 축소됩니다.
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% 정도인 경우, 노드를 3개로 축소하면 용량이 100%가 되어 작업을 계속할 여유 공간이 없게 됩니다.
그러나 9개의 Cassandra 노드가 있고 총 노드 용량이 50% 정도인 경우, 노드를 6개로 축소하면 나머지 각 노드의 용량이 약 75%가 되므로 축소할 수 있습니다.
overrides.yaml
파일에서cassandra.replicaCount
속성을 업데이트하거나 추가합니다. 예를 들어 현재 노드 수가 9면 6으로 변경합니다.cassandra: replicaCount: 6 #
- 클러스터에 구성 변경을 적용합니다.
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
- 남아있는 모든 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를 6개의 노드로 축소한 경우는 다음과 같습니다.
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 노드에 해당하는지 확인합니다.
pvc의 이름을 가져옵니다.
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