Backup e recuperação sem o Google Cloud

Esta seção aborda como configurar o backup e a recuperação do banco de dados do Cassandra usando ssh e um sistema de arquivos em vez de usar o Google Cloud. Consulte também:

O que é o backup e a recuperação do Cassandra sem serviços de nuvem?

O backup sem os serviços do Cloud armazena backups do banco de dados do Cassandra para arquivos compactados no sistema de arquivos do servidor especificado. Os backups ocorrem de acordo com uma programação especificada por você no arquivo de modificações. A conexão com o servidor é feita pelo SSH seguro.

Como configurar backups sem serviços do Cloud

As etapas a seguir incluem exemplos comuns de como concluir tarefas específicas, como criar um par de chaves SSH. Use os métodos apropriados para a instalação.

O procedimento tem as seguintes partes:

Configurar o servidor e o SSH

  1. Designe um servidor Linux ou Unix para seus backups. Esse servidor precisa ser acessível via SSH pelo plano do ambiente de execução da Apigee híbrida. Ele deve ter armazenamento suficiente para seus backups.
  2. Configure um servidor SSH ou verifique se há um servidor SSH seguro configurado.
  3. Crie um par de chaves SSH e armazene o arquivo da chave privada em um caminho acessível no plano do ambiente de execução híbrido. Use uma senha em branco para o par de chaves ou o backup falhará. Exemplo:
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+
  4. Crie uma conta de usuário no servidor de backup com o nome apigee. Verifique se o novo usuário apigee tem um diretório principal em /home.
  5. No servidor de backup, crie um diretório ssh no novo diretório /home/apigee.
  6. Copie a chave pública (ssh_key.pub no exemplo anterior) em um arquivo chamado authorized_keys no novo diretório /home/apigee/ssh. Exemplo:
    cd /home/apigee
    mkdir .ssh
    cd .ssh
    vi authorized_keys
  7. No servidor de backup, crie um diretório de backup dentro do diretório /home/apigee/. O diretório de backup pode ser qualquer diretório, desde que o usuário apigee tenha acesso a ele. Exemplo:
    cd /home/apigee
    mkdir cassandra-backup
  8. Teste a conexão. Verifique se os pods do Cassandra podem se conectar ao servidor de backup usando SSH:
    1. Faça login no shell do pod do Cassandra. Exemplo:
      kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash

      Em que APIGEE_CASSANDRA_DEFAULT_0 é o nome de um pod do Cassandra. Altere para o nome do pod a partir do qual você quer se conectar.

    2. Conecte-se por SSH ao seu servidor de backup usando o endereço IP do servidor:
      ssh apigee@BACKUP_SERVER_IP

Definir a programação e o destino do backup

Você define a programação e o destino dos backups no arquivo overrides.yaml.

  1. Adicione os seguintes parâmetros ao seu arquivo overrides.yaml:

    Parâmetros

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    Exemplo

    cassandra:
      backup:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    Em que:

    Propriedade Descrição
    backup:enabled O backup está desativado por padrão. É preciso definir essa propriedade como true.
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    O caminho no sistema de arquivos local para o arquivo de chave privada SSH (chamado ssh_key na etapa em que você criou o par de chaves SSH).

    backup:server

    BACKUP_SERVER_IP

    O endereço IP do servidor de backup.

    backup:storageDirectory

    BACKUP_DIRECTORY

    O nome do diretório de backup no servidor de backup. Precisa ser um diretório dentro de home/apigee (o diretório de backup se chama cassandra_backup na etapa em que você criou o diretório de backup).

    backup:cloudProvider

    HYBRID

    A propriedade cloudProvider: "HYBRID" é obrigatória.

    backup:schedule

    SCHEDULE

    O horário de início do backup, especificado na sintaxe padrão de crontab. Padrão: 0 2 * * *

  2. Use apigeectl para aplicar a configuração de backup ao escopo de armazenamento do cluster:
    $APIGEECTL_HOME/apigeectl --datastore -f YOUR_OVERRIDES_FILE

    Em que YOUR_OVERRIDES_FILE é o caminho para o arquivo de substituição que você acabou de editar.

  3. Verifique o job de backup. Exemplo:
    kubectl get cronjob -n apigee
    NAME                      SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    apigee-cassandra-backup   33 * * * *   False     0        <none>          94s

