Executando uma varredura de rsync antes de inicializar o lsyncd para sincronizar instâncias no EC2

1

Minha empresa usa vários servidores EC2 que serão dimensionados para cima e para baixo de acordo com a carga que estamos recebendo em nossos sites a qualquer momento. Por causa da nossa discussão aqui, estamos executando quatro instâncias:

  • master.ourdomain.com - o "hub" de sincronização de arquivos dos servidores da web
  • www1 / www2 / www3.ourdomain.com - três servidores da web que são ativados ou desativados conforme determinado pela carga

Estou usando o lsyncd para manter todos os servidores da Web em sincronia e, na maioria das vezes, ele está funcionando muito bem. Estamos usando um esquema de sincronização bidirecional, de modo que cada servidor da web seja sincronizado com o mestre e o mestre sincronize com cada servidor da web. Assim, os servidores web são mantidos em sincronia, mesmo que eles não estejam se sincronizando diretamente.

Estou tendo um problema que estou tendo dificuldade em resolver, no entanto. Ocorre sob estas circunstâncias:

  • Quando são feitas alterações no mestre (talvez depois que código), enquanto alguns dos servidores web redundantes estão dormindo
  • E, em seguida, um servidor da Web para dormir acorda para absorver a carga

Nessa circunstância, gostaria que o seguinte acontecesse:

  • Primeiro, o servidor da web recém-acordado deve sincronizar sua estrutura de arquivos - one way - contra master, para trazer seu código de aplicação web atualizado.
  • Então, e só então, deve começar a empurrar as alterações em seu arquivo estrutura de volta ao mestre.

Infelizmente, atualmente, quando um servidor inativo é iniciado, quando o lsyncd é iniciado, ele envia as alterações de volta ao master antes de atualizar sua própria base de código , sobrescrevendo o novo código com o antigo.

Assim, antes do lsyncd iniciar, eu gostaria de poder sincronizar o código dos servidores web com o do mestre, talvez executando um rsync de uma via simples contra as duas máquinas.

Estamos executando o lsyncd v.2 e tentamos fazer isso acontecer usando as opções de configuração "bash" documentadas no manual lsyncd . Meu arquivo de configuração é assim:

settings = {
   logfile      = "/home/user/log/lsyncd/log.txt",
   statusFile   = "/home/user/log/lsyncd/status.txt",
   maxProcesses = 2,
   nodaemon     = false,
}

bash = {
    onStartup = "rsync [email protected]:/home/user/www /home/user/www"
}

sync{
    default.rsyncssh,
    source="/home/user/www/",
    host="[email protected]",
    targetdir="/home/user/www/",
    rsyncOpts="-ltus",
    excludeFrom="/home/user/conf/lsyncd/exclude"
}

(Eu obviamente redigi esse arquivo para proteger as identidades dos culpados.)

Simplificando, isso não está funcionando.

De que outra forma eu posso abordar esse problema? Eu estava olhando para a opção --delete-after em man rsync , mas não acho que faça o que estou procurando.

Há alguma sugestão sobre como devo abordar esse problema?

Obrigado por emprestar seu tempo e conhecimento.

Chris

    
por Chris Allen Lane 16.11.2011 / 23:15

1 resposta

3

Configurar init = false em lsyncd.lau nos servidores da Web parece funcionar para mim.

Você ainda precisa invocar a sincronização unidirecional do mestre para o servidor da Web recém-iniciado depois disso.

    
por 31.03.2012 / 17:33