Há algo fundamentalmente quebrado na sua declaração de problema. Suponha que seus servidores estejam em sincronia e, em seguida, crie um arquivo aaaa.jpg
no Nó 2. Se a próxima sincronização excluir esse arquivo espúrio do Nó 2 (já que ele não existe no Nó 1, ele deve ter sido excluído), ou deveria copiar o arquivo para o Nó 1 (já que ele não existe no Nó 1, ele deve ser recém-criado)?
A ordem em que você executa as sincronizações determinará o que acontece em cada caso. Isso é praticamente garantido para não dar o resultado desejado em muitos casos. Pior ainda, se as sincronizações forem executadas em paralelo (para que um dos hosts seja atualizado por seu próprio trabalho de sincronização e, ao mesmo tempo, esteja sendo percorrido pelo trabalho de sincronização em execução no outro host), o resultado parecerá bastante aleatório. / p>
O Rsync é fundamentalmente projetado para sincronização unidirecional. Você não pode simplesmente executar dois trabalhos de rsync e esperar fazer uma sincronização bidirecional.
Unison é um sincronizador de arquivos projetado para sincronização bidirecional. É a coisa mais próxima da ferramenta certa para a sua tarefa. Configure e execute unison -auto remote.example.com://path/to/directory /path/to/directory
em um dos hosts.
Independentemente da ferramenta que você usa, existe a possibilidade de conflitos, por exemplo, se o mesmo arquivo for substituído por duas versões diferentes nas duas máquinas diferentes. Não há uma boa maneira automatizada de resolver esses conflitos, portanto, será necessária uma intervenção manual.
Na maioria das configurações, o correto é designar um único servidor como o local para fazer o upload e sincronizar todos os outros servidores desse servidor mestre. Se alguém fizer o upload de um arquivo para um escravo, faça-o retransmitir o upload para o mestre; não mude nada localmente. Sempre que um arquivo for alterado no mestre, envie-o para o (s) escravo (s).