Escalamiento de Cassandra

En este tema, se describe cómo escalar Cassandra de forma horizontal y vertical, y cómo reducir la escala verticalmente de Cassandra.

Escala Cassandra de forma horizontal

Escala Cassandra horizontalmente

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

Escala Cassandra forma vertical

En esta sección, se explica cómo escalar de manera vertical los Pods de Cassandra para cumplir con los requisitos de CPU y memoria más altos.

Descripción general

En el caso de una implementación de producción de Apigee Hybrid, recomendamos que crees al menos dos grupos de nodos diferentes: uno para los servicios con estado (Cassandra) y otro para los servicios sin estado (entorno de ejecución). Por ejemplo, consulta Requisitos de los clústeres de producción de GKE.

Para el grupo de nodos de Cassandra con estado, recomendamos comenzar con 8 núcleos de CPU y 30 GB de memoria. Una vez que se aprovisiona el grupo de nodos, no se puede cambiar esta configuración. Consulta también Configura Cassandra para la producción.

Si necesitas escalar verticalmente los pods de Cassandra para cumplir con los requisitos de CPU y memoria más altos, sigue los pasos que se describen en este tema.

Escala de forma vertical los pods de Cassandra

Sigue estos pasos a fin de aumentar la CPU y la memoria para el grupo de nodos con estado usado para Cassandra:

  1. Sigue las instrucciones de la plataforma de Kubernetes para agregar un nuevo grupo de nodos al clúster. Las plataformas compatibles se enumeran en las instrucciones de instalación.
  2. Verifica que el grupo de nodos nuevo 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

    Salida de 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 a fin de usar el nuevo grupo de nodos para Cassandra y actualiza los recursos del Pod al mayor recuento de CPU y el tamaño de memoria que deseas usar. Por ejemplo, para un clúster de GKE, usa una configuración similar a la siguiente: Si estás en otra plataforma de Kubernetes, debes ajustar el valor apigeeData.key según corresponda:
    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 manifiesto al clúster:
    $APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore

Cuando completes estos pasos, los Pods de Cassandra comenzarán a propagarse al nuevo grupo de nodos.

Reduce el escalamiento de Cassandra

Apigee Hybrid usa un anillo de nodos de Cassandra como un StatefulSet. Cassandra proporciona almacenamiento persistente para ciertas entidades de Apigee en el plano de entorno de ejecución. Para obtener más información sobre Cassandra, consulta Información sobre el plano de entorno de ejecución.

Cassandra es un servicio con uso intensivo de recursos y no se debe implementar en un Pod con cualquier otro servicio híbrido. Según la carga, te recomendamos escalar la cantidad de nodos de Cassandra en el círculo de abajo en tu clúster.

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

  1. Quita un nodo de Cassandra
  2. Actualiza la propiedad cassandra.replicaCount en overrides.yaml.
  3. Aplica la actualización de configuración.
  4. Repite estos pasos para cada nodo que desees quitar.
  5. Borra el volumen o la reclamación de volumen persistente, según la configuración de tu clúster.

Qué debes saber

  • Realiza esta tarea en un nodo a la vez antes de continuar con el nodo siguiente.
  • Si un nodo que no es el que se retirará de servicio no está en buen estado, no continúes. Kubernetes no podrá reducir la escala de los Pods desde el clúster.
  • Siempre reduce la escala de forma horizontal o vertical utilizando un factor de tres nodos.

Requisitos previos

Antes de reducir la cantidad de nodos de Cassandra en el anillo, verifica si el clúster está en buen estado y que todos los nodos están 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

Inhabilita los nodos de Cassandra

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

    Por ejemplo, este comando inhabilita apigee-cassandra-5, el nodo con el valor de número más alto en el nombre:

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. Espera a que se complete la inhabilitación y verifica que el clúster tenga 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. Actualiza o agrega la propiedad cassandra.replicaCount en el archivo overrides.yaml. Por ejemplo, si el recuento 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 1 al 5 para cada nodo que desees inhabilitar.
  7. Cuando termines de inhabilitar los nodos, verifica que el valor cassandra.replicaCount sea igual a la cantidad de nodos que muestra el comando nodetool status.

    Por ejemplo, si redujiste 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. Después de reducir el tamaño del clúster de Cassandra, asegúrate de borrar pvc (PersistentVolumeClaim) para garantizar que el próximo evento de escalamiento vertical no use el mismo volumen persistente y los datos creados anteriormente.

    Obtén los nombres de los 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

    En este ejemplo, los siguientes pvcs corresponden a los tres nodos dados:

    • cassandra-data-apigee-cassandra-5
    • cassandra-data-apigee-cassandra-4
    • cassandra-data-apigee-cassandra-3
  9. Borra los 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 que se haya borrado 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 usas la instalación de Anthos, borra el volumen persistente del clúster de Anthos Kubernetes con 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 inhabilitados:

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