Mantendo arquivos sincronizados em dois servidores

1

Eu configurei um servidor web executando o nginx e outro servidor rodando o php-fpm em máquinas virtuais Linode. O Nginx faz proxy de todas as solicitações do PHP para o backend do PHP e isso funciona muito bem.

O problema é que os arquivos web reais precisam existir tanto no servidor web quanto no PHP worker e precisam ser sincronizados.

Como isso é feito? Eu estava pensando que uma solução ideal seria usar armazenamento compartilhado (NFS) e montar o armazenamento em cada servidor, mas não tenho experiência com isso. Algum bom guia sobre isso? Isso é possível com o Linode?

Outra solução (embora não boa) seria rodar algo como rysnc a cada 3 segundos, mas haveria um atraso de sincronismo, e sem mencionar toda a atividade de rede extra.

Obrigado por ideias.

    
por Justin 09.02.2012 / 22:23

5 respostas

3

melhor que executar o rsync a cada três segundos (ou algo similar) está executando o rsync sempre que os arquivos são realmente alterados. Isso pode ser feito facilmente com incron . O Incron é como o cron, mas em vez de especificar algo como "execute isso a cada minuto", você pode dizer "executar isso toda vez que um arquivo for alterado". Você pode especificar um incrontab como este:

/path/to/webroot IN_MODIFY,IN_CREATE rsync -az $@/$# user@otherserver:$@/$#
/path/to/webroot IN_DELETE rsync --delete $@ user@otherserver:$@
    
por 09.02.2012 / 22:46
1

Temos uma configuração semelhante com o nginx na frente dos servidores de aplicativos Ruby. Estamos usando gluster neste cenário. Os servidores da Web com balanceamento de carga são os servidores gluster, com os servidores de aplicativos como os clientes gluster.

O Gluster usa o FUSE, por isso pode ser mais fácil de executar em um ambiente VPS.

    
por 09.02.2012 / 22:59
1
O

link é semelhante ao rsync, mas projetado com essa situação específica em mente; Eu acho que você ainda pode precisar de algo para ativá-lo, como o incron

    
por 10.02.2012 / 02:35
1

Seus arquivos de origem mudam com tanta frequência que você consideraria rsyncing a cada 3 segundos, ou esses arquivos são gerados dinamicamente?

Se esses forem de fato arquivos de origem, seria melhor ativar uma ressincronização ao detectar uma alteração na hora da última modificação do arquivo / pasta.

Se gerado dinamicamente, considere armazenar o conteúdo em um banco de dados compartilhado por ambas as máquinas e recriá-los como arquivos se a versão do banco de dados for mais nova que o físico (compare um campo de registro de data e hora ao registro de data e hora do arquivo).

    
por 10.02.2012 / 02:45
0

Apenas deparei com essa resposta enquanto pesquisava minha própria solução. O problema com o incron é que ele não monitora subdiretórios e pastas.

Uma alternativa é o lsyncd: link

    
por 13.03.2012 / 04:44