Configurar restauração

A restauração retira os dados do local de backup e os restaura em um novo cluster do Cassandra com o mesmo número de pods. Nenhum dado é retirado do antigo cluster do Cassandra.

As instruções de restauração abaixo são para implantações de região única que não usam o Google Cloud Storage para backups. Para outras implantações, consulte:

Para restaurar backups do Cassandra:

  1. Crie um novo namespace no cluster existente do Kubernetes que será usado para restaurar a implantação do huntime híbrido. Não use o nome original do namespace no novo namespace. Não use o namespace antigo para a restauração.
  2. No diretório raiz da instalação híbrida, crie um novo arquivo overrides-restore.yaml.
  3. Copie a configuração completa do Cassandra do arquivo overrides.yaml original para o novo overrides-restore.yaml. Exemplo:
    cp ./overrides.yaml ./overrides-restore.yaml
    
  4. Adicione um elemento de namespace ao novo arquivo overrides-restore.yaml.

    Parâmetros

    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      restore:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID"  # required verbatim "HYBRID" (all caps)
        snapshotTimestamp: "TIMESTAMP"
      ..

    Exemplo

    namespace: cassandra-restore
    cassandra:
      restore:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        snapshotTimestamp: "20201001183903"
  5. Em que:

    Propriedade Descrição
    namespace

    YOUR_RESTORE_NAMESPACE

    O nome do novo namespace que você criou na etapa 1 do novo cluster do Cassandra. Não use o mesmo namespace usado no cluster original.

    restore:enabled A restauração é desativada por padrão. É preciso definir essa propriedade como true.
    restore:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    O caminho no sistema de arquivos local para o arquivo de chave privada SSH (chamado ssh_key na etapa em que você criou o par de chaves SSH).

    restore:server

    BACKUP_SERVER_IP

    O endereço IP do servidor de backup.

    restore:storageDirectory

    BACKUP_DIRECTORY

    O nome do diretório de backup no servidor de backup. Precisa ser um diretório dentro de home/apigee (o diretório de backup se chama cassandra_backup na etapa em que você criou o diretório de backup).

    restore:cloudProvider

    HYBRID

    A propriedade cloudProvider: "HYBRID" é obrigatória.

    restore:snapshotTimestamp

    TIMESTAMP

    O carimbo de data/hora do snapshot de backup a ser restaurado. Para verificar quais carimbos de data/hora podem ser usados, acesse dbStorageBucket e observe os arquivos presentes no bucket. Cada nome de arquivo contém um valor de carimbo de data/hora como o seguinte:

    backup_20210203213003_apigee-cassandra-default-0.tgz

    Onde 20210203213003 é o valor snapshotTimestamp que você usaria se quisesse restaurar os backups criados nesse momento.

  6. Altere o rótulo app em qualquer nó do Cassandra no namespace antigo. Para isso, execute o seguinte comando:
    kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
    
  7. Crie uma nova implantação híbrida de ambiente de execução. Isso criará um novo cluster do Cassandra e começará a restaurar os dados de backup no cluster:
    ./apigeectl init  -f ../overrides-restore.yaml
    
    ./apigeectl apply  -f ../overrides-restore.yaml
    
  8. Após a conclusão da restauração, o tráfego precisa ser alternado para usar o cluster do Cassandra no novo namespace. Execute os comandos a seguir para alternar o tráfego:

    kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
    
    kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
    
  9. Quando a alternância de tráfego for concluída, é possível reconfigurar os backups no cluster restaurado removendo a configuração restore e adicionando a configuração backup ao arquivo overrides-restore.yaml. Substitua YOUR_RESTORE_NAMESPACE pelo novo nome do namespace criado na etapa 1.
    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      backup:
        enabled: true
        serviceAccountPath: SA_JSON_FILE_PATH
        dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
        schedule: BACKUP_SCHEDULE_CODE
      ...

    Em seguida, aplique a configuração backup com o seguinte comando:

    ./apigeectl apply  -f ../overrides-restore.yaml