
Quando você solicita a uma instância do GitLab em execução para gerar um arquivo de backup completo com o gitlab-rake gitlab:backup:create
comando:
- O GitLab executa alguma coisa para congelar o estado do aplicativo?
- Existe algum risco de gerar um backup tecnicamente funcional que incorpore um estado inconsistente?
Em detalhe:
- O que acontece quando novos commits são enviados enquanto o backup está sendo gerado?
- De modo geral, se alguma modificação for iniciada durante o backup, o que pode acontecer?
- Existe algum cache que enfileira as alterações para serem aplicadas ao banco de dados ou para gravar em arquivos/repositórios?
No momento não tenho ideia do que acontece quando você arquiva um repositório que está sendo modificado ou quando é feito um backup em um banco de dados executando transações?
Eu li o código de backup do GitLab hojegitlab.com/gitlab-org/gitlab-ce/tree/master/lib/backupmas não consegui encontrar nenhuma dica para minhas perguntas.Eu não codifico com Ruby então isso não me ajuda...
GitLab apenas executa o tar
comando nos arquivos para backup.
Na documentação do GitLabdocs.gitlab.com/ee/raketasks/backup_restore.html#backup-strategy-optionÉ afirmado que:
Quando os dados são alterados durante a leitura do tar, o arquivo de erro alterado à medida que o lemos pode ocorrer e causará falha no processo de backup. Para combater isso, a versão 8.17 introduz uma nova estratégia de backup chamada cópia. A estratégia copia os arquivos de dados para um local temporário antes de chamar tar e gzip, evitando o erro.
O STRATEGY=copy
argumento faz gitlab-rake gitlab:backup:create
executar um rsync -a
comando para copiar todos os arquivos antes de criar o arquivo com a extensão tar
.
No meu entendimento da documentação, afirma-se que, ao usar a copy
estratégia, o GitLab nunca produzirá um arquivo tecnicamente corrompido e nunca falhará em criá-lo. Presumo que esta estratégia garanta que o arquivo gerado seja restaurável, mas e quanto ao estado de consistência dos dados?
Podemos ter certeza de que o arquivo de backup incorpora um estado de snapshot consistente/limpo da instância do GitLab?
Não consigo encontrar nenhuma informação na documentação a esse respeito.
Quero fazer backup do GitLab sem interrupção.
Eu sei que poderia parar o GitLab por alguns segundos e capturar o volume LVM ou sistema de arquivos em vez de usar o mecanismo de backup integrado, mas não quero interromper o GitLab.
Você pode executar um backup do GitLab, interrompendo todos os serviços, exceto aquele postgresql
, para que nenhuma modificação possa ocorrer durante o backup com o mecanismo integrado do GitLab, mas ainda assim você terá que bloquear o serviço para seus usuários por algum tempo.
Bônus: Minhas perguntas também se aplicam à captura instantânea do volume ou sistema de arquivos LVM!
Responder1
Há muitas perguntas sobre como fazer backup consistente do Gitlab, mas não encontrei uma boa resposta.
Algumas das perguntas:
- https://stackoverflow.com/questions/24066283/how-to-make-a-consistent-gitlab-backup
- https://stackoverflow.com/questions/15825735/gitlab-is-the-backup-rake-task-atomic
posso citar você@SørenLøvborga resposta que parece correta:
O backup dos próprios repositórios é feito usando
git bundle
, portanto, eles também devem ser seguros. Os uploads são arquivos simples e de gravação única, portanto, também não deve haver problemas. O banco de dados pode não estar perfeitamente sincronizado com repositórios e arquivos, mas não de uma forma que possa causar perda de dados. Resumindo, parece totalmente seguro fazer um backup enquanto o GitLab está em execução, mesmo que não seja atômico.
Editar:você já recebeu uma resposta oficial deEquipe Gitlab.