Por grande árvore de arquivos, quero dizer cerca de 200k arquivos, e crescendo o tempo todo. Um número relativamente pequeno de arquivos está sendo alterado em qualquer hora.
Por bidirecional, quero dizer que alterações podem ocorrer em um servidor e precisam ser enviadas para o outro, para que o rsync não pareça apropriado.
Por distante, quero dizer que os servidores estão ambos em data centers, mas geograficamente remotos um do outro. Atualmente, existem apenas 2 servidores, mas isso pode se expandir com o tempo.
Em tempo real, não há problema em haver uma pequena latência entre a sincronização, mas executar um cron a cada 1-2 minutos não parece certo, pois uma fração muito pequena dos arquivos pode mudar a qualquer hora, e muito menos.
EDIT : Isso está sendo executado nos VPS, então eu posso estar limitado nos tipos de coisas no nível do kernel que posso fazer. Além disso, os VPSs não são ricos em recursos; portanto, evito soluções que exijam muita memória RAM (como o Gluster?).
Qual é a melhor / mais "aceita" abordagem para fazer isso? Parece que isso seria uma necessidade comum, mas ainda não consegui encontrar uma abordagem geralmente aceita, o que foi surpreendente. (Estou buscando a segurança das massas. :)
Encontrei o lsyncd para acionar uma sincronização no nível de alteração do sistema de arquivos. Isso parece inteligente, embora não seja super comum, e estou um pouco confuso com as várias abordagens lsyncd. Há apenas o uso de lsyncd com o rsync, mas parece que isso pode ser frágil para a bidirecionalidade, já que o rsync não tem noção de memória (por exemplo, para saber se um arquivo excluído em A deve ser excluído em B ou se é um novo arquivo em B que deve ser copiado para A). lipsync parece ser apenas uma implementação lsyncd + rsync, certo?
Depois, use lsyncd com csync2 , assim: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ... Estou inclinado a essa abordagem, mas O csync2 é um pouco peculiar, embora eu tenha feito um teste bem-sucedido. Estou principalmente preocupado por não ter conseguido encontrar muita confirmação da comunidade sobre esse método.
As pessoas aqui parecem gostar muito do Unison, mas parece que ele não está mais em desenvolvimento ativo e não está claro que ele tenha um gatilho automático como o lsyncd.
Eu vi Gluster mencionado, mas talvez exagero pelo que eu preciso?
UPDATE: fyi- acabei indo com a solução original que mencionei: lsyncd + csync2. Parece funcionar muito bem e eu gosto da abordagem arquitetônica de ter os servidores unidos de maneira muito vaga, para que cada servidor possa operar indefinidamente por conta própria, independentemente da qualidade do link entre eles.