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

0

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

A maneira ingênua que posso pensar em fazer isso é executar o rsync periodicamente através do cron em ambas as máquinas. Mas há falácias nessa abordagem: -

  1. Pode acontecer que o rsysnc anterior não esteja completo e o cron executou o rsync mais uma vez enquanto o rysnc anterior ainda está em andamento.
  2. Um novo arquivo é adicionado no dir1 e antes de o rsync ser executado no dir2 rsync no dir1 executado, em seguida, 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 à procura de código aberto, que será mais fácil de configurar e começar.

    
por tuk 20.09.2016 / 11:00

2 respostas

1

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

Como acontece com qualquer mecanismo de sincronização, sua rede dentro do cluster deve ser capaz de carregar 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 no site
  • Instale uma pilha de clusters de sua escolha: Red Hat completa (se você precisar 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 nos dois lados

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

    
por 20.09.2016 / 12:22
0

Se estiver na mesma máquina, considere o uso de um link do sistema de arquivos. Isso significaria ou dir2 "pontos" para dir1 ou vice-versa, enquanto seria transparente. Para fazer isso, use ln , por exemplo. ln -s /path/to/dir1 /path/to/dir2 ou, alternativamente, use caminhos relativos. O -s significa que é um link simbólico, por isso está apenas se referindo ao caminho e não ao inode de dir1 .

Edit: Desculpe, perdeu a parte "both machines".

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

    
por 20.09.2016 / 11:44