Backup e restauração de CSI do Cassandra

É possível fazer backup e restaurar seus dados híbridos usando snapshots da interface CSI (Container Storage Interface). O backup da CSI aciona snapshots de disco feitos pelo sistema de armazenamento subjacente usando o driver CSI fornecido. O backup de CSI não precisa de um bucket do Google Cloud Storage ou de um servidor remoto para armazenar dados de backup.

O backup de CSI é recomendado para instâncias híbridas hospedadas no Google Cloud, na AWS ou no Azure.

Esta página descreve as etapas para usar o backup e a restauração do CSI híbrido. Para uma visão geral do backup e da restauração híbridos, consulte a visão geral de backup e restauração do Cassandra.

Limitações de backup e restauração

Esteja ciente destas limitações ao usar o backup e a restauração do CSI:

  • O driver CSI usado pela classe de armazenamento configurada precisa ser compatível com snapshots da CSI. Consulte esta lista de drivers CSI do Kubernetes (em inglês) para informações sobre o driver.
  • Nem todas as plataformas são compatíveis. Somente as plataformas Google Cloud, AWS e Azure são compatíveis.
  • O ContainerShift da OpenShift não oferece suporte devido às limitações de snapshot de volume.
  • Apenas as plataformas de nuvem são compatíveis. Não há suporte para plataformas no local.
  • Os dados de backup de CSI e os dados híbridos sem CIS são incompatíveis. Os backups sem CSI não podem ser usados com a restauração de CSI, e os backups de CSI não podem ser usados com a restauração sem CSI.
  • A instalação e funcionalidade do driver CSI é de responsabilidade do fornecedor do driver CSI.
  • Os usuários são responsáveis por garantir que os recursos de cluster adequados estejam disponíveis para o provisionamento de snapshots da CSI.
  • Os usuários são responsáveis por remover dados de snapshots antigos.

Configurar backups de CSI

Para programar backups híbridos usando o CSI, siga estas etapas:

  1. Se você não tiver configurado o backup híbrido:
    1. Execute o comando create-service-account a seguir para criar uma conta de serviço (SA) do Google Cloud com o papel padrão roles/storage.objectAdmin. Esse papel da SA permite gravar dados de backup no Cloud Storage. E Execute o seguinte comando no diretório adequado para sua ferramenta de gerenciamento:
      • Gráficos do Helm: $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/
      • apigeectl: HYBRID_BASE_DIRECTORY/hybrid-files/
      ./tools/create-service-account --env non-prod --dir ./service-accounts

      Esse comando cria uma única conta de serviço chamada apigee-non-prod para uso em ambientes de não produção e coloca o arquivo de chave salvo no diretório ./service-accounts.

      Para mais informações sobre as contas de serviço do Google Cloud, consulte Como criar e gerenciar contas de serviço.

    2. O comando create-service-account salva um arquivo JSON que contém a chave privada da conta de serviço. O arquivo é salvo no mesmo diretório em que o comando é executado. Você precisará do caminho desse arquivo nas etapas a seguir.
  2. Abra o arquivo overrides.yaml. Defina os parâmetros a seguir, conforme mostrado em Exemplos de modificação de arquivos.

    1. Defina os parâmetros gerais mostrados abaixo no bloco backup. Se você já tiver definido esses parâmetros para a solução de backup híbrida sem CIS, será possível usar os mesmos parâmetros para seus snapshots de CSI. Consulte a tabela de referência de propriedades de backup para mais informações sobre cada valor.

      Para obter backup:

      • enabled: defina como true para ativar os backups programados.
      • pullPolicy na imagem: defina como Always.
      • schedule: forneça uma programação de expressão cron.
    2. Defina estes parâmetros para o backup específico da CSI:
      • Valores do grupo de armazenamento do Cassandra: a classe de armazenamento do Cassandra configurada precisa ser compatível com snapshots da CSI para que o backup e a restauração da CSI funcionem. Para verificar se uma classe de armazenamento é compatível com snapshots da CSI, execute o seguinte comando para ver as classes de armazenamento disponíveis:
        kubectl get sc
        Observe a saída de "Provisionador" em cada classe de armazenamento. Os provisionadores que usam CSI geralmente têm um ".csi". ao nome, como "pd.csi.storage.gke.io". Procure o nome do provisionador nesta lista de drivers CSI do Kubernetes. Se a coluna "Outros recursos" do provisionador contiver a palavra "SNAPSHOT", a classe de armazenamento que usa o provisionador será compatível com snapshots da CSI.

        Adicione esses parâmetros ao grupo de armazenamento. Os dois valores são obrigatórios.

        • storageclass: um nome de classe de armazenamento com snapshot instantâneo da CSI.
        • capacity: a capacidade do disco.
      • Tipo de provedor do Cloud:

        Depois que o recurso de instantâneo CSI for verificado, modifique o arquivo de substituição para usar o backup e a restauração do CSI:

        • cloudProvider: defina cloudProvider em backup e restore como CSI.

