Nesta página, mostramos como fazer backup e restaurar seus dados do AlloyDB Omni
usando o operador AlloyDB Omni Kubernetes. Isso requer conhecimento
básico sobre como atualizar um cluster do Kubernetes usando arquivos de manifesto e a
ferramenta de linha de comando kubectl
. Para mais informações sobre como instalar e executar o AlloyDB Omni em um cluster do Kubernetes, consulte Instalar o AlloyDB no Kubernetes.
Para ativar o backup e a recuperação contínuos do AlloyDB Omni, crie um plano de backup para cada cluster de banco de dados. Os backups são feitos com base nas programações definidas no recurso backupPlan
. Se não houver uma programação de backup definida no plano, os backups contínuos serão feitos diariamente por padrão. É possível restaurar ou clonar backups de qualquer carimbo de data/hora na janela de recuperação com granularidade de segundos.
Para informações sobre como fazer backup e restaurar dados do AlloyDB Omni em implantações que não são do Kubernetes, consulte Configurar o Barman para o AlloyDB Omni e Configurar o pgBackRest para o AlloyDB Omni.
Ativar e programar backups
Os backups contínuos são ativados quando você cria um recurso de plano de backup para o cluster do banco de dados. É necessário criar um recurso backupPlan
para cada cluster de banco de dados para ativar o backup contínuo. Esse recurso de plano de backup
define os seguintes parâmetros:
O local em que o operador do AlloyDB Omni armazena backups. Isso pode ser local para seu cluster do Kubernetes ou para um bucket do Cloud Storage.
Uma opção para definir várias programações de backup que criam automaticamente backups
full
,incremental
edifferential
. É possível pausar essa programação a qualquer momento, inclusive ao definir o plano de backup pela primeira vez. Se um plano de backup estiver pausado, os backups programados não serão criados, mas você ainda poderá usá-lo para criar backups manualmente.Se nenhuma programação de backup for especificada, o padrão será "0 0 * * *", que faz um backup completo diário à meia-noite, no horário local.
Um período de armazenamento para backups armazenados. Isso pode levar de um dia a 90 dias. O valor padrão é 14.
Seu cluster de banco de dados pode ter vários planos de backup, cada um com o próprio nome
e configuração. Se você criar vários recursos backupPlan
com programações de backup diferentes para um cluster de banco de dados, será necessário definir um local
de backup exclusivo para cada recurso.
Criar um plano para armazenar backups localmente
Para ativar os backups armazenados localmente, aplique o seguinte manifesto:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: BackupPlan
metadata:
name: BACKUP_PLAN_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupSchedules:
full: "FULL_CRON_SCHEDULE"
differential: "DIFF_CRON_SCHEDULE"
incremental: "INCR_CRON_SCHEDULE"
backupRetainDays: RETENTION_DAYS
paused: PAUSED_BOOLEAN
Substitua:
BACKUP_PLAN_NAME
: um nome para esse recurso de plano de backup, por exemplo,backup-plan-1
.NAMESPACE
: o namespace do Kubernetes para esse plano de backup. Ele precisa corresponder ao namespace do cluster do banco de dados.DB_CLUSTER_NAME
: o nome do cluster do banco de dados, que você atribuiu ao criar o cluster.FULL_CRON_SCHEDULE
: uma programação de backup para criar um backup completo, contendo todos os dados, expressos no formatocron
. Por exemplo, defina como "0 0 * * 0" para fazer um backup completo às 00h de todos os domingos.DIFF_CRON_SCHEDULE
: uma programação de backup para criar backups que são inicialmente backups completos. Os backups subsequentes são diferenciais, com base nas mudanças intermediárias nos dados, expressas no formatocron
. Por exemplo, defina como "0 22 * * 3" para fazer um backup diferencial às 22h todas as quartas-feiras.INCR_CRON_SCHEDULE
: uma programação de backup para criar backups que incluem dados alterados desde o último backup completo, diferencial ou incremental. Ele é expresso no formatocron
. Por exemplo, defina como "0 21 * * *" para fazer um backup incremental às 21h todos os dias.RETENTION_DAYS
: o número de dias em que o operador AlloyDB Omni retém esse backup. Ele precisa ser um número inteiro entre1
e90
. O valor padrão é14
.PAUSED_BOOLEAN
: especifica se o plano de backup está pausado ou não. Informe um dos seguintes valores:true
: os backups são pausados e nenhum backup programado é criado.false
: o operador AlloyDB Omni cria backups de acordo com a programação especificada porcronSchedule
. Esse é o valor padrão, se não for definido explicitamente comotrue
.
O valor padrão é
false
.
Criar um plano que armazena backups no Cloud Storage
Para ativar os backups armazenados no Cloud Storage, siga estas etapas:
Criar um bucket do Cloud Storage Anote o nome atribuído a esse bucket, porque você vai precisar dele em uma etapa posterior.
Crie uma conta de serviço para adicionar backups ao bucket.
Conceda o papel de Gerenciamento de identidade e acesso
storage.objectAdmin
à conta de serviço.Crie uma chave para a conta de serviço. Isso faz o download da chave privada para o ambiente local.
Renomeie o arquivo de chave transferido por download para
key.json
.Crie um secret do Kubernetes que contenha a chave privada:
kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE
Substitua:
SECRET_NAME
: o nome do secret do Kubernetes que você está criando, por exemplo,gcs-key
.KEY_PATH
: o caminho do sistema de arquivos local para o arquivokey.json
que você fez o download nas etapas anteriores.NAMESPACE
: o namespace do cluster do banco de dados.
Aplique o seguinte manifesto:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: BACKUP_PLAN_NAME namespace: NAMESPACE spec: dbclusterRef: DB_CLUSTER_NAME backupSchedules: full: "FULL_CRON_SCHEDULE" differential: "DIFF_CRON_SCHEDULE" incremental: "INCR_CRON_SCHEDULE" backupRetainDays: RETENTION_DAYS paused: PAUSED_BOOLEAN backupLocation: type: GCS gcsOptions: bucket: BUCKET_URL key: BACKUP_PATH secretRef: name: SECRET_NAME namespace: NAMESPACE
Substitua:
BACKUP_PLAN_NAME
: um nome para esse recurso de plano de backup, por exemplo,backup-plan-1
.NAMESPACE
: o namespace do Kubernetes para esse plano de backup. Ele precisa corresponder ao namespace do cluster do banco de dados.DB_CLUSTER_NAME
: o nome do cluster do banco de dados, que você atribuiu ao criar o cluster.FULL_CRON_SCHEDULE
: uma programação de backup para criar um backup completo, contendo todos os dados, expressos no formatocron
. Por exemplo, defina como "0 0 * * 0" para fazer um backup completo às 00h de todos os domingos.DIFF_CRON_SCHEDULE
: uma programação de backup para criar backups que são inicialmente backups completos. Os backups subsequentes são diferenciais, com base nas mudanças intermediárias nos dados, expressas no formatocron
. Por exemplo, defina como "0 22 * * 3" para fazer um backup diferencial às 22h todas as quartas-feiras.INCR_CRON_SCHEDULE
: uma programação de backup para criar backups que incluem dados alterados desde o último backup completo, diferencial ou incremental. Ele é expresso no formatocron
. Por exemplo, defina como "0 21 * * *" para fazer um backup incremental às 21h todos os dias.RETENTION_DAYS
: o número de dias em que o operador AlloyDB Omni retém esse backup. Ele precisa ser um número inteiro entre1
e90
. O valor padrão é14
.PAUSED_BOOLEAN
: especifica se o plano de backup está pausado ou não. Informe um dos seguintes valores:true
: os backups são pausados e nenhum backup programado é criado.false
: o operador AlloyDB Omni cria backups de acordo com a programação especificada porcronSchedule
. Esse é o valor padrão, se não for definido explicitamente comotrue
.
O valor padrão é
false
.
BUCKET_URL
: o nome do bucket do Cloud Storage criado em uma etapa anterior. Esse não é o URL completo do bucket. Não use o prefixogs://
no nome do bucket.BACKUP_PATH
: o caminho do diretório em que o operador do AlloyDB Omni grava backups no bucket do Cloud Storage. O caminho precisa ser absoluto e começar com/
.SECRET_NAME
: o nome escolhido para o secret do Kubernetes criado em uma etapa anterior.
Criar backups no armazenamento compatível com S3
É possível usar o campo s30options
para enviar backups a endpoints compatíveis com o S3.
As etapas do procedimento a seguir são gerais. Para receber instruções específicas para seu caso de uso, consulte a documentação do seu provedor do S3.
Para ativar os backups no armazenamento compatível com S3, siga estas etapas gerais:
- Crie um bucket de armazenamento do S3. Anote o nome atribuído a esse bucket, porque você vai usá-lo em uma etapa posterior.
- Para acessar o bucket de armazenamento do S3, crie um principal, por exemplo, uma conta de serviço ou usuário. Verifique com seu provedor do S3 se é necessário conceder um papel ou uma política predefinida ao principal.
- Conceda acesso de leitura e gravação ao principal criado na etapa anterior. Nesta etapa, você pode ler e gravar no bucket de armazenamento do S3.
- Crie uma chave de acesso para o principal que você criou. A chave de acesso inclui um ID de chave e uma chave secreta. Essa operação faz o download da chave para seu ambiente local.
Crie um secret do Kubernetes que contenha a chave:
kubectl create secret generic SECRET_NAME --from-literal=access-key-id=KEY_ID --from-literal=access-key=KEY -n NAMESPACE
Substitua:
SECRET_NAME
: o nome do secret do Kubernetes que você está criando, por exemplo,s3-key
.KEY_ID
: o ID da chave de acesso.KEY
: o segredo da chave de acesso.NAMESPACE
: o espaço em que o nome do secret é mantido. Esse valor precisa ser exclusivo.
Aplique o seguinte manifesto:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: BackupPlan metadata: name: BACKUP_PLAN_NAME namespace: NAMESPACE spec: dbclusterRef: DB_CLUSTER_NAME backupSchedules: full: "FULL_CRON_SCHEDULE" differential: "DIFF_CRON_SCHEDULE" incremental: "INCR_CRON_SCHEDULE" backupRetainDays: RETENTION_DAYS paused: PAUSED_BOOLEAN backupLocation: type: S3 s3Options: bucket: BUCKET_NAME region: REGION endpoint: S3ENDPOINT key: BACKUP_PATH secretRef: namespace: NAMESPACE name: SECRET_NAME certRef: name: CA_BUNDLE_SECRET_NAME namespace: NAMESPACE
Substitua:
BACKUP_PLAN_NAME
: um nome para esse recurso de plano de backup, por exemplo,backup-plan-1
.NAMESPACE
: o namespace do Kubernetes para esse plano de backup. O namespace precisa corresponder ao namespace do cluster de banco de dados.DB_CLUSTER_NAME
: o nome do cluster do banco de dados, que você atribuiu quando o criou.FULL_CRON_SCHEDULE
: uma programação de backup para criar um backup completo, contendo todos os dados, expressos no formatocron
. Por exemplo, para fazer um backup completo às 00h de todos os domingos, definaFULL_CRON_SCHEDULE
como0 0 * * 0
.DIFF_CRON_SCHEDULE
: uma programação de backup para criar backups inicialmente completos. Os backups subsequentes são diferenciais, com base nas mudanças intermediárias dos dados, expressas no formatocron
. Por exemplo, para fazer um backup diferencial às 22h toda quarta-feira, defina como0 22 * * 3
.INCR_CRON_SCHEDULE
: uma programação de backup para criar backups que incluem dados alterados desde o último backup completo, diferencial ou incremental. Isso é expresso no formatocron
. Por exemplo, para fazer um backup incremental às 21h todos os dias, defina como0 21 * * *
.RETENTION_DAYS
: o número de dias em que o operador AlloyDB Omni no Kubernetes retém esse backup. Esse parâmetro precisa ser um número inteiro entre1
e90
. O valor padrão é14
.PAUSED_BOOLEAN
: especifica se o plano de backup está pausado ou não. Forneça um dos seguintes valores:true
: os backups são pausados e nenhum backup programado é criado.false
: o valor padrão. O operador do AlloyDB Omni cria backups de acordo com a programação especificada porcronSchedule
. Esse é o valor padrão, se não for definido explicitamente comotrue
.
BUCKET_NAME
: o nome do bucket de armazenamento do S3 que você criou. O nome do bucket não é o URL completo dele. Não adicione o prefixo ao nome do bucket comgs://
.REGION
: a região em que o bucket do S3 está armazenado.S3ENDPOINT
: o endpoint do bucket de armazenamento do S3.BACKUP_PATH
: o caminho do diretório em que o operador do AlloyDB Omni grava backups no bucket de armazenamento do S3. O caminho precisa ser absoluto e começar com/
.NAMESPACE
: o espaço em que o nome do secret precisa ser exclusivo.SECRET_NAME
: o nome escolhido para o secret do Kubernetes criado.CA_BUNDLE_SECRET_NAME
: um pool de certificados de CA codificados por PEM que o servidor do S3 usa para validar o certificado. Verifique se o pacote está incluído no secret com uma chave chamadaca.crt
.O exemplo a seguir mostra como criar um secret que contém o certificado, em que
PEM_FILE_PATH
é o caminho para o arquivo de pacoteca
:kubectl create secret generic CA_BUNDLE_SECRET_NAME -n NAMESPACE --from-file=ca.crt=PEM_FILE_PATH
Criar um backup manualmente
É possível criar um recurso de backup manualmente a qualquer momento usando qualquer plano de backup que já tenha sido aplicado a um cluster de banco de dados. O operador do AlloyDB Omni aplica o local de armazenamento e o período de retenção do plano de backup escolhido ao novo backup manual.
Para criar um backup manualmente, aplique o seguinte manifesto:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
name: BACKUP_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
backupPlanRef: BACKUP_PLAN_NAME
manual: true
physicalBackupSpec:
backupType: BACKUP_TYPE
Substitua:
BACKUP_NAME
: um nome para esse backup, por exemplo,backup-1
.NAMESPACE
: o namespace do Kubernetes desse restabelecimento. Ele precisa corresponder ao namespace do cluster do banco de dados.BACKUP_PLAN_NAME
: o nome do recurso do plano de backup a que esse backup pertence. Ele precisa corresponder ao nome escolhido ao criar o plano de backup.DB_CLUSTER_NAME
: o nome do cluster do banco de dados, que você atribuiu ao criar o cluster.BACKUP_TYPE
: especifica o tipo de backup manual que você quer criar. Escolha um dos seguintes valores:full
: cria um backup completo, contendo todos os dados.diff
: cria um backup diferencial que depende do último backup completo. Os backups subsequentes são diferenciais, com base nas mudanças intermediárias dos dados.incr
: cria um backup incremental que depende do backup completo ou diferencial anterior para incluir dados que foram alterados desde o último backup completo ou diferencial.
Monitorar e listar backups
Seus planos e backups são todos recursos no cluster do Kubernetes. Para conferir informações sobre eles, use o comando
kubectl
get
.
Conferir o resumo de um plano de backup
Para conferir informações sobre os planos de backup do cluster de banco de dados, execute o seguinte comando:
kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE
Substitua NAMESPACE
pelo namespace do cluster do banco de dados.
A saída será assim:
NAME PHASE LASTBACKUPTIME NEXTBACKUPTIME
backup-plan-prod Ready 2023-10-26T17:26:43Z 2023-10-27T00:00:00Z
Visualizar uma lista de backups
Para conferir uma lista de backups disponíveis para o cluster do banco de dados, execute o seguinte comando:
kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE
Substitua NAMESPACE
pelo namespace do cluster do banco de dados.
A saída será assim:
NAME PHASE COMPLETETIME
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z
manual-backup-1 Succeeded 2023-10-26T18:15:27Z
manual-backup-2 InProgress
Cada linha na tabela de saída representa um recurso de backup com os seguintes atributos:
- O nome do backup.
- O estado do backup, com
Succeeded
marcando um backup pronto para ser restaurado. - O carimbo de data/hora de criação do backup.
Restaurar a partir de um backup
O AlloyDB permite restaurar backups individuais ou clonar um cluster usando um backup de um momento específico.
Restaurar de um backup nomeado
Para restaurar de um backup, substituindo os dados no cluster do banco de dados pelos dados no backup, siga estas etapas.
Liste todos os backups com a fase
Succeeded
.kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded
Substitua
NAMESPACE
pelo namespace do cluster do banco de dados.Se pelo menos um candidato de backup válido existir, a saída será semelhante a esta:
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z manual-backup-1 Succeeded 2023-10-26T18:15:27Z
Escolha um dos backups listados na etapa anterior como o backup a ser restaurado. Anote o nome dele, que será usado na próxima etapa.
Aplique o seguinte manifesto:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME backup: BACKUP_NAME
Substitua:
RESTORE_NAME: um nome a ser usado com o recurso de restauração de dados criado por esse manifesto, por exemplo,
restore-1
.DB_CLUSTER_NAME: o nome do cluster de banco de dados, que você atribuiu ao criar o cluster.
BACKUP_NAME: o nome do backup escolhido na etapa anterior.
Clonar um cluster de um momento específico
O operador do AlloyDB Omni permite clonar os dados do cluster a qualquer momento dentro de uma janela de recuperação. A duração da janela de recuperação é determinada diretamente pelo período de retenção.
Por exemplo, se o período de retenção estiver definido como 14 dias, não será possível recuperar dados com mais de 14 dias. É possível restaurar para qualquer ponto no tempo dentro do período de recuperação. O operador do AlloyDB Omni retém backups e registros por um dia a mais do que o valor especificado.
Monitore a janela de recuperação para identificar o ponto de restauração:
kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
Confira a seguir um exemplo de resposta:
recoveryWindow: begin: "2024-01-31T02:54:35Z"
O valor do carimbo de data/hora no formato RFC 3339 é usado no recurso de restauração.
Crie e aplique o seguinte manifesto de recursos de restauração:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME pointInTime: "DATE_AND_TIME_STAMP" clonedDBClusterConfig: dbclusterName: NEW_DB_CLUSTER_NAME
Substitua:
RESTORE_NAME: um nome a ser usado com o recurso de restauração de dados criado por esse manifesto, por exemplo,
restore-1
.DB_CLUSTER_NAME: o nome do cluster de banco de dados, que você atribuiu ao criar.
DATE_AND_TIME_STAMP: o carimbo de data/hora RFC 3339 na granularidade de minutos do backup contínuo que você quer restaurar, por exemplo,
2024-03-05T15:32:10Z
.NEW_DB_CLUSTER_NAME: o nome do novo cluster de banco de dados.
Conferir o status da restauração
Confira o progresso da operação de restauração:
kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE
Substitua
NAMESPACE
pelo namespace do cluster do banco de dados.Para executar o comando continuamente, adicione a flag
-Aw
.A saída será assim:
NAME PHASE COMPLETETIME RESTOREDPOINTINTIME restore-1 RestoreInProgress
Quando o valor da coluna
PHASE
na tabela de saída forProvisionSucceeded
, a restauração será concluída.Confira o progresso do cluster de banco de dados restaurado ou clonado que está sendo colocado on-line:
kubectl get dbclusters -A -n NAMESPACE
Substitua
NAMESPACE
pelo namespace do cluster do banco de dados.Para executar o comando continuamente, adicione a flag
-Aw
.A saída será assim:
NAMESPACE NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE default db-cluster-1 10.128.0.55 Ready DBClusterReady
Quando o valor da coluna
DBCLUSTERPHASE
na tabela de saída forDBClusterReady
, o cluster de banco de dados restaurado ou clonado estará pronto para uso.
Excluir um backup
Normalmente, não é necessário excluir backups manualmente. O operador AlloyDB Omni exclui automaticamente os backups mais antigos que o período de retenção especificado ao criar um plano de backup.
Se você quiser excluir um backup manualmente, ele precisará atender a estes requisitos:
O backup não é o único armazenado para o plano de backup. O operador AlloyDB Omni exige que pelo menos um backup exista por plano de backup.
O backup não tem outros backups dependentes dele. Por exemplo, um backup completo com backups diferenciais ou incrementais que dependem dele ou um backup incremental com backups diferenciais que dependem dele.
Para excluir um backup, execute o seguinte comando:
kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE
Substitua:
BACKUP_NAME
: o nome do backup a ser excluído.NAMESPACE
: o namespace do cluster do banco de dados.
Redimensionar um disco de backup
Para redimensionar o disco local que armazena seus backups no cluster do Kubernetes, siga estas etapas:
Atualize o campo
resources.disks
do manifesto do DBCluster da seguinte maneira:spec: primarySpec: resources: disks: - name: BACKUP_DISK size: 10Gi
Substitua
BACKUP_DISK
pelo nome do disco que armazena seus backups.Aplique o manifesto para aplicar a atualização.
O operador do AlloyDB Omni aplica as especificações atualizadas ao DBCluster imediatamente.
As restrições a seguir se aplicam à modificação do disco de backup de um cluster de banco de dados em execução:
- Só é possível aumentar o tamanho de um disco se o
storageClass
especificado oferecer suporte à expansão de volume. - Não é possível diminuir o tamanho de um disco.
Atualizar um plano de backup
Cada plano de backup é um recurso do Kubernetes. Para atualizar a configuração, siga um destes procedimentos:
Edite e reaplique o arquivo de manifesto do plano de backup.
Use o comando
kubectl patch
.
Por exemplo, para pausar um plano de backup em execução, mude o atributo paused
do
manifesto para true
e aplique o manifesto novamente.
Excluir um plano de backup
Para excluir um plano de backup e remover todos os recursos de backup dele, execute o seguinte comando:
kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE
Substitua:
BACKUP_PLAN_NAME
: o nome do plano de backup a ser excluído.NAMESPACE
: o namespace do cluster do banco de dados.
Para pausar um plano de backup sem excluí-lo, defina o atributo paused
do recurso do plano de backup como true
. Um plano de backup pausado continua armazenando
backups e permite a criação manual.