Copia de seguridad y restauración de CSI de Cassandra

A partir de Apigee hybrid 1.9, puedes crear copias de seguridad y restaurar tus datos híbridos mediante las instantáneas de CSI (interfaz de almacenamiento de contenedores). La copia de seguridad de CSI genera snapshots de disco y los almacena como datos cifrados en el almacenamiento en la nube. La copia de seguridad de CSI no necesita un segmento de Google Cloud Storage ni un servidor remoto para almacenar datos de copia de seguridad.

Se recomienda usar copias de seguridad de CSI en instancias híbridas alojadas en Google Cloud, AWS o Azure.

En esta página se describen los pasos para usar la copia de seguridad y la restauración de CSI híbridas. Para obtener una descripción general de la copia de seguridad y la restauración híbridas, consulta el artículo Descripción general de la copia de seguridad y la restauración de Cassandra.

Limitaciones de las copias de seguridad y la restauración

Ten en cuenta estas limitaciones al usar la copia de seguridad y la restauración de CSI:

  • El controlador de CSI que usa la clase de almacenamiento configurada debe admitir las copias de seguridad de CSI. Consulta esta lista de controladores CSI de Kubernetes para obtener información sobre los controladores.
  • No todas las plataformas son compatibles. Solo se admiten las plataformas Google Cloud, AWS y Azure.
  • No se admite la plataforma de contenedores OpenShift debido a limitaciones de las copias de seguridad de volúmenes.
  • Solo se admiten plataformas en la nube. No se admiten plataformas locales.
  • Los datos de copia de seguridad de CSI y los datos de copia de seguridad híbrida que no son de CSI no son compatibles. Las copias de seguridad que no son de CSI no se pueden usar con la restauración de CSI, y las copias de seguridad de CSI no se pueden usar con la restauración que no es de CSI.
  • La instalación y la funcionalidad del controlador de CSI son responsabilidad del proveedor del controlador de CSI.
  • Los usuarios son responsables de asegurarse de que haya recursos de clúster suficientes para aprovisionar las copias de seguridad de CSI.
  • Los usuarios son responsables de eliminar los datos de las capturas antiguas.

Configurar copias de seguridad de CSI

Para programar copias de seguridad híbridas con CSI, sigue estos pasos:

  1. Si no has configurado previamente la copia de seguridad híbrida:
    1. Ejecuta el siguiente comando create-service-account para crear una cuenta de servicio (SA) de Google Cloud con el rol estándar roles/storage.objectAdmin. Este rol de SA te permite escribir datos de copias de seguridad en Cloud Storage. Ejecuta el siguiente comando en el directorio hybrid-base-directory/hybrid-files:
      ./tools/create-service-account --env non-prod --dir ./service-accounts
      Este comando crea una cuenta de servicio llamada apigee-non-prod para usarla en entornos que no son de producción y 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 el artículo sobre cómo crear y gestionar 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 pasos siguientes.
  2. Abre el archivo overrides.yaml. Define los siguientes parámetros, como se muestra en Ejemplos de archivos de anulaciones.

    1. Defina los parámetros generales que se muestran a continuación en el bloque backup. Si ya has definido estos parámetros para la solución de copia de seguridad híbrida que no es de CSI, puedes usar los mismos parámetros para tus copias de seguridad de CSI. Consulta la tabla de referencia de las propiedades de copia de seguridad para obtener más información sobre cada valor.

      Para backup:

      • enabled: asigna el valor true para habilitar las copias de seguridad programadas.
      • pullPolicy en image: se ha definido como Always.
      • serviceAccountPath: la ruta a la cuenta de servicio.
      • schedule: proporciona una programación de expresiones cron.
    2. Defina estos parámetros para la copia de seguridad específica de CSI:
      • Valores del grupo de almacenamiento de Cassandra: la clase de almacenamiento de Cassandra configurada debe admitir las copias de seguridad de CSI para que la copia de seguridad y la restauración de CSI funcionen. Para comprobar si una clase de almacenamiento admite las copias de seguridad de CSI, ejecuta el siguiente comando para obtener las clases de almacenamiento disponibles:
        kubectl get sc
        Consulta el resultado de "Provisioner" de cada clase de almacenamiento. Los provisionadores que usan CSI suelen tener la parte ".csi." en su nombre, como "pd.csi.storage.gke.io". Busca el nombre del aprovisionador en esta lista de controladores CSI de Kubernetes. Si la columna "Otras funciones" del aprovisionador contiene la palabra "SNAPSHOT", la clase de almacenamiento que usa el aprovisionador admite las instantáneas de CSI.

        Añade estos parámetros al grupo de almacenamiento. Ambos valores son obligatorios.

        • storageclass: nombre de una clase de almacenamiento habilitada para instantáneas de CSI.
        • capacity: capacidad del disco.
      • Tipo de proveedor de servicios en la nube:

        Una vez que se haya verificado la función de creación de copias de seguridad de CSI, modifica el archivo de anulaciones para usar la copia de seguridad y la restauración de CSI:

        • cloudProvider: asigna el valor cloudProvider a backup y restore a 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
    serviceAccountPath: "/Users/myuser/apigee-hybrid/hybrid-files/service-accounts/mycompany-hybrid-apigee-cassandra.json"
    cloudProvider: "CSI"
    schedule: "0 * * 11 *"

