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 ハイブリッドの本番環境デプロイでは、個別のノードプールを少なくとも 2 つ作成することをおすすめします。1 つはステートフル サービス(Cassandra)用で、もう 1 つは、ステートレス サービス(ランタイム)用です。詳しくは、GKE 本番環境クラスタの要件をご覧ください。

ステートフルな Cassandra ノードプールの場合、最初は 8 つの CPU コアと 30 GB のメモリを使用することをおすすめします。ノードプールがプロビジョニングされると、これらの設定を変更することはできません。本番環境用に Cassandra を構成するもご覧ください。

Cassandra Pod をスケールアップして、より高い CPU とメモリの要件を満たす必要がある場合は、このトピックで説明されている手順を行ってください。

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 ハイブリッドは、Cassandra ノードのリングを StatefulSet として使用します。Cassandra は、ランタイム プレーンの特定の Apigee エンティティに永続ストレージを提供します。Cassandra の詳細については、ランタイム プレーンについてをご覧ください。

Cassandra はリソースを大量に消費するサービスで、他のハイブリッド サービスのある Pod では使用できません。負荷に応じて、クラスタのリング内にある Cassandra ノードの数をスケーリングする必要があります。

Cassandra リングをスケールダウンする一般的な方法は次のとおりです。

  1. Cassandra ノードの 1 つを停止します。
  2. overrides.yamlcassandra.replicaCount プロパティを更新します。
  3. 構成の更新を適用します。
  4. 削除するノードごとに上記の手順を繰り返します。
  5. クラスタ構成に応じて、永続ボリュームのクレームまたはボリュームを削除します。

注意事項

  • このタスクを複数のノードに同時に実行しないでください。1 つのノードの処理が完了してから次のノードに進みます。
  • 停止するノード以外のノードが正常な状態でない場合は、処理を続行しないでください。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. クラスタから Cassandra ノードを停止するには、nodetool コマンドを使用します。
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    次のコマンドでは、名前に最も大きい番号が含まれているノード apigee-cassandra-5 を停止します。

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. 停止が完了したら、クラスタのノードが 1 つ少なくなったことを確認します。次に例を示します。
    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. ノードの停止が完了したら、nodetool status コマンドから返されたノード数と cassandra.replicaCount の値が一致していることを確認します。

    たとえば、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