Cassandra 확장

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

Cassandra 수평 확장

Cassandra를 수평으로 확장하려면

  1. Cassandra를 확장하기 전에 필요에 따라 apigee-data 노드 풀에 추가 용량이 있는지 확인합니다. 전용 노드 풀 구성도 참조하세요.
  2. 재정의 파일에서 cassandra.replicaCount 구성 속성 값을 설정합니다. replicaCount 값은 3의 배수여야 합니다. 원하는 replicaCount 값을 확인하려면 다음을 고려하세요.
    • 프록시에 대한 트래픽 수요를 예상합니다.
    • 부하 테스트를 수행하고 CPU 사용률을 합리적으로 예측합니다.
    • 리전마다 다른 replicaCount 값을 지정할 수 있습니다.
    • 향후 재정의 파일에서 replicaCount를 확장할 수 있습니다.

    이 속성에 대한 자세한 내용은 구성 속성 참조를 참조하세요. 런타임 영역 구성요소 관리도 참조하세요.

  3. 변경사항을 적용합니다. 예를 들면 다음과 같습니다.

    Helm

    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply --datastore -f OVERRIDES_FILE.yaml

Cassandra 수직 확장

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

개요

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

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

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

Cassandra 포드 확장

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 수와 메모리 크기를 포드 리소스에 업데이트합니다. 예를 들어 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. 클러스터에 재정의 파일을 적용합니다.

    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 축소

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

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

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

  1. Cassandra 클러스터가 정상 상태인지 확인하고 축소하기에 충분한 스토리지가 있는지 확인합니다.
  2. overrides.yamlcassandra.replicaCount 속성을 업데이트하세요.
  3. 구성 업데이트를 적용하세요.
  4. 클러스터 구성에 따라 영구 볼륨 신청 또는 볼륨을 삭제합니다.

알아 두어야 할 사항

  • 사용 중단할 노드 이외의 노드가 비정상인 경우 계속 진행하지 마세요. Kubernetes는 클러스터에서 포드를 축소할 수 없습니다.
  • 항상 노드 3개의 배수로 확장 또는 축소됩니다.

Cassandra 축소

  1. 다음 예시와 같이 클러스터가 정상이고 모든 노드가 실행 중인지 확인합니다.
     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
    
  2. Cassandra 클러스터에 축소를 진행할 충분한 스토리지가 있는지 파악합니다. 축소 후 Cassandra 노드는 총 스토리지의 75% 이하여야 합니다.

    예를 들어 클러스터에 6개의 Cassandra 노드가 있고 총 노드 용량이 50% 정도인 경우, 노드를 3개로 축소하면 용량이 100%가 되어 작업을 계속할 여유 공간이 없게 됩니다.

    그러나 9개의 Cassandra 노드가 있고 총 노드 용량이 50% 정도인 경우, 노드를 6개로 축소하면 나머지 각 노드의 용량이 약 75%가 되므로 축소할 수 있습니다.

  3. overrides.yaml 파일에서 cassandra.replicaCount 속성을 업데이트하거나 추가합니다. 예를 들어 현재 노드 수가 9면 6으로 변경합니다.
    cassandra:
      replicaCount: 6 # 
  4. 클러스터에 구성 변경을 적용합니다.

    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
  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
    apigee-cassandra-default-5   1/1     Running   0          23m
    
    
  6. 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
    
    
  7. 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