Como o GitLab garante que um arquivo de backup gerado incorpore um estado limpo do aplicativo?

Como o GitLab garante que um arquivo de backup gerado incorpore um estado limpo do aplicativo?

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:createcomando:

  • 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 tarcomando 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=copyargumento faz gitlab-rake gitlab:backup:createexecutar um rsync -acomando 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 copyestraté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:

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.

informação relacionada