E quanto pirsyncd ? Eu acho que é uma boa ideia para você;)
Plataforma: Ubuntu 10.04 x86.
Temos um servidor HTTP (nginx, mas isso não é relevante) que serve algum conteúdo estático. O conteúdo é (raramente) carregado por gerenciadores de conteúdo via SFTP, mas pode ser alterado / adicionado por outros meios (como cat
, feito diretamente no servidor).
Agora, queremos adicionar um segundo servidor HTTP idêntico - um espelho secundário em outro datacenter de outro continente. (E configure o round-robin do DNS.)
Qual é a melhor maneira de configurar a sincronização entre o servidor mestre e um espelho secundário, para que o atraso entre a modificação e a ressincronização seja mínimo (alguns segundos devem ser suportáveis)?
A solução deve lidar com grandes mudanças e condições de corrida. Ou seja, se eu alterar 1000 arquivos, ele não deve gerar 1000 processos de sincronização. E se eu mudar alguma coisa enquanto a sincronização estiver ativa, minha nova alteração deve eventualmente chegar ao servidor também ... E assim por diante.
Soluções rejeitadas:
Eu diria que precisamos de algo baseado em inotify. Existe uma solução pronta?
Atualização: dois requisitos extras (bastante óbvios) que esqueci de mencionar:
Se os dados forem alterados de alguma forma no espelho secundário (digamos, um superusuário apagou acidentalmente um arquivo), a solução de sincronização deve restaurar os dados de volta ao estado principal na próxima sincronização.
Em estado ocioso, a solução não deve consumir tráfego ou recursos do sistema (além de alguma memória, etc., para o processo de daemon de dormir, é claro).
Atualização 2: mais um requisito:
E quanto pirsyncd ? Eu acho que é uma boa ideia para você;)
Você considerou o Unison como um meio de manter os arquivos em sincronia? Ao usá-lo, você poderá fazer a sincronização unidirecional solicitada. Parece um ajuste razoável para esta aplicação.
Você pode usar lsyncd
consulte: Is existe uma solução de backup Linux que usa inotify?
Parece que é aqui que você pode escrever um script que verifica o registro de data e hora dos arquivos e se o registro de data é posterior à última execução do script, presuma que esse arquivo precisa ser pressionado e disparar o rsync ou outra ferramenta para sincronizar o arquivo. Da mesma forma, do outro lado, faça o mesmo com a verificação se um arquivo foi alterado e, em caso afirmativo, acione um pull. Tecido pode realmente ser uma boa ferramenta para isso. Se você estiver familiarizado com o Python, o uso de fabric pode ser o caminho a percorrer, em combinação com a verificação de timestamp.