Configura Cassandra para la producción

En este tema, se describen los pasos que debes seguir a fin de configurar el componente de base de datos de Cassandra para una instalación de producción de Apigee Hybrid.

Garantizar la alta disponibilidad

Los clústeres de Cassandra necesitan tres zonas de disponibilidad para mantener la disponibilidad en un entorno de producción. Si una zona falla, las zonas restantes continuarán respondiendo las solicitudes, mientras que la zona restante vuelve a estar en línea. Si dos o más zonas fallan, Cassandra no podrá responder a las solicitudes hasta que al menos dos zonas estén en línea. Apigee recomienda que las zonas vuelvan a estar en línea en un plazo de tres horas para minimizar el riesgo de actualizaciones de datos faltantes.

Establece la configuración de almacenamiento de Cassandra

Para una instalación de producción de Apigee Hybrid, Google recomienda que agregues la siguiente configuración de almacenamiento y montón a tu archivo de anulación y la apliques al clúster:

cassandra:
  ...
  replicaCount: 3
  storage:
    storageclass: your-preferred-ssd-storage #If not using default storage for your cluster
    capacity: 500Gi
  resources:
    requests:
      cpu: 7
      memory: 15Gi
  maxHeapSize: 8192M
  heapNewSize: 1200M

Aplica los cambios a Cassandra con el siguiente comando:

helm upgrade datastore apigee-datastore/ \
--namespace apigee \
--atomic \
-f OVERRIDES_FILE.yaml

replicaCount

El valor de replicaCount debe ser un múltiplo de 3. Para determinar el valor replicaCount deseado, ten en cuenta lo siguiente:

  • Estima las demandas de tráfico para tus proxies.
  • Realiza una prueba de carga y haz predicciones razonables sobre el uso de CPU.
  • Puedes especificar diferentes valores replicaCount en diferentes regiones.
  • Puedes expandir el replicaCount en el futuro en el archivo de anulación.

storageclass

Para la producción, el almacenamiento de Cassandra debe ser una StorageClass SSD. Establece el valor de storageclass si no usas la StorageClass predeterminada de Kubernetes para tu clúster. Puedes verificar la StorageClass predeterminada con el siguiente comando.

kubectl get storageclass

Deberías obtener un resultado similar al siguiente:

NAME                     PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
premium-rwo              pd.csi.storage.gke.io   Delete          WaitForFirstConsumer   true                   6d23h
standard                 kubernetes.io/gce-pd    Delete          Immediate              true                   6d23h
standard-rwo (default)   pd.csi.storage.gke.io   Delete          WaitForFirstConsumer   true                   6d23h

Sigue las instrucciones en Configuración de StorageClass si quieres cambiar la StorageClass de Kubernetes predeterminada.

Para verificar la configuración storageclass actual, ejecuta el siguiente comando en tu clúster:

kubectl get pvc -n NAMESPACE cassandra-data-apigee-cassandra-default-0 -o=jsonpath="{['.spec.storageClassName', '.metadata.annotations.volume\.beta\.kubernetes\.io/storage-class']}"
  

capacity

Para las instalaciones de producción, Google recomienda una capacidad de almacenamiento de al menos 500Gi (gibibytes). Puedes cambiar la capacidad de almacenamiento en respuesta a las necesidades de almacenamiento de tu clúster. Consulta las instrucciones en Expande volúmenes persistentes de Cassandra para cambiar la capacidad de almacenamiento.

Para verificar la configuración de capacidad actual, ejecuta el siguiente comando en tu clúster:

kubectl get pvc -n NAMESPACE cassandra-data-apigee-cassandra-default-0 -o=jsonpath='{.spec.resources.requests.storage}'
  

cpu y memory

Para las instalaciones de producción, Google recomienda al menos 7 CPU y un mínimo de 15Gi (gibibytes) por Pod. Cuando especifiques cassandra.resources.requests.cpu y cassandra.resources.requests.memory, considera el volumen de tráfico y las demandas de CPU y memoria de tus proxies.

Para verificar la configuración de CPU actual, ejecuta el siguiente comando en tu clúster:

kubectl get pods -n NAMESPACE apigee-cassandra-default-0 -o=jsonpath='{.spec.containers[].resources.requests.cpu}'
  

Para verificar la configuración de memoria actual, ejecuta el siguiente comando en tu clúster:

kubectl get pods -n NAMESPACE apigee-cassandra-default-0 -o=jsonpath='{.spec.containers[].resources.requests.memory}'
  

maxHeapSize y heapNewSize

Estas propiedades determinan la cantidad máxima de memoria asignada a los procesos de Cassandra y la cantidad en la que se aumenta la memoria, respectivamente, en megabytes (los tamaños del montón se especifican en megabytes, no en mebibytes). Para entornos de producción, Google recomienda los siguientes valores:

  • maxHeapSize: 8192M
  • heapNewSize: 1200M

Consulta la documentación de tu proveedor de plataformas de Kubernetes para obtener valores de tamaño de montón óptimos.

Para verificar la configuración maxHeapSize actual, ejecuta el siguiente comando en tu clúster:

kubectl get sts -n NAMESPACE apigee-cassandra-default -o=jsonpath='{.spec.template.spec.containers[].env[?(@.name=="MAX_HEAP_SIZE")]}'
  

Para verificar la configuración heapNewSize actual, ejecuta el siguiente comando en tu clúster:

kubectl get sts -n NAMESPACE apigee-cassandra-default -o=jsonpath='{.spec.template.spec.containers[].env[?(@.name=="HEAP_NEWSIZE")]}'
  

Para obtener más información sobre estas opciones de configuración, consulta la referencia sobre las propiedades de la configuración.

Usa almacenamiento SSD para implementaciones de producción

Para la base de datos Cassandra, el entorno de ejecución híbrido solo admite volúmenes persistentes creados de forma dinámica para almacenar datos. Las unidades de disco de estado sólido (SSD) locales no son compatibles.

Si actualmente no tienes un SSD configurado para Cassandra, debes configurar una definición de StorageClass respaldada por una unidad de estado sólido (SSD) y hacer que sea la clase predeterminada. Consulta Configuración de StorageClass para obtener pasos detallados.

Sigue las instrucciones en Configuración de StorageClass si quieres cambiar la StorageClass de Kubernetes predeterminada.