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.
Respostas:
DRBD no modo Dual-primário com um Proxy é uma opção.
fonte
Em vez de sincronizar, por que não compartilhar o mesmo sistema de arquivos pelo NFS?
fonte
A implementação de um sistema de arquivos distribuído é provavelmente melhor do que hackear isso junto com ferramentas e scripts, especialmente se o cluster de servidores crescer. Você também poderá lidar melhor com um nó desativado.
Não acho que Gluster (ou AFS) seja um exagero.
fonte
No seu caso, eu recomendaria uma combinação de DRBD no modo primário primário e gfs ou ocfs.
A desvantagem do DRBD no dual-primário é que ele estará sendo executado no modo síncrono. Mas a velocidade de gravação não parece ser importante aqui, certo?
Uma alternativa ao DRBD pode ser um Soft-Raid1 usando muitos (2+) iSCSI-Targets - mas eu preferiria o DRBD com dois nós.
fonte
Como demonstrado acima, muitas soluções estão disponíveis, cada uma com suas vantagens e desvantagens.
Eu acho que consideraria colocar a árvore inteira sob controle de versão ( Subversion , por exemplo) e fazer check-in / atualização periódica de ambos os servidores nos trabalhos cron.
fonte
Tendo acabado de terminar uma busca em relação à mesma coisa, vou com gluster. No entanto, eu não fiz ou encontrei nenhum teste de desempenho.
fonte