Neste artigo, você terá uma visão geral de como fazer backup das edições Community e Enterprise do Couchbase no Ubuntu e como configurar uma estratégia básica de backup do Couchbase.
Os scripts e as técnicas descritos aqui não estão prontos para produção; talvez você ainda precise fazer algumas melhorias de acordo com o seu ambiente para torná-lo tolerante a falhas.
Também recomendo que você leia as documentações oficiais mencionadas neste artigo, pois muitos parâmetros opcionais não serão mencionados.
Recomendações gerais
Máquinas de backup
Embora em clusters com pequeno volume de dados e um pequeno número de nós você possa até mesmo usar um dos nós para fazer backup dos dados fora do horário de pico, é altamente recomendável sempre executar os backups em uma máquina externa executada na mesma rede.
Não subestime a quantidade de memória e CPU necessárias para executar processos de backup íntegros. Compartilhar a mesma máquina pode afetar o desempenho do cluster e também causam falhas nos backups quando não há recursos suficientes disponíveis.
Se você precisar reduzir os custos de execução de um servidor extra para backups, a maioria dos provedores de nuvem permite que você programe quando uma instância deve ser iniciada e, em seguida, no script de backup, você pode desligar a máquina quando tudo estiver concluído.
No Kubernetes, isso deve ser ainda mais fácil, pois você pode usar CronJobs para fazer praticamente a mesma coisa ou simplesmente definir políticas de backup se estiver usando o Couchbase Autonomous Operator.
Política de retenção
Tanto o Incremental quanto o cumulativo Os backups dependem do último backup completo. Portanto, é importante lembrar que você não pode arquivar backups antigos apenas com base na data, mas também deve considerar suas dependências.
Se você tiver um SLA pequeno, considere também deixar os últimos backups em um armazenamento em bloco de fácil acesso. Dependendo do tamanho do seu banco de dados e da velocidade da rede, o download de dados de algum armazenamento de objetos pode lhe custar minutos preciosos.
Teste de recuperação
Embora seja inviável testar cada backup, é fundamental ter uma estratégia de teste de backup recorrente para verificar sua integridade. Os backups de teste também o ajudam a se familiarizar com as ferramentas de restauração de dados e também a entender quanto tempo será necessário para recuperar totalmente o banco de dados (duas coisas importantes para saber quando algo dá errado).
O Couchbase já tem internamente vários recursos que evitarão a perda de dados, por exemplo, o número de réplicas para cada vBucket que é configurado quando você cria o bucket pela primeira vez. Supondo que seu banco de dados esteja configurado corretamente, os cenários mais prováveis em que você precisará recuperar o banco de dados são :
- Se você perder mais nós do que o número de réplicas. (por exemplo, você configurou 2 réplicas, mas perdeu 3 nós de uma vez)
- Uma operação que deixará todo o banco de dados inconsistente (por exemplo, uma nova versão do aplicativo é implementada com um bug que atualiza/exclui um grande número de registros)
Preparação da máquina de backup
Se você planeja executar seus backups em uma máquina dedicada, deve copiar o arquivo caixa de sua instalação do Couchbase para esta máquina, ou simplesmente instalar o Couchbase nessa máquina também. Por exemplo, no Ubuntu, você precisa executar os seguintes comandos:
1 2 3 |
enrolar -O https://pacotes.couchbase.com/liberações/couchbase-liberação/couchbase-liberação-1.0-amd64.deb sudo dpkg -i ./couchbase-liberação-1.0-amd64.deb sudo apto-obter atualização |
Em seguida, você precisará executar o seguinte comando de acordo com sua versão do Couchbase:
Comunidade Couchbase:
1 |
sudo apto-obter instalar couchbase-servidor-comunidade |
Couchbase Enterprise
1 |
sudo apto-obter instalar couchbase-servidor |
Depois disso, todos os arquivos que precisaremos para este artigo deverão estar no diretório /opt/couchbase/bin pasta ("/Applications/Couchbase Server.app/Contents/Resources/couchbase-core/bin“ no Mac).
Para reduzir o inconveniente de fazer referência ao caixa em cada comando, sugiro que você a adicione à pasta PATH ou criar um link simbólico no diretório /usr/bin diretório:
Comunidade Couchbase:
1 |
/usr/caixa$ sudo ln -s /optar/couchbase/caixa/cbbackup cbbackup |
Couchbase Enterprise:
1 |
/usr/caixa$ sudo ln -s /optar/couchbase/caixa/cbbackupmgr cbbackupmgr |
Como fazer backup da comunidade do Couchbase
O Couchbase Community vem com duas ferramentas principais para ajudá-lo a fazer backup e restaurar os dados do seu cluster do Couchbase: cbbackup e cbrestore. Ambas as ferramentas estão disponíveis na seção caixa de sua instalação do Couchbase.
O CBBACKUP tem três modos principais:
-
-
- completo - O completo executará um backup completo.
- diferença - (padrão) O diferença executará um backup incremental diferencial que faz backup apenas das alterações desde o último backup completo ou incremental.
- accu - O accu executa um backup incremental cumulativo, que faz o backup de todas as alterações desde o último backup completo.
-
Uma estratégia de backup simples poderia ser semelhante à seguinte:
-
-
- Backup completo aos domingos, à 1h;
- Backups incrementais diários à 1h;
-
Vamos começar criando um script que executará nosso backup completo e criará um arquivo chamado full_backup_couchbase.sh com o seguinte conteúdo:
1 2 3 4 5 6 7 8 |
#!/bin/bash -e eco "Executando o backup completo do Couchbase" cd /optar/couchbase/caixa/ ./cbbackup http://COUCHBASE_NODE_IP:8091 /SEU/BACKUP/DIR -u seu nome de usuário -p sua senha! -m completo eco "Concluído o backup completo do Couchbase" |
Em seguida, vamos usar o CronTab para agendar nosso backup completo, executando o seguinte comando:
1 |
sudo vim /etc/crontab |
Imprensa "i" para entrar no modo de edição e, em seguida, adicione a seguinte linha:
1 |
0 1 * * Sol seuUsuárioLocal /PATH/PARA/SEU/ROTEIRO/full_backup_couchbase.sh |
Observe que seuUsuárioLocal se refere ao usuário local da máquina, o script será executado usando esse contexto. Salve o arquivo quando terminar ("esc" e depois ":wq", caso não esteja acostumado com o vim)
Agora, vamos criar o script para executar os backups incrementais, a única diferença aqui é o modo parâmetro. Crie um arquivo chamado incremental_backup_couchbase.sh e adicione o seguinte conteúdo:
1 2 3 4 5 6 7 |
#!/bin/bash -e eco "Execução do backup incremental do Couchbase" cd /optar/couchbase/caixa/ ./cbbackup http://SEU_NÓ_IP DE BASE DE TOQUE:8091 /SEU/BACKUP/DIR -u seu nome de usuário na base de toque -p sua senha_de_base_de_toque -m diferença eco "Concluído o backup incremental do Couchbase" |
Vamos também adicionar esse script ao arquivo CronTab da guia:
1 |
sudo vim /etc/crontab |
Em seguida, adicione a seguinte linha:
1 |
0 1 * * 1-6 seuUsuárioLocal /PATH/PARA/SEU/ROTEIRO/incremental_backup_couchbase.sh |
O crontab acima diz que esse script será executado de segunda a sábado à 01h. Não se esqueça de tornar ambos os scripts executáveis:
1 2 |
chmod +x incremental_backup_couchbase.sh chmod +x full_backup_couchbase.sh |
Execute os dois scripts para ter certeza de que estão funcionando corretamente. Na última sessão deste artigo, você aprenderá a testar também o crontab.
Como fazer backup do Couchbase Enterprise
O Couchbase Enterprise vem com uma ferramenta mais abrangente chamada cbbackupmgr que oferece alguns recursos extras:
-
-
- Compactação de backup em um repositório de backup para liberar espaço em disco;
- Lista o conteúdo do arquivo de backup;
- Mesclar dois ou mais backups;
-
Como agora temos alguns recursos extras, podemos criar um script mais elaborado que faça o seguinte:
-
-
- Configure o diretório se ele ainda não estiver configurado (Configuração do cbbackupmgr)
- Executar um backup completo/delta
- Mesclar backups incrementais mais antigos para recuperar espaço em disco
-
Aqui está um script chamado backup_with_periodic_merge.sh que você poderia usar para fazer exatamente o que foi descrito acima:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
#!/bin/bash definir -e #DIR="${BASH_SOURCE%/*}" #if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi #. "$DIR/cbbackupmgr" #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Função _uso #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: função Uso { eco "Uso: ./backup-with-periodic-merge.sh [opções]" eco "Esse script fará primeiro um backup em todo o cluster e manterá o número especificado de pontos de restauração mesclando backups mais antigos que os pontos de restauração." eco " Opções:" eco " --archive eco " --repo eco " --cluster eco " --username eco " --password eco " --threads Número de threads usados para o processo de backup (padrão: 2)" eco " --restorepoints Número de backups em um determinado momento para restauração durante a interrupção (padrão: 3)" eco " --help Exibir esta ajuda e sair" saída 5 } # define os padrões, todos eles podem ser substituídos como variáveis de ambiente ou passados por meio do cli CB_USERNAME=${CB_USERNAME:="Administrador} CB_PASSWORD=${CB_PASSWORD:='senha'} CLUSTER=${CLUSTER:='localhost'} ARQUIVO=${ARQUIVO:='/backups'} REPO=${REPO:='couchbase'} ROSCAS=${ROSCAS:=2} PONTOS DE RESTAURAÇÃO=${PONTOS DE RESTAURAÇÃO=3} #***************************************************************************# BACKUPREGEX="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}_[0-9]{2}_[0-9]{2}.[0-9]{6}" CBBACKUPMGR=cbbackupmgr # analisa qualquer argumento de cli enquanto [ $# -gt 0 ] fazer caso $1 em --nome de usuário ) CB_USERNAME=$2 deslocamento 1 ;; --senha ) CB_PASSWORD=$2 deslocamento 1 ;; --agrupamento ) CLUSTER=$2 deslocamento 1 ;; --arquivo ) ARQUIVO=$2 deslocamento 1 ;; --fios ) ROSCAS=$2 deslocamento 1 ;; --pontos de restauração ) PONTOS DE RESTAURAÇÃO=$2 deslocamento 1 ;; --repo ) REPO=$2 deslocamento 1 ;; --ajuda ) Uso ;; *) eco ERRO : Inválido comando linha opção : "$1" Uso ;; esac deslocamento feito # Verificação se o diretório já está configurado REPODIR="${ARCHIVE}" se [[ "${REPODIR:${#REPODIR}-1}" != "/" ]]; então REPODIR="${ARCHIVE}/${REPO}" mais REPODIR="${ARCHIVE}${REPO}" fi eco $REPODIR se [ ! -d "$REPODIR" ]; então eco "O repositório de backup ainda não existe" CMD="${CBBACKUPMGR} config --archive $ARCHIVE --repo $REPO" eco "Configurando o repositório de backup..." avaliação "$CMD" fi ######################################################################################### ### Backup do Couchbase executado em 4 etapas: ### 1) Backup completo/delta ### 2) Último backup compacto ### 3) Mesclar ######################################################################################### ############ ETAPA 1 : BACKUP eco "---------------------------------------------------------" eco INICIAR ETAPA 1: BACKUP : "$(data)" CMD="${CBBACKUPMGR} backup --archive $ARCHIVE --repo $REPO --cluster couchbase://${CLUSTER} --username $CB_USERNAME --password $CB_PASSWORD --threads ${THREADS}" eco -e "Executando backup... \n Comando: $CMD" avaliação "$CMD" ############ ETAPA 2: BACKUP COMPACTO eco "---------------------------------------------------------" eco INICIAR ETAPA 2: COMPACTAÇÃO : "$(data)" LISTA DE BACKUPLIST=$("${CBBACKUPMGR}" lista --arquivo "${ARCHIVE}" --repo "${REPO}" | awk '{print $NF}' | grep -E "${BACKUPREGEX}") eco -e "Lista de instantâneos de backup ... \n\n$BACKUPLIST" ÚLTIMOBACKUP=$(eco "${BACKUPLIST}" | sed '$!d') eco Último backup nome é: "${LASTBACKUP}" CMD="${CBBACKUPMGR} compact --archive ${ARCHIVE} --repo ${REPO} --backup ${LASTBACKUP}" eco -e "Compactando o backup...\n Comando: ${CMD}" avaliação "$CMD" ############ ETAPA 3: MESCLANDO BACKUPS ANTIGOS eco "---------------------------------------------------------" eco INICIAR ETAPA 3: Fusão antigo backup : "$(data)" CONTAGEM=$(eco "${BACKUPLIST}" | wc -l) avaliação "${CBBACKUPMGR}" lista --arquivo "${ARCHIVE}" --repo "${REPO}" se [ "$COUNT" -gt "$RESTOREPOINTS" ]; então INICIAR=$(eco "${BACKUPLIST}" | sed -n 1p) FIM=$(eco "${BACKUPLIST}" | sed -n $((1+CONTAGEM-PONTOS DE RESTAURAÇÃO))p) eco -e "Início $START, FIM $END" CMD="${CBBACKUPMGR} merge --archive ${ARCHIVE} --repo ${REPO} --start ${START} --end ${END}" eco -e "Mesclando backups antigos...\n Comando: ${CMD}" avaliação "$CMD" fi avaliação "${CBBACKUPMGR}" lista --arquivo "${ARCHIVE}" --repo "${REPO}" |
Para executar o script, você pode especificar algo como o seguinte:
1 |
./backup_with_periodic_merge.sh --arquivo /backups/incremental/ --agrupamento SEU_COUCHBASE_IP:8091 --nome de usuário cb_usuário --senha cb_password |
Para evitar digitar esse comando todas as vezes, vamos criar um segundo script com todos os parâmetros. Aqui, um script chamado cb_incremental_backup.sh:
1 2 3 4 5 6 |
#!/bin/bash -e cd /casa/ubuntu/roteiros/ ./backup_with_periodic_merge.sh --arquivo /backups/incremental/ --agrupamento 10.0.0.8:8091 --nome de usuário backup_user --senha baWN4s9wwpb5PrmN eco "O backup incremental do Couchbase PROD foi concluído." | correio -s "Prod - Backup incremental do Couchbase" backup@minha empresa.com -a "FROM:somegroup@mycompany.comr" |
Aqui, estou assumindo que ambos os arquivos estão localizados na pasta /home/ubuntu/scripts. No final do script, também estou usando Postfix para enviar um e-mail a um grupo de usuários após a conclusão de todo o processo. Definitivamente, há maneiras melhores de monitorar se os backups foram executados com êxito, mas se você ainda não tiver uma estratégia melhor, enviar um e-mail é pelo menos um tipo básico de monitoramento.
Agendar a execução desse script usando o crontab será muito semelhante ao que fizemos na edição comunitária, basta executar o seguinte comando:
1 |
sudo vim /etc/crontab |
Em seguida, adicione a seguinte linha:
1 |
0 1 * * * seuUsuárioLocal /casa/ubuntu/roteiros/cb_incremental_backup.sh |
Observe que seuUsuárioLocal se refere ao usuário local da máquina, o script será executado usando esse contexto. Salve o arquivo quando terminar ("esc" e depois ":wq", caso não esteja acostumado com o vim)
O cb_incremental_backup.sh O script executará backups incrementais todos os dias à 01h. Recomendo que você também execute backups completos de tempos em tempos para evitar ter um único backup completo com vários incrementais.
Testando seu CronTab
Você pode testar rapidamente seus CronTabs usando cronômetroPara instalá-lo, basta executar os seguintes comandos
1 2 |
enrolar -sOL https://cronitor.io/dl/cronitor-stable-linux-amd64.tgz sudo alcatrão xvf cronômetro-estável-linux-amd64.tgz -C /usr/caixa/ |
Em seguida, execute o comando abaixo para listar todos os seus trabalhos agendados:
1 |
cronômetro selecionar |
Navegue pela lista usando as teclas de seta, escolha a que você deseja executar e pressione Enter:
Se tudo estiver configurado corretamente, seu script deverá ser executado com êxito.