In diesem Thema wird erläutert, wie Cassandra horizontal und vertikal skaliert und wie Cassandra herunterskaliert wird.
Cassandra-Skalierung skalieren
Cassandra horizontal skalieren
- Prüfen Sie, ob Ihr
apigee-data
-Knotenpool bei Bedarf zusätzliche Kapazitäten hat, bevor Sie Cassandra skalieren. Siehe auch Dedizierte Knotenpools konfigurieren. - Legen Sie den Wert des Konfigurationsattributs
cassandra.replicaCount
in Ihrer Überschreibungsdatei fest. Weitere Informationen zu diesem Attribut finden Sie in der Referenz zu Konfigurationsattributen. Siehe auch Komponenten der Laufzeitebene verwalten. - Änderungen anwenden Beispiele:
$APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml
Cassandra-Skalierung vertikal skalieren
In diesem Abschnitt wird erläutert, wie Sie die Cassandra-Pods vertikal skalieren, um höhere CPU- und Speicheranforderungen zu erfüllen.
Übersicht
Für eine Bereitstellung mit Apigee hybriden Produktionsumgebungen empfehlen wir, dass Sie mindestens zwei separate Knotenpools erstellen: einen für zustandsorientierte Dienste (Cassandra) und einen für zustandslose Dienste (Laufzeit). Ein Beispiel finden Sie unter Anforderungen an GKE-Produktionscluster.
Für den zustandsorientierten Knotenpool von Cassandra empfehlen wir, mit acht CPU-Kernen und 30 GB Arbeitsspeicher zu beginnen. Nachdem der Knotenpool bereitgestellt wurde, können diese Einstellungen nicht mehr geändert werden. Siehe auch Cassandra für die Produktion konfigurieren.
Wenn Sie die Cassandra-Pods hochskalieren müssen, um höhere CPU- und Speicheranforderungen zu erfüllen, folgen Sie den in diesem Thema beschriebenen Schritten.
Cassandra-Pods skalieren
Führen Sie die folgenden Schritte aus, um die CPU und den Arbeitsspeicher für den zustandsorientierten Knotenpool für Cassandra zu erhöhen:
- Folgen Sie der Anleitung Ihrer Kubernetes-Plattform, um dem Cluster einen neuen Knotenpool hinzuzufügen. Unterstützte Plattformen werden in der Installationsanleitung aufgeführt.
- Prüfen Sie, ob der neue Knotenpool bereit ist:
kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE
Beispielbefehl:
kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new
Beispielausgabe:
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
- Aktualisieren Sie die Überschreibungsdatei, um den neuen Knotenpool für Cassandra zu verwenden, und aktualisieren Sie die Pod-Ressourcen auf die erhöhte CPU-Anzahl und die gewünschte Speichergröße. Verwenden Sie für einen GKE-Cluster beispielsweise eine Konfiguration, die der folgenden ähnelt.
Wenn Sie eine andere Kubernetes-Plattform verwenden, müssen Sie den Wert
apigeeData.key
entsprechend anpassen: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
Beispiel:
nodeSelector: requiredForScheduling: true apigeeData: key: "cloud.google.com/gke-nodepool" value: "apigee-data-new" cassandra: resources: requests: cpu: 14 memory: 16Gi
- Wenden Sie die Überschreibungsdatei auf den Cluster an:
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
Wenn Sie diese Schritte ausführen, werden die Cassandra-Pods auf den neuen Knotenpool übertragen.
Cassandra herunterskalieren
Apigee Hybrid verwendet einen Ring von Cassandra-Knoten als StatefulSet. Cassandra bietet nichtflüchtigen Speicher für bestimmte Apigee-Entitäten auf Laufzeitebene. Weitere Informationen zu Cassandra finden Sie unter Informationen zur Laufzeitebene.
Cassandra ist ein ressourcenintensiver Dienst und sollte nicht in einem Pod mit anderen Hybriddiensten bereitgestellt werden. Je nach Last kann es sinnvoll sein, die Anzahl der Cassandra-Knoten im Ring in Ihrem Cluster herunterzuskalieren.
So skalieren Sie einen Cassandra-Ring allgemein herunter:
- Nehmen Sie einen Cassandra-Knoten außer Betrieb.
- Aktualisieren Sie das Attribut
cassandra.replicaCount
inoverrides.yaml
. - Wenden Sie die Konfigurationsaktualisierung an.
- Wiederholen Sie diese Schritte für jeden Knoten, den Sie entfernen möchten.
- Löschen Sie je nach Clusterkonfiguration den Anspruch auf ein nichtflüchtiges Volume oder ein Volume.
Das sollten Sie wissen
- Führen Sie diese Aufgabe auf einem Knoten aus, bevor Sie mit dem nächsten Knoten fortfahren.
- Wenn ein anderer Knoten außer dem Knoten, der außer Betrieb genommen werden soll, fehlerhaft ist, fahren Sie nicht fort. Kubernetes kann die Pods aus dem Cluster nicht herunterskalieren.
- Skalieren Sie immer um einen Faktor von drei Knoten herunter oder hoch.
Vorbereitung
Bevor Sie die Anzahl der Cassandra-Knoten im Ring herunterskalieren, prüfen Sie, ob der Cluster fehlerfrei ist und alle Knoten betriebsbereit sind, wie im folgenden Beispiel gezeigt:
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-Knoten außer Betrieb nehmen
-
Nehmen Sie die Cassandra-Knoten aus dem Cluster mit dem Befehl nodetool außer Betrieb.
kubectl -n yourNamespace exec -it nodeName nodetool decommission
Mit diesem Befehl wird zum Beispiel
apigee-cassandra-5
, der Knoten mit dem höchsten Zahlenwert im Namen, außer Betrieb genommen:kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- Warten Sie, bis die Außerbetriebnahme abgeschlossen ist, und prüfen Sie, ob der Cluster jetzt einen Knoten weniger hat. Beispiele:
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
- Aktualisieren Sie das Attribut
cassandra.replicaCount
oder fügen Sie es der Dateioverrides.yaml
hinzu. Wenn die aktuelle Knotenanzahl beispielsweise 6 beträgt, ändern Sie sie zu 5:cassandra: replicaCount: 5 # (n-1 5 in this example)
- Wenden Sie die Konfiguration auf Ihren Cluster an:
./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
- Prüfen Sie, ob alle verbleibenden Cassandra-Knoten ausgeführt werden:
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
- Wiederholen Sie die Schritte 1 bis 5 für jeden Knoten, den Sie außer Betrieb nehmen möchten.
- Wenn Sie die Außerbetriebnahme der Knoten abgeschlossen haben, prüfen Sie, ob der Wert
cassandra.replicaCount
der Anzahl der vom Befehlnodetool status
zurückgegebenen Knoten entspricht.Wenn Sie Cassandra beispielsweise auf drei Knoten herunterskaliert haben, gehen Sie so vor:
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
- Nachdem der Cassandra-Cluster verkleinert wurde, löschen Sie den PVC (PersistentVolumeClaim), damit das nächste Hochskalierungsereignis nicht dasselbe nichtflüchtige Volume und die zuvor erstellten Daten verwendet.
Rufen Sie die Namen der pvcs ab:
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
In diesem Beispiel entsprechen die folgenden PVCs den drei außer Betrieb genommenen Knoten:
cassandra-data-apigee-cassandra-5
cassandra-data-apigee-cassandra-4
cassandra-data-apigee-cassandra-3
- Löschen Sie die PVCs:
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
- Prüfen Sie, ob der PVC gelöscht wurde:
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
- Wenn Sie die Anthos-Installation verwenden, löschen Sie das nichtflüchtige Volume mit derselben Abfolge aus dem Anthos Kubernetes-Cluster.
Rufen Sie die Namen der nichtflüchtigen Volumes ab:
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
In diesem Beispiel entsprechen die folgenden Volumes den drei außer Betrieb genommenen Knoten:
- 5:
pvc-354afa95-81a3-11e9-8862-42010a8e014a
- 4:
pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
- 3:
pvc-d29ba265-81a2-11e9-8862-42010a8e014a
- 5:
- Löschen Sie die nichtflüchtigen Volumes:
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
- Prüfen Sie, ob die nichtflüchtigen Volumes gelöscht wurden:
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