Como backup em grande escala Gitlab?

13

Ao solicitar ao Gitlab suporte sobre como fazer um backup de 3 TB no Gitlab local, eles respondem usando nossa ferramenta que produz um tarball.

Isso me parece errado em todos os níveis. Este tarball contém o despejo do postgres, imagens do docker, dados de repo, GIT LFS, etc configuração e assim por diante. O backup da TB de dados estáticos, juntamente com os dados muito dinâmicos da KB, não é o ideal. E então vem a questão de: queremos fazer um backup a cada hora.

Questão

Eu realmente gostaria de saber dos outros como eles fazem isso, para obter um backup consistente.

O ZFS no Linux ficaria bem comigo, se isso faz parte da solução.

Sandra
fonte
3
Por que isso está errado? Você faz o backup completo do seu Gitlab para restaurá-lo completamente. Eu não acho que isso esteja errado. É claro que ele usa muito mais espaço do que digamos, backups incrementais, mas ... eu não me importaria com o tamanho do backup.
Lenniey 5/02/19
3
Ter um backup a cada hora não é algo inédito, mas é impossível obter 3 TB em menos de uma hora com a abordagem deles. E os backups por apenas um dia seriam de ~ 100 TB, onde pode haver apenas 10 MB de alterações nos dados.
21419 Sandra
OK, essa é uma pergunta diferente, não sobre o backup em geral, mas sobre backups frequentes.
Lenniey
5
Nos documentos oficiais, eles até mencionam seu método como lento e sugerem alternativas: If your GitLab server contains a lot of Git repository data you may find the GitLab backup script to be too slow. In this case you can consider using filesystem snapshots as part of your backup strategy.embora não possa falar por experiência própria. Mas eu posso ter que incluir algo como isso em breve ...
Lenniey
Gitlab tem opções no arquivo de configuração e bandeiras de backup que permitirá que você para excluir seções, ou ir tão longe para armazenar imagens e artefatos em uma loja objeto
ssube

Respostas:

10

Por um período tão curto entre os backups (1h), sua melhor aposta é confiar no instantâneo e no send/recv suporte do sistema de arquivos .

Se o uso do ZoL não for um problema no seu ambiente, aconselho vivamente que o use. O ZFS é um sistema de arquivos muito robusto e você realmente gostará de todos os extras (por exemplo: compactação) que ele oferece. Quando associado sanoid/syncoid, ele pode fornecer uma estratégia de backup muito forte. A principal desvantagem é que ele não está incluído no kernel da linha principal, portanto você precisa instalá-lo / atualizá-lo separadamente.

Como alternativa, se você realmente precisar se restringir a itens incluídos na linha principal, poderá usar o BTRFS. Mas não deixe de entender suas (muitas) desvantagens e pita .

Finalmente, uma solução alternativa é usar lvmthinpara fazer backups regulares (por exemplo: with snapper), contando com ferramentas de terceiros (por exemplo:bdsync , blocksync, etc) para copiar apenas deltas / navio.

Uma abordagem diferente seria ter duas máquinas replicadas (via DRBD) nas quais você tira instantâneos independentes lvmthin.

shodanshok
fonte
E o postgres? Pararia o gitlab e o postgres por um minuto, para que uma imagem consistente pudesse ser feita? Idealmente, seria ótimo se o postgres pudesse ser colocado no modo somente leitura enquanto o instantâneo é feito.
20519 Sandra
4
A restauração do @Sandra a partir de um instantâneo do sistema de arquivos deve parecer o postgresql (e qualquer outro banco de dados gravado corretamente) como um cenário genérico de "falha do host", acionando seu próprio procedimento de recuperação (por exemplo: comprometendo o banco de dados principal com qualquer página parcialmente gravada). Em outras palavras, você não precisa colocar o postgres no modo somente leitura ao tirar instantâneos.
shodanshok 5/02/19
14

Eu revisaria o que você está fazendo backup e possivelmente usaria uma abordagem de "caminhos múltiplos". Por exemplo, você pode fazer backup dos repositórios do Git executando constantemente os pulls do Git nos servidores de backup. Isso copiaria apenas o diff e deixaria uma segunda cópia de todos os repositórios Git. Presumivelmente, você pode detectar novos repositórios com a API.

E use os procedimentos de backup "embutidos" para fazer backup dos problemas, etc. Você também pode configurar o banco de dados PostgreSQL com uma espera quente com replicação.

Possivelmente o seu 3 TB vem de imagens de contêiner no registro do Docker. Você precisa fazer backup deles? Nesse caso, pode haver uma abordagem melhor apenas para isso.

Basicamente, eu recomendaria realmente analisar o que constitui o seu backup e fazer backup dos dados em várias partes.

Até a ferramenta de backup do GitLab tem opções para incluir / excluir determinadas partes do sistema, como o Docker Registry.

ETL
fonte
1
O git pulls não é um backup incremental perfeito. git push --forceinterromperá os backups ou apagará o histórico deles, dependendo de como é implementado.
User371366
@ dn3s é por isso que você sempre desabilita o git push --force no repositório principal. Se alguém quiser mudar o histórico, pode criar seu próprio garfo e aceitar todos os riscos que isso traz.
22419 charlie_pl #
2
isso pode ser bom para replicação , mas você não deseja que a integridade de seus backups dependa do comportamento correto dos aplicativos. o que acontece se houver um erro no aplicativo ou for configurado incorretamente no caminho? e se o seu servidor for comprometido por um usuário mal-intencionado? se o seu aplicativo puder remover o conteúdo do host de backup, muito do valor dos backups remotos incrementais será perdido.
User371366