Copia de seguridad y restablecimiento de CSI de Cassandra

Puedes crear una copia de seguridad de tus datos híbridos y restablecerlos con instantáneas de CSI (interfaz de almacenamiento de contenedores). La copia de seguridad de CSI activa las instantáneas de disco que toma el sistema de almacenamiento subyacente con el controlador de CSI proporcionado. La copia de seguridad de CSI no necesita un bucket de Google Cloud Storage ni un servidor remoto para almacenar datos de copia de seguridad.

Se recomienda la copia de seguridad de CSI para instancias de Hybrid alojadas en Google Cloud, AWS o Azure.

En esta página, se describen los pasos para usar la copia de seguridad y restablecimiento de CSI Hybrid. Para obtener una descripción general de las copias de seguridad y el restablecimiento de Hybrid en general, consulta la Descripción general de la copia de seguridad y restablecimiento de Cassandra.

Limitaciones de copias de seguridad y restablecimientos

Ten en cuenta estas limitaciones cuando uses la copia de seguridad y restablecimiento de CSI:

  • El controlador de CSI que usa la clase de almacenamiento configurada debe admitir instantáneas de CSI. Consulta esta lista de controladores de CSI de Kubernetes para obtener información sobre los controladores.
  • No todas las plataformas son compatibles. Solo se admiten las plataformas de Google Cloud, AWS y Azure.
  • OpenShift Container Platform no es compatible debido a las limitaciones de instantáneas de volumen.
  • Solo se admiten plataformas en la nube. Las plataformas locales no son compatibles.
  • Los datos de la copia de seguridad de CSI y los datos de la copia de seguridad híbrida que no es de CSI no son compatibles. Las copias de seguridad que no son de CSI no se pueden usar con el restablecimiento de CSI y las copias de seguridad de CSI no se pueden usar con el restablecimiento que no es de CSI.
  • La instalación y la funcionalidad del controlador de CSI es responsabilidad del proveedor del controlador de CSI.
  • Los usuarios son responsables de garantizar que haya recursos adecuados del clúster disponibles para aprovisionar instantáneas de CSI.
  • Los usuarios son responsables de quitar los datos de instantáneas anteriores.

Configura copias de seguridad de CSI

Para programar copias de seguridad Hybrid con CSI, sigue estos pasos:

  1. Si no configuraste una copia de seguridad Hybrid, haz lo siguiente:
    1. Ejecuta el siguiente comando de create-service-account para crear una cuenta de servicio de Google Cloud con el rol estándar roles/storage.objectAdmin. Este rol de la cuenta de servicio te permite escribir datos de copia de seguridad en Cloud Storage. Ejecuta el siguiente comando en el directorio correspondiente a tu herramienta de administración:
      • Charts de Helm: $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/
      • apigeectl: HYBRID_BASE_DIRECTORY/hybrid-files/
      ./tools/create-service-account --env non-prod --dir ./service-accounts

      Con este comando, se crea una sola cuenta de servicio llamada apigee-non-prod para usarla en entornos que no son de producción y se coloca el archivo de claves descargado en el directorio ./service-accounts.

      Para obtener más información sobre las cuentas de servicio de Google Cloud, consulta Crea y administra cuentas de servicio.

    2. El comando create-service-account guarda un archivo JSON que contiene la clave privada de la cuenta de servicio. El archivo se guarda en el mismo directorio en el que se ejecuta el comando. Necesitarás la ruta a este archivo en los siguientes pasos.
  2. Abre el archivo overrides.yaml. Configura los siguientes parámetros, como se muestra en Ejemplo de archivos anulados.

    1. Establece los parámetros generales que se muestran a continuación en el bloque backup. Si ya configuraste estos parámetros para la solución de copia de seguridad Hybrid que no es de CSI, puedes usar los mismos parámetros para tus instantáneas de CSI. Consulta la tabla de referencia de propiedades de copia de seguridad para obtener más información sobre cada valor.

      Para backup:

      • enabled: Se configura como true para habilitar las copias de seguridad programadas.
      • pullPolicy en imagen: Se configura como Always.
      • schedule: Proporciona una programación de expresión cron.
    2. Establece estos parámetros para la copia de seguridad específica de CSI:
      • Valores de grupos de almacenamiento de Cassandra: La clase de almacenamiento de Cassandra configurada debe admitir instantáneas de CSI para que la copia de seguridad y restablecimiento de CSI funcione. Para verificar si una clase de almacenamiento admite instantáneas de CSI, ejecuta el siguiente comando para obtener las clases de almacenamiento disponibles:
        kubectl get sc
        Observa el resultado del “Aprovisionador” para cada clase de almacenamiento. Los aprovisionadores que usan CSI suelen tener una parte “.csi”. en su nombre, como "pd.csi.storage.gke.io". Busca el nombre del aprovisionador en esta lista del controlador de CSI de Kubernetes. Si la columna “Otras funciones” para el aprovisionador contiene la palabra “SNAPSHOT”, entonces la clase de almacenamiento que usa el aprovisionador admite instantáneas de CSI.

        Agrega estos parámetros al grupo de almacenamiento. Ambos valores son obligatorios.

        • storageclass: un nombre de clase de almacenamiento habilitado para una instantánea de CSI.
        • capacidad: la capacidad del disco.
      • Tipo de proveedor de servicios en la nube:

        Una vez que se haya verificado la función de la instantánea de CSI, modifica el archivo de anulaciones para usar la copia de seguridad y restablecimiento de CSI:

        • cloudProvider: Configura cloudProvider en backup y restore en CSI.