Iniciar una copia de seguridad manual

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

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

kubectl create job -n apigee --from=cronjob/apigee-cassandra-backup backup-pod-name
donde backup-pod-name es el nombre del pod de copia de seguridad que se creará.

Verificar copias de seguridad

Una forma de comprobar si se ha creado una copia de seguridad correctamente es consultar las copias de seguridad de volúmenes del clúster de Kubernetes con este comando:

kubectl get volumesnapshot -n apigee

El resultado muestra la lista actual de las copias de seguridad del clúster. El proceso de copia de seguridad de CSI crea una instantánea de cada disco de Cassandra. El número de copias debe coincidir con el número total de pods de Cassandra del clúster.

Restaurar una copia de seguridad

Sigue este proceso para restaurar una copia de seguridad de CSI generada anteriormente. Para obtener información general sobre la restauración de copias de seguridad y una descripción general del proceso, consulta la página de descripción general de la restauración.

Para iniciar una restauración de una copia de seguridad de CSI, sigue las instrucciones de la restauración híbrida de una sola región que no sea de CSI, pero usa estos valores en el bloque restore de tu overrides.yaml. Consulta la tabla de referencia de las propiedades de copia de seguridad para obtener más información sobre cada valor y el ejemplo de configuración de restauración.

  • enabled: asigna el valor true para habilitar la restauración 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.
  • serviceAccountPath: la ruta a la cuenta de servicio.
  • pullPolicy en image: se ha definido como Always.

Para encontrar el valor de snapshotTimestamp que quieres restaurar, ejecuta este comando para obtener la lista de las capturas disponibles:

kubectl get volumesnapshot -n apigee
En la lista devuelta, los nombres de las capturas 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 restauración

En esta sección se muestran las partes relacionadas con la restauración 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"
    serviceAccountPath: "/Users/myuser/apigee-hybrid/hybrid-files/service-accounts/mycompany-hybrid-apigee-cassandra.json"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

Migrar a la copia de seguridad y restauración de CSI

Si no has usado antes la copia de seguridad y restauración híbridas, puedes seguir las instrucciones de Configurar copias de seguridad de CSI para crear copias de seguridad de CSI sin seguir los pasos de esta sección. En estos pasos se explica cómo migrar de la solución de copia de seguridad y restauración que no es de CSI a las copias de seguridad de CSI.

  1. Genera una nueva copia de seguridad con el método de copia de seguridad no CSI configurado.
  2. Cambia la configuración de copia de seguridad del archivo híbrido overrides.yaml para usar las anulaciones de copia de seguridad de CSI, tal como se muestra en el ejemplo de configuración de copia de seguridad.
  3. Aplica los cambios del archivo overrides.yaml:
    $APIGEECTL_HOME/apigeectl apply -f YOUR_OVERRIDES_FILE
  4. Verifica el trabajo de copia de seguridad:
    kubectl get cronjob -n apigee
  5. Una vez que se haya completado una tarea de copia de seguridad, comprueba que se hayan creado las instantáneas. El número de las copias de seguridad generadas debe ser equivalente al número de nodos de Cassandra de la instancia híbrida.
    kubectl get volumesnapshot -n apigee