이 주제에서는 Cassandra를 수평 및 수직으로 확장하는 방법과 Cassandra를 축소하는 방법을 설명합니다.
Cassandra 수평 확장
Cassandra를 수평으로 확장하려면
- Cassandra를 확장하기 전에 필요에 따라
apigee-data
노드 풀에 추가 용량이 있는지 확인합니다. 전용 노드 풀 구성도 참조하세요. - 재정의 파일에서
cassandra.replicaCount
구성 속성 값을 설정합니다. 이 속성에 대한 자세한 내용은 구성 속성 참조를 참조하세요. 런타임 영역 구성요소 관리도 참조하세요. - 변경사항을 적용합니다. 예를 들면 다음과 같습니다.
$APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.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
- 클러스터에 재정의 파일을 적용합니다.
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
이 단계를 완료하면 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
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 700.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 144.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 767.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 193.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 132.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
Cassandra 노드 사용 중단
-
nodetool 명령어를 사용하여 클러스터에서 Cassandra 노드를 사용 중단합니다.
kubectl -n yourNamespace exec -it nodeName nodetool decommission
예를 들어 이 명령어는 이름에서 숫자 값이 가장 높은 노드
apigee-cassandra-5
를 사용 중단합니다.kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- 사용 중단이 완료될 때까지 기다렸다가 클러스터에 노드가 한 개 줄었는지 확인합니다. 예를 들면 다음과 같습니다.
kubectl -n yourNamespace exec -it nodeName 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 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.1.11 777.11 KiB 256 58.9% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 143.23 KiB 256 58.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
overrides.yaml
파일에서cassandra.replicaCount
속성을 업데이트하거나 추가합니다. 예를 들어 현재 노드 수가 6이면 5로 변경합니다.cassandra: replicaCount: 5 # (n-1 5 in this example)
- 클러스터에 구성 변경을 적용합니다.
./apigeectl apply --datastore 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
- 사용 중단하려는 노드마다 1~5단계를 반복합니다.
- 노드 해제가 완료되면
cassandra.replicaCount
값이nodetool status
명령어에서 반환된 노드 수와 동일한지 확인합니다.예를 들어 Cassandra를 3개의 노드로 축소한 경우는 다음과 같습니다.
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 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1
- Cassandra 클러스터 크기를 줄인 후에는 pvc(PersistentVolumeClaim)를 삭제하여 다음 확장 이벤트가 동일한 영구 볼륨과 이전에 생성된 데이터를 사용하지 않도록 주의해야 합니다.
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
이 예시에서 다음 pvc는 3개의 사용 중단된 노드에 해당합니다.
cassandra-data-apigee-cassandra-5
cassandra-data-apigee-cassandra-4
cassandra-data-apigee-cassandra-3
- pvc를 삭제합니다.
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5 persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-4 persistentvolumeclaim "cassandra-data-apigee-cassandra-4" deleted
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3 persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted
- 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
- Anthos 설치를 사용하는 경우 동일한 시퀀스를 사용하여 Anthos Kubernetes 클러스터에서 영구 볼륨을 삭제합니다.
영구 볼륨의 이름을 가져옵니다.
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-4 apigee-gcepd 5h pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-5 apigee-gcepd 5h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-3 apigee-gcepd 5h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h
이 예시에서 다음 볼륨은 사용 중단된 노드 3개에 해당합니다.
- 5:
pvc-354afa95-81a3-11e9-8862-42010a8e014a
- 4:
pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
- 3:
pvc-d29ba265-81a2-11e9-8862-42010a8e014a
- 5:
-
영구 볼륨을 삭제합니다.
kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a
-
영구 볼륨이 삭제되었는지 확인합니다.
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h