rsync dois servidores de armazenamento grandes

2

Temos dois grandes servidores de armazenamento (+ 100TB), um é executado no ZFS, o outro executa o XFS, pretendemos usar o XFS como nosso servidor de trabalho e usar o ZFS como servidor de backup (instantâneos < 3). Agora o problema é manter esses animais em sincronia ... (sincronizar como no diário sincronizado)

A opção mais fácil é usar o rsync, mas infelizmente a estrutura do diretório é profunda e cheia de hard links, em todo o lugar. Então, isso significa que precisaríamos fazer uma varredura "global" que demoraria séculos ... Além disso, a maioria dos dados é criada e nunca modificada. Então rsync pode não ser o caminho a percorrer.

Eu olhei para inotify , o que parece relativamente barato e já que apenas sincronizamos em uma base diária, seria capaz de descarregar para um bom tempo ... infelizmente, se nós olharmos apenas para os arquivos criados nós copiaríamos hard links como dados que dobrariam a quantidade de armazenamento usada em nosso backup ... (basicamente não há como fazer a verificação -H do rsync)

A única opção que resta para pensar seria reorganizar nosso armazenamento para usar um diretório baseado em data, mas infelizmente não é algo que preferiríamos ...

Existem outras opções?

Para referência:

  • O servidor com XFS possui um controlador RAID (sem opção JBOD) e discos SATA (WD RE). RAM de 32 GB
  • O servidor com o ZFS tem um controlador HBA e discos SAS. RAM de 126 GB

Quando faço referência ao ZFS como lento, vejo 'ls' levando segundos ...

    
por SvennD 31.08.2016 / 18:19

3 respostas

4

Quão rápido é "rápido o suficiente"?

Você está fazendo isso uma vez por dia, então eu suspeito que, se levar de 2 a 3 horas, isso é suficiente.

Nesse caso, "rsync -avP" deve ser tudo o que você precisa. As versões mais recentes tratam de diretórios grandes, hierarquias profundas e não exigem tanta RAM quanto versões mais antigas.

Se nenhum arquivo for alterado, "rsync -a" será tão rápido quanto "ls -lR". Você não pode ser mais rápido que "ls -lR" porque ele faz um lstat () de todos os arquivos no sistema.

Benchmark "ls -lR" e "rsync -a". Se eles forem mais lentos do que você pensa, consulte o link para obter conselhos.

Se você precisar de algo mais rápido do que o benchmark "ls -lR", você terá que escrever algo que use "inotify" ou usar algum tipo de sistema baseado em blocos. Em particular, o uso do ZFS em ambos os sistemas permitiria usar o sistema de exportação / importação de instantâneos que o ZFS incorporou.

    
por 01.09.2016 / 19:35
6

Você realmente deve usar o ZFS em ambos os lados, junto com uma rotina de captura / captura instantânea de nível de bloco, como Sanoid .

Sem isso, você está preso a operações baseadas em arquivos e à dor da verificação de arquivos rsync.

    
por 31.08.2016 / 18:34
2

Eu adotaria uma estratégia de duas partes ... e no final eu sugeriria uma terceira parte que é opcional.

Parte 1: Use inotify: Escreva um programa que use inotify para registrar quais arquivos foram criados, excluídos e modificados. Escreva outro programa que leia o log, remova quaisquer duplicatas e faça backups desses arquivos (e exclua os arquivos excluídos). Isso não será fácil. Programação inotify é complexo. O log não pode ser um arquivo de texto simples, pois os nomes de arquivos podem incluir novas linhas. Se o sistema falhar enquanto o log estiver sendo gravado, você precisará lidar com nomes de arquivos parcialmente escritos.

Parte 2: O rsync semanal é apenas no caso. A cada poucos dias, faça um "rsync -a --delete" para capturar todos os arquivos que foram perdidos. A solução na parte 1 é imperfeita. Se o seu programa não acompanhar o inotify, ele poderá perder alguns arquivos. Se a máquina for reinicializada, o log de arquivos criados / excluídos / modificados poderá perder os itens mais recentes. Bugs e outros problemas também podem resultar na falta de alguns arquivos.

Opcional Parte 3: Depois que você tiver esta execução por algumas semanas e tiver resolvido todos os bugs, você ainda descobrirá que o rsync está ocasionalmente encontrando arquivos que foram perdidos. Eu prometo a você que isso vai acontecer. inotify é "melhor esforço". Então, neste ponto, você perceberá que manter o código na Parte 1 e na Parte 2 é o dobro do trabalho esperado. Para resolver este problema, jogue fora o código que você escreveu na Parte 1, porque o rsync é tudo o que você realmente precisava em primeiro lugar.

    
por 01.09.2016 / 19:48