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:

  1. Nehmen Sie einen Cassandra-Knoten außer Betrieb.
  2. Aktualisieren Sie das Attribut cassandra.replicaCount in overrides.yaml.
  3. Wenden Sie die Konfigurationsaktualisierung an.
  4. Wiederholen Sie diese Schritte für jeden Knoten, den Sie entfernen möchten.
  5. 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

  1. 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
  2. Warten Sie, bis die Außerbetriebnahme abgeschlossen ist, und prüfen Sie, ob der Cluster jetzt einen Knoten weniger hat. Beispiel:
    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. Aktualisieren Sie das Attribut cassandra.replicaCount oder fügen Sie es der Datei overrides.yaml hinzu. Wenn die aktuelle Knotenanzahl beispielsweise 6 beträgt, ändern Sie sie zu 5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. 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
  5. 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
    
    
  6. Wiederholen Sie die Schritte 1 bis 5 für jeden Knoten, den Sie außer Betrieb nehmen möchten.
  7. Wenn Sie die Außerbetriebnahme der Knoten abgeschlossen haben, prüfen Sie, ob der Wert cassandra.replicaCount der Anzahl der vom Befehl nodetool 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
    
    
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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