Ejemplo de configuración de copia de seguridad

En esta sección, se muestran las partes relacionadas con la copia de seguridad de un archivo overrides.yaml de ejemplo.
cassandra:
  hostNetwork: false
  replicaCount: 3
  storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
    pullPolicy: Always

  backup:
    enabled: true
    image:
      pullPolicy: Always
    cloudProvider: "CSI"
    schedule: "0 * * 11 *"

Inicia una copia de seguridad manual

Las copias de seguridad de CSI se generan de forma automática según la programación cron establecida en el archivo overrides.yaml.

Para iniciar una copia de seguridad manual de CSI, usa este comando:

kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup BACKUP_POD_NAME
En el ejemplo anterior, BACKUP_POD_NAME es el nombre del Pod de copia de seguridad que se creará.

Verifica las copias de seguridad

Una forma de verificar que se creó una copia de seguridad con éxito es verificar las instantáneas de volumen en el clúster de Kubernetes con este comando:

kubectl get volumesnapshot -n APIGEE_NAMESPACE

En el resultado, se muestra la lista actual de instantáneas en el clúster. En el proceso de copia de seguridad de CSI, se crea una instantánea de cada disco de Cassandra. La cantidad de instantáneas generadas debe coincidir con la cantidad total de pods de Cassandra en el clúster.

Restablecer una copia de seguridad

Usa este proceso para restablecer una copia de seguridad de CSI generada con anterioridad. Para obtener información general sobre cómo restablecer copias de seguridad y una descripción general del proceso, consulta la página de descripción general de restablecimiento.

A fin de iniciar el restablecimiento de una copia de seguridad de CSI, sigue las instrucciones para el restablecimiento de región única híbrida que no es de CSI, pero usa estos valores en el bloque restore de tu overrides.yaml. Consulta la tabla de referencia de propiedades de copia de seguridad para obtener más información sobre cada valor y la configuración de restablecimiento de ejemplo para ver un ejemplo.

  • enabled: Se establece en true a fin de habilitar el restablecimiento de la copia de seguridad a la que se hace referencia con la marca de tiempo snapshotTimestamp.
  • snapshotTimestamp: Proporciona la marca de tiempo de una copia de seguridad de CSI anterior.
  • pullPolicy en imagen: Se configura como Always.

Si quieres encontrar el valor snapshotTimestamp para restablecerlo, ejecuta este comando para obtener la lista de instantáneas disponibles:

kubectl get volumesnapshot -n APIGEE_NAMESPACE
En la lista que se muestra, los nombres de las instantáneas contienen la marca de tiempo:
pvc-us-west2-b-20220803004907-47beff0e306d8861
En este ejemplo, la marca de tiempo es 20220803004907.

Ejemplo de configuración de restablecimiento

En esta sección, se muestran las partes relacionadas con el restablecimiento de un archivo overrides.yaml de ejemplo.
cassandra:
  hostNetwork: false
  replicaCount: 3
  storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
    pullPolicy: Always

  restore:
    enabled: true
    snapshotTimestamp: "20220908222130"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

Migra a la copia de seguridad y restablecimiento de CSI

Si no usaste la copia de seguridad Hybrid y el restablecimiento antes, puedes seguir las instrucciones en Configura copias de seguridad de CSI para crear copias de seguridad nuevas de CSI sin seguir los pasos de esta sección. Estos pasos te guiarán para migrar de una solución de copia de seguridad y restablecimiento que no es de CSI a copias de seguridad de CSI.

  1. Genera una copia de seguridad nueva mediante el método de copia de seguridad que no es de CSI configurado actualmente.
  2. Cambia la configuración de la copia de seguridad en el archivo Hybrid overrides.yaml para usar las anulaciones de copia de seguridad de CSI, como se muestra en la configuración de ejemplo de la copia de seguridad.
  3. Aplica los cambios en el archivo overrides.yaml como sigue:
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
  4. Verifica el trabajo de copia de seguridad:
    kubectl get cronjob -n APIGEE_NAMESPACE
  5. Cuando se completa un trabajo de copia de seguridad, verifica que se hayan creado las instantáneas. La cantidad de instantáneas generadas debe ser equivalente a la cantidad de nodos de Cassandra en la instancia de Hybrid.
    kubectl get volumesnapshot -n APIGEE_NAMESPACE