このトピックでは、Cassandra の水平方向のスケールアップと垂直方向のスケールアップを行う方法、Cassandra をスケールダウンする方法について説明します。
Cassandra の水平方向のスケーリング
Cassandra を水平方向にスケールアップするには
- Cassandra をスケーリングする前に、必要に応じて追加の容量を
apigee-data
ノードプールに設定してください。専用ノードプールを構成するもご覧ください。 - オーバーライド ファイルで
cassandra.replicaCount
構成プロパティの値を設定します。このプロパティの詳細については、構成プロパティのリファレンスをご覧ください。ランタイム プレーン コンポーネントの管理もご覧ください。 - 変更を適用します。次に例を示します。
$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 とメモリを増やす手順は次のとおりです。
- 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 数とメモリサイズに 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
- オーバーライド ファイルをクラスタに適用します。
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
この手順を完了すると、Cassandra Pod が新しいノードプールに切り替わります。
Cassandra のスケールダウン
Apigee ハイブリッドは、Cassandra ノードのリングを StatefulSet として使用します。Cassandra は、ランタイム プレーンの特定の Apigee エンティティに永続ストレージを提供します。Cassandra の詳細については、ランタイム プレーンについてをご覧ください。
Cassandra はリソースを大量に消費するサービスで、他のハイブリッド サービスのある Pod では使用できません。負荷に応じて、クラスタのリング内にある Cassandra ノードの数をスケーリングする必要があります。
Cassandra リングをスケールダウンする一般的な方法は次のとおりです。
- Cassandra ノードの 1 つを停止します。
overrides.yaml
のcassandra.replicaCount
プロパティを更新します。- 構成の更新を適用します。
- 削除するノードごとに上記の手順を繰り返します。
- クラスタ構成に応じて、永続ボリュームのクレームまたはボリュームを削除します。
注意事項
- このタスクを複数のノードに同時に実行しないでください。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 ノードを停止する
-
クラスタから Cassandra ノードを停止するには、nodetool コマンドを使用します。
kubectl -n yourNamespace exec -it nodeName nodetool decommission
次のコマンドでは、名前に最も大きい番号が含まれているノード
apigee-cassandra-5
を停止します。kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- 停止が完了したら、クラスタのノードが 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
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 を繰り返します。
- ノードの停止が完了したら、
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
- 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