Mantenha dois diretórios remotos sincronizados no Ubuntu em tempo real

Mantenha dois diretórios remotos sincronizados no Ubuntu em tempo real

Minha intenção é manter dois diretórios remotos (digamos dir1 e dir2) sincronizados. Assim, sempre que houver uma alteração no conteúdo do dir1 (pode ser adição ou exclusão de um novo arquivo ou diretório ou modificação do conteúdo de um arquivo no diretório), a alteração deverá ser propagada para o dir2 e vice-versa.

A maneira ingênua de fazer isso é executar o rsync periodicamente via cron em ambas as máquinas. Mas existem falácias nesta abordagem: -

  1. Pode acontecer que o rsysnc anterior não esteja completo e o cron execute o rsync mais uma vez enquanto o rysnc anterior ainda está em andamento.
  2. Um novo arquivo é adicionado no dir1 e antes do rsync ser executado no dir2, o rsync no dir1 é executado, então o arquivo recém-adicionado pode ser excluído do dir1, pois não está presente no dir2
  3. Além disso, isso não é em tempo real.

Alguns podem sugerir uma maneira melhor de fazer isso? Estou procurando um código aberto que seja mais fácil de configurar e começar.

Responder1

A única maneira de fornecer uma garantia "dura em tempo real" sem uma janela de corrida é garantir que uma gravação seja reconhecida somente depois de atingir ambos os lados. A maneira usual de conseguir isso é com um sistema de arquivos em cluster (como OCFS2 ou GFS2) em um dispositivo de bloco compartilhado. Esse dispositivo de bloco compartilhado pode ser construído de maneira fácil e barata usando DRBD.

Como acontece com qualquer mecanismo de sincronização, sua rede intracluster deve ser capaz de transportar a taxa de alteração com latência aceitável.

A folha de dicas está em torno das linhas de

  • Reserve um dispositivo de bloco (disco, partição, LV, ..) em ambos os lados
  • instale e configure o DRBD (apt-get install drbd-utils), use a excelente documentação emo site deles
  • Instale uma pilha de cluster de sua escolha: Red Hat completo (se você precisar de mais do que apenas um sistema de arquivos compartilhado) ou o O2DLM minimalista, mas muito fácil (incluído no OCFS2).
  • Formate o dispositivo DRBD com GFS2 (somente pilha Red Hat) ou OCFS2 (possível com ambas as pilhas) e monte-o em ambos os lados

Agora você NÃO tem um par de diretórios sincronizados: você tem um único diretório, que está disponível em ambos os nós. Funcionalmente é o mesmo, mas sem as janelas de corrida.

Responder2

Se estiver na mesma máquina, considere usar um link de sistema de arquivos. Isso significaria que dir2 "aponta" para dir1 ou vice-versa, embora fosse transparente. Para fazer isso, use, lnpor exemplo ln -s /path/to/dir1 /path/to/dir2, ou alternativamente, use caminhos relativos. Isso -ssignifica que é um link simbólico, portanto, refere-se apenas ao caminho e não ao inode de dir1.

Editar: Desculpe, perdi a parte "ambas as máquinas".

Talvez considere usar um compartilhamento de rede, sincronizar dois locais em tempo (quase) real é sempre difícil.

informação relacionada