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.
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 ...Respostas:
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
lvmthin
para fazer backups regulares (por exemplo: withsnapper
), 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 independenteslvmthin
.fonte
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.
fonte
git push --force
interromperá os backups ou apagará o histórico deles, dependendo de como é implementado.