Scalabilità di Cassandra

Questo argomento illustra come fare lo scale up di Cassandra sia orizzontale che verticale e come fare lo scale down di Cassandra.

Scalabilità orizzontale di Cassandra

per lo scale up di Cassandra in orizzontale

  1. Assicurati che il pool di nodi apigee-data abbia capacità aggiuntiva, se necessario, prima di scalare Cassandra. Vedi anche Configurare pool di nodi dedicati.
  2. Imposta il valore della proprietà di configurazione cassandra.replicaCount nel file degli override. Per informazioni su questa proprietà, consulta Riferimento sulla proprietà di configurazione. Vedi anche Gestire i componenti del piano di runtime.
  3. Applica le modifiche. Ad esempio:
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

Scalabilità verticale di Cassandra

Questa sezione spiega come scalare verticalmente i pod Cassandra per soddisfare requisiti di CPU e memoria più elevati.

Panoramica

Per un deployment di produzione ibrida Apigee, ti consigliamo di creare almeno due pool di nodi separati: uno per i servizi stateful (Cassandra) e uno per i servizi stateless (runtime). Ad esempio, vedi Requisiti per i cluster di produzione GKE.

Per il pool di nodi stateful Cassandra, consigliamo di iniziare con 8 core CPU e 30 GB di memoria. Una volta eseguito il provisioning del pool di nodi, queste impostazioni non possono essere modificate. Vedi anche Configurare Cassandra per la produzione.

Se devi fare lo scale up dei pod Cassandra per soddisfare requisiti di CPU e memoria più elevati, segui i passaggi descritti in questo argomento.

Fare lo scale up dei pod Cassandra

Segui questi passaggi per aumentare la CPU e la memoria per il pool di nodi stateful utilizzato per Cassandra:

  1. Segui le istruzioni della piattaforma Kubernetes per aggiungere un nuovo pool di nodi al cluster. Le piattaforme supportate sono elencate nelle istruzioni di installazione.
  2. Verifica che il nuovo pool di nodi sia pronto:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    Comando di esempio:

    kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new

    Output di esempio:

    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. Aggiorna il file degli override per utilizzare il nuovo pool di nodi per Cassandra e aggiorna le risorse pod in base al numero di CPU e alle dimensioni della memoria aumentati che vuoi utilizzare. Ad esempio, per un cluster GKE, utilizza una configurazione simile alla seguente. Se utilizzi un'altra piattaforma Kubernetes, devi regolare il valore apigeeData.key di conseguenza:
    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
    

    Ad esempio:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
    
  4. Applica il file degli override al cluster:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

Una volta completati questi passaggi, i pod Cassandra inizieranno a eseguire il rollback al nuovo pool di nodi.

Scale down di Cassandra

Apigee hybrid utilizza un anello di nodi Cassandra come StatefulSet. Cassandra fornisce archiviazione permanente per alcune entità Apigee nel piano di runtime. Per saperne di più su Cassandra, consulta Informazioni sul piano di runtime.

Cassandra è un servizio che richiede molte risorse e non deve essere implementato in un pod con altri servizi ibridi. A seconda del carico, ti consigliamo di scalare il numero di nodi Cassandra nell'anello del tuo cluster.

Il processo generale per lo scale down di un anello Cassandra è:

  1. Dismetti un nodo Cassandra.
  2. Aggiorna la proprietà cassandra.replicaCount in overrides.yaml.
  3. Applica l'aggiornamento della configurazione.
  4. Ripeti questi passaggi per ciascun nodo da rimuovere.
  5. Elimina la richiesta di volume permanente o il volume, a seconda della configurazione del cluster.

Informazioni importanti

  • Esegui questa attività su un nodo alla volta prima di passare al nodo successivo.
  • Se qualsiasi nodo diverso da quello da dismettere non è integro, non continuare. Kubernetes non sarà in grado di eseguire il downgrade dei pod dal cluster.
  • Fai sempre fare lo scale down o lo scale up di un fattore di tre nodi.

Prerequisiti

Prima di fare lo scale down del numero di nodi Cassandra nel ring, verifica che il cluster sia integro e che tutti i nodi siano attivi e in esecuzione, come illustrato nell'esempio seguente:

 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

Dismetti i nodi Cassandra

  1. Dismetti i nodi Cassandra dal cluster utilizzando il comando nodetool.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    Ad esempio, questo comando rimuove apigee-cassandra-5, il nodo con il valore numerico più alto nel nome:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. Attendi il completamento del ritiro e verifica che il cluster ora abbia un nodo in meno. Ad esempio:
    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. Aggiorna o aggiungi la proprietà cassandra.replicaCount nel file overrides.yaml. Ad esempio, se il numero attuale di nodi è 6, modificalo in 5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. Applica la modifica alla configurazione al cluster:
    ./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. Verifica che tutti i nodi Cassandra rimanenti siano in esecuzione:
    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. Ripeti i passaggi da 1 a 5 per ciascun nodo da rimuovere.
  7. Al termine del ritiro dei nodi, verifica che il valore cassandra.replicaCount corrisponda al numero di nodi restituiti dal comando nodetool status.

    Ad esempio, se hai fatto lo scale down di Cassandra a tre nodi:

    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. Dopo aver ridimensionato il cluster Cassandra, assicurati di eliminare il pvc (PersistentVolumeClaim) per assicurarti che il successivo evento di scale up non utilizzi lo stesso volume permanente e i dati creati in precedenza.

    Trova i nomi dei 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

    In questo esempio, i seguenti PVC corrispondono ai tre nodi dismessi:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. Elimina i file 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. Verifica che la PVC sia stata eliminata:
    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. Se utilizzi l'installazione di Anthos, elimina il volume permanente dal cluster Anthos Kubernetes utilizzando la stessa sequenza.

    Ottieni i nomi dei volumi permanenti:

    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 questo esempio, i volumi seguenti corrispondono ai tre nodi dismessi:

    • 5: pvc-354afa95-81a3-11e9-8862-42010a8e014a
    • 4: pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    • 3: pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  12. Elimina i volumi permanenti:
    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. Verifica che i volumi permanenti siano stati eliminati:
    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