Exemplo de configuração de backup

Esta seção mostra as partes relacionadas a backup de um arquivo overrides.yaml de exemplo.
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 *"

Iniciar um backup manual

Os backups de CSI são gerados automaticamente de acordo com a programação do cron definida no arquivo overrides.yaml.

Para iniciar um backup CSI manual, use este comando:

kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup BACKUP_POD_NAME
em que BACKUP_POD_NAME é o nome do pod de backup que será criado.

Verificar backups

Uma maneira de verificar se um backup foi criado com sucesso é verificar os snapshots de volume no cluster do Kubernetes usando este comando:

kubectl get volumesnapshot -n APIGEE_NAMESPACE

A saída mostra a lista atual de snapshots no cluster. O processo de backup do CSI cria um snapshot de cada disco do Cassandra. O número de snapshots gerados precisa corresponder ao número total de pods do cassandra no cluster.

Restaurar um backup

Use esse processo para restaurar um backup CSI gerado anteriormente. Para informações gerais sobre como restaurar backups e uma visão geral do processo, consulte a página de visão geral de restauração.

Para iniciar a restauração de um backup de CSI, siga as instruções para a restauração híbrida de região única sem CSI, mas use esses valores no bloco restore no overrides.yaml. Consulte a tabela de referência de propriedades de backup para ver mais informações sobre cada valor e a configuração de restauração de exemplo para ver um exemplo.

  • enabled: defina como true para ativar a restauração do backup referenciado com o carimbo de data/hora snapshotTimestamp.
  • snapshotTimestamp: mostra o carimbo de data/hora de um backup anterior da CSI.
  • pullPolicy na imagem: defina como Always.

Para encontrar o valor snapshotTimestamp a ser restaurado, execute este comando para receber a lista de snapshots disponíveis:

kubectl get volumesnapshot -n APIGEE_NAMESPACE
Na lista retornada, os nomes dos snapshots contêm o carimbo de data/hora:
pvc-us-west2-b-20220803004907-47beff0e306d8861
Neste exemplo, o carimbo de data/hora é 20220803004907.

Exemplo de configuração de restauração

Esta seção mostra as partes relacionadas à restauração de um arquivo overrides.yaml de exemplo.
cassandra:
  hostNetwork: false
  replicaCount: 3
  storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
    pullPolicy: Always

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

Migrar para backup e restauração de CSI

Se você não tiver usado o backup e a restauração híbridas, siga as instruções em Configurar backups de CSI para criar um novo backup de CSI sem as etapas desta seção. Estas etapas orientam você na migração da solução de backup e restauração sem CSI para backups de CSI.

  1. Gere um novo backup usando o método de backup sem CSI configurado atualmente.
  2. Mude a configuração de backup no arquivo overrides.yaml híbrido para usar as modificações de backup de CSI, conforme mostrado na configuração de backup de exemplo.
  3. Aplique as alterações no arquivo overrides.yaml:
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
  4. Verifique o job de backup:
    kubectl get cronjob -n APIGEE_NAMESPACE
  5. Depois que um job de backup for concluído, verifique se os snapshots foram criados. O número de snapshots gerados precisa ser equivalente ao número de nós do Cassandra na instância híbrida.
    kubectl get volumesnapshot -n APIGEE_NAMESPACE