Escalar Cassandra

En este tema se explica cómo escalar Cassandra horizontal y verticalmente, así como cómo reducir la escala de Cassandra.

Escalar Cassandra horizontalmente

Para escalar Cassandra horizontalmente

  1. Asegúrate de que tu apigee-data grupo de nodos tenga capacidad adicional, según sea necesario, antes de escalar Cassandra. Consulta también Configurar grupos de nodos dedicados.
  2. Asigna el valor de la propiedad de configuración cassandra.replicaCount en el archivo de anulaciones. Para obtener información sobre esta propiedad, consulta la referencia de la propiedad de configuración. Consulta también Gestionar componentes del plano del entorno de ejecución.
  3. Aplica los cambios. Por ejemplo:
    $APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml

Escalar Cassandra verticalmente

En esta sección se explica cómo escalar verticalmente los pods de Cassandra para adaptarse a los requisitos de CPU y memoria más altos.

Información general

En una implementación de producción híbrida de Apigee, te recomendamos que crees al menos dos grupos de nodos independientes: uno para los servicios con estado (Cassandra) y otro para los servicios sin estado (tiempo de ejecución). Por ejemplo, consulta los requisitos de los clústeres de producción de GKE.

En el caso del grupo de nodos de Cassandra con estado, te recomendamos que empieces con 8 núcleos de CPU y 30 GB de memoria. Una vez aprovisionado el grupo de nodos, estos ajustes no se pueden cambiar. Consulta también cómo configurar Cassandra para el entorno de producción.

Si necesitas aumentar la escala de los pods de Cassandra para adaptarlos a los requisitos de CPU y memoria, sigue los pasos que se describen en este tema.

Escalar verticalmente los pods de Cassandra

Sigue estos pasos para aumentar la CPU y la memoria del grupo de nodos con estado que se usa para Cassandra:

  1. Sigue las instrucciones de tu plataforma de Kubernetes para añadir un nuevo grupo de nodos al clúster. Las plataformas admitidas se indican en las instrucciones de instalación.
  2. Comprueba que el nuevo grupo de nodos esté listo:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    Comando de ejemplo:

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

    Ejemplo:

    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. Actualiza el archivo de anulaciones para usar el nuevo grupo de nodos de Cassandra y actualiza los recursos del pod con el aumento del número de CPUs y del tamaño de la memoria que quieras usar. Por ejemplo, en un clúster de GKE, utiliza una configuración similar a la siguiente. Si usas otra plataforma de Kubernetes, debes ajustar el valor de apigeeData.key en consecuencia:
    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
    

    Por ejemplo:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
    
  4. Aplica el archivo de anulaciones al clúster:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

Cuando completes estos pasos, los pods de Cassandra empezarán a migrar al nuevo grupo de nodos.

Reducir la escala de Cassandra

Apigee Hybrid utiliza un anillo de nodos de Cassandra como StatefulSet. Cassandra proporciona almacenamiento persistente para determinadas entidades de Apigee en el plano del entorno de ejecución. Para obtener más información sobre Cassandra, consulta Acerca del plano de tiempo de ejecución.

Cassandra es un servicio que requiere muchos recursos y no se debe implementar en un pod con ningún otro servicio híbrido. En función de la carga, puede que quieras reducir el número de nodos de Cassandra del anillo en tu clúster.

El proceso general para reducir la escala de un anillo de Cassandra es el siguiente:

  1. Retira un nodo de Cassandra.
  2. Actualiza la propiedad cassandra.replicaCount en overrides.yaml.
  3. Aplica la actualización de la configuración.
  4. Repite estos pasos con cada nodo que quieras quitar.
  5. Elimina la reclamación o el volumen persistente, en función de la configuración de tu clúster.

Información que debes saber

  • Realiza esta tarea en un nodo a la vez antes de continuar con el siguiente.
  • Si algún nodo que no sea el que se va a retirar no está en buen estado, no continúes. Kubernetes no podrá reducir la escala de los pods del clúster.
  • Siempre se reduce o aumenta en un factor de tres nodos.

Requisitos previos

Antes de reducir el número de nodos de Cassandra en el anillo, comprueba si el clúster está en buen estado y si todos los nodos están activos y en funcionamiento, como se muestra en el siguiente ejemplo:

 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

Retirar los nodos de Cassandra

  1. Retira los nodos de Cassandra del clúster con el comando nodetool.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    Por ejemplo, este comando retira apigee-cassandra-5, el nodo con el valor numérico más alto en el nombre:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. Espera a que se complete la retirada y comprueba que el clúster tiene un nodo menos. Por ejemplo:
    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. Actualice o añada la propiedad cassandra.replicaCount en su archivo overrides.yaml. Por ejemplo, si el número de nodos actual es 6, cámbialo a 5:
    cassandra:
      replicaCount: 5 # (n-1 5 in this example)
  4. Aplica el cambio de configuración al clúster:
    ./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 que todos los nodos de Cassandra restantes se estén ejecutando:
    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. Repite los pasos del 1 al 5 con cada nodo que quieras retirar.
  7. Cuando hayas terminado de retirar los nodos, comprueba que el valor de cassandra.replicaCount sea igual al número de nodos devueltos por el comando nodetool status.

    Por ejemplo, si has reducido la escala de Cassandra a tres nodos:

    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. Una vez que se haya reducido el tamaño del clúster de Cassandra, elimina el pvc (PersistentVolumeClaim) para asegurarte de que el siguiente evento de aumento de tamaño no use el mismo volumen persistente y los datos creados anteriormente.

    Obtén los nombres de los PVCs:

    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

    En este ejemplo, los siguientes PVCs corresponden a los tres nodos retirados:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. Elimina los 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. Verifica que se ha eliminado el 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. Si estás usando la instalación de Anthos, elimina el volumen persistente del clúster de Kubernetes de Anthos siguiendo la misma secuencia.

    Obtén los nombres de los volúmenes persistentes:

    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

    En este ejemplo, los siguientes volúmenes corresponden a los tres nodos retirados:

    • 5: pvc-354afa95-81a3-11e9-8862-42010a8e014a
    • 4: pvc-0675a0ff-81a3-11e9-8862-42010a8e014a
    • 3: pvc-d29ba265-81a2-11e9-8862-42010a8e014a
  12. Elimina los volúmenes persistentes:
    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 que los volúmenes persistentes se hayan eliminado:
    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