Implantando arquivos em vários servidores

11

Temos um repositório central de arquivos em digamos server-1 em /srv/www . Em seguida, temos também o número N de servidores. Queremos que o server-1 possa implementar seus arquivos em /srv/www em todos os servidores, da maneira mais rápida e eficiente possível.

Existe algo como o rsync, mas em vez de especificar um único alvo, especificando um cluster (N servidores) de alvos?

Eu estava pensando git pode funcionar, mas podemos especificar vários controles remotos para empurrar também?

Qual é a melhor solução, supondo que os servidores N possam chegar a centenas?

    
por Justin 11.02.2012 / 03:09

4 respostas

14

Bem, os dois Twitter e Facebook começaram a usar o bittorrent em seus clusters para distribuir novas rotações de código. Fazendo isso, eles podem enviar código para dezenas de milhares de servidores em um período de tempo muito curto, em comparação com os métodos centralizados de implantação da antiga escola.

Parece que você ainda não está nessa escala, mas não há problema em projetar seu sistema de implantação de tal forma que ele não se mostre um gargalo tão cedo.

    
por 11.02.2012 / 03:17
7

Eu não recomendo git para as escalas que você está falando. Pode funcionar, mas eu pessoalmente vejo alguns déficits com o uso desse modelo para buscar.

Existem algumas coisas que determinam a melhor maneira de fazer isso:

  1. Qual o tamanho de um repositório que precisa ser compartilhado.
  2. Quão rápido precisa convergir.

Para uma convergência perfeita e velocidade máxima, você precisará ir com um sistema de arquivos de rede, como o NFSv4. Os sistemas de arquivos em cluster que eu conheço não escalam para 'centenas' de nós, então tem que ser um sistema de arquivos de rede. Isso apresenta seus próprios desafios, mas significa que você alcançará a convergência no momento em que os arquivos forem atualizados no cabeçalho do NFS.

Para convergência rápida, você pode usar alguns truques rsync. Se o daemon rsync acaba sendo limitado pela CPU, você pode certamente colocar um par de três servidores rsync atrás de um loadbalancer como o haproxy. Junte isso a tarefas agendadas para extrair dados (ou algum outro método para acionar atualizações de código) e você poderá atingir a convergência rapidamente.

Para ambos os itens acima, provavelmente será uma boa ideia colocar o repositório central em links de 10 GbE para obter o máximo rendimento.

Uma alternativa é um push-rsync, em que é executado a partir do repositório central para enviar atualizações para seus servidores. Ele não convergirá tão rápido quanto qualquer um dos itens acima, mas será mais amigável para sua largura de banda interna. Use vários hosts enviando para intervalos divididos para melhor velocidade.

    
por 11.02.2012 / 03:36
1

rdist pode funcionar para você.

    
por 16.02.2012 / 19:05
-1

[afiliado] Usando o Kwatee ( link ) você pode implantar em quantos servidores quiser. As implementações são incrementais (somente arquivos modificados são transmitidos) e podem ser paralelizados, portanto é muito rápido. Você também pode configurar o Kwatee para estar ciente do balanceador de carga para que os servidores sejam removidos do LB durante as atualizações e, em seguida, reinseridos. Há uma interface gráfica para configurar os parâmetros de implantação e, em seguida, as implantações podem ser acionadas manualmente via GUI ou automatizadas usando comandos python.

    
por 12.02.2012 / 14:48