Cassandra 확장

이 주제에서는 Cassandra를 수평 및 수직으로 확장하는 방법과 Cassandra를 축소하는 방법을 설명합니다.

Cassandra 수평 확장

Cassandra를 수평으로 확장하려면

  1. Cassandra를 확장하기 전에 필요에 따라 apigee-data 노드 풀에 추가 용량이 있는지 확인합니다. 전용 노드 풀 구성도 참조하세요.
  2. 재정의 파일에서 cassandra.replicaCount 구성 속성 값을 설정합니다. 이 속성에 대한 자세한 내용은 구성 속성 참조를 참조하세요. 런타임 영역 구성요소 관리도 참조하세요.
  3. 변경사항을 적용합니다. 예를 들면 다음과 같습니다.
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

Cassandra 수직 확장

이 섹션에서는 더 높은 CPU 및 메모리 요구사항을 수용하기 위해 Cassandra pod를 수직으로 확장하는 방법을 설명합니다.

개요

Apigee Hybrid 프로덕션 배포의 경우 스테이트풀 서비스(Cassandra)용으로 하나, 스테이트리스(runtime) 서비스용으로 하나, 최소 2개의 독립적인 노드 풀을 만드는 것이 좋습니다. 예시에 대해서는 GKE 프로덕션 클러스터 요구사항을 참조하세요.

스테이트풀(Stateful) Cassandra 노드 풀의 경우 8개의 CPU 코어와 30GB의 메모리로 시작하는 것이 좋습니다. 노드 풀이 프로비저닝되면 이 설정을 변경할 수 없습니다. 프로덕션을 위한 Cassandra 구성도 참조하세요.

더 많은 CPU 및 메모리 요구사항을 수용하기 위해 Cassandra pod를 확장해야 하는 경우에는 이 주제에서 설명된 절차를 따르세요.

Cassandra pod 확장

Cassandra에 사용되는 스테이트풀 노드 풀의 CPU 및 메모리를 늘리려면 다음 안내를 따르세요.

  1. Kubernetes 플랫폼의 안내에 따라 클러스터에 새 노드 풀을 추가합니다. 지원되는 플랫폼은 설치 안내에 나열되어 있습니다.
  2. 새 노드 풀이 준비되었는지 확인합니다.
    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
    
  3. Cassandra에 새 노드 풀을 사용하도록 재정의 파일을 업데이트하고 사용하려는 CPU 수와 메모리 크기를 pod 리소스에 업데이트합니다. 예를 들어 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
    
  4. 클러스터에 재정의 파일을 적용합니다.
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

이 단계를 완료하면 Cassandra pod가 새 노드 풀로 롤링됩니다.

Cassandra 축소

Apigee Hybrid는 Cassandra 노드의 링을 StatefulSet로 사용합니다. Cassandra는 런타임 영역의 특정 Apigee 항목에 영구 스토리지를 제공합니다. Cassandra에 대한 자세한 내용은 런타임 영역 정보를 참조하세요.

Cassandra는 리소스 집약적인 서비스이므로 다른 하이브리드 서비스가 있는 pod에 배포해서는 안 됩니다. 로드에 따라 링의 Cassandra 노드 수를 클러스터에 축소하고자 할 수 있습니다.

Cassandra 링을 축소하는 일반적인 프로세스는 다음과 같습니다.

  1. Cassandra 노드 하나를 사용 중단하세요.
  2. overrides.yamlcassandra.replicaCount 속성을 업데이트하세요.
  3. 구성 업데이트를 적용하세요.
  4. 삭제하려는 노드마다 이 단계를 반복합니다.
  5. 클러스터 구성에 따라 영구 볼륨 신청 또는 볼륨을 삭제합니다.

알아두어야 할 사항

  • 다음 노드로 진행하기 전에 한 번에 하나의 노드에서 이 작업을 수행합니다.
  • 사용 중단할 노드 이외의 노드가 비정상인 경우 계속 진행하지 마세요. Kubernetes는 클러스터에서 pod를 축소할 수 없습니다.
  • 항상 노드 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 노드 사용 중단

  1. nodetool 명령어를 사용하여 클러스터에서 Cassandra 노드를 사용 중단합니다.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    예를 들어 이 명령어는 이름에서 숫자 값이 가장 높은 노드 apigee-cassandra-5를 사용 중단합니다.

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. 사용 중단이 완료될 때까지 기다렸다가 클러스터에 노드가 한 개 줄었는지 확인합니다. 예를 들면 다음과 같습니다.
    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
    
  3. overrides.yaml 파일에서 cassandra.replicaCount 속성을 업데이트하거나 추가합니다. 예를 들어 현재 노드 수가 6이면 5로 변경합니다.
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. 클러스터에 구성 변경을 적용합니다.
    ./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
  5. 남아있는 모든 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
    
    
  6. 사용 중단하려는 노드마다 1~5단계를 반복합니다.
  7. 노드 해제가 완료되면 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
    
    
  8. 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
  9. 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
  10. 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
  11. 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
  12. 영구 볼륨을 삭제합니다.
    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
  13. 영구 볼륨이 삭제되었는지 확인합니다.
    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