Implantando arquivos em vários servidores


11

Temos um repositório central de arquivos, digamos server-1 em /srv/www. Então temos também N número de servidores. Queremos que o servidor 1 seja capaz de implantar seus arquivos em /srv/wwwtodos os servidores da maneira mais rápida e eficiente possível.

Existe algo como rsync, mas em vez de especificar um único destino, especificar um cluster (N servidores) de destinos?

Eu estava pensando que gitpode funcionar, mas podemos especificar vários controles remotos para enviar também?

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


2
Presumo que um sistema de arquivos de rede não seja possível?
CJC

stackoverflow.com/questions/849308/… para um truque do git para enviar para vários controles remotos. Não tenho certeza sobre centenas, no entanto.
CJC

Respostas:


14

Bem, o Twitter e o Facebook começaram a usar o bittorrent em seus clusters para distribuir novas rotações de código. Com isso, eles podem enviar códigos para dezenas de milhares de servidores em um período muito curto, comparado aos métodos de implantação centralizados da velha escola.

Ainda não parece que você está nessa escala, mas não há mal algum em projetar seu sistema de implantação de forma que ele não se torne um gargalo tão cedo.


1
Como eles estão usando o bittorrent?
Dragos

3
Veja os artigos aos quais vinculei.
EEAA

@EEAA twitter link is broken
gprasant

@gprasant fixed.
EEAA 14/01

7

Eu não recomendo o git para as escalas com as quais você está falando. Pode funcionar, mas, pessoalmente, vejo alguns déficits ao usar esse modelo para buscar.

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

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

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

Para uma convergência rápida, você pode usar alguns truques do rsync. Se o daemon rsync acabar vinculado à CPU, você certamente poderá colocar alguns servidores rsync atrás de um balanceador de carga como o haproxy. Junte isso às tarefas cron para extrair dados (ou algum outro método de acionar atualizações de código) e você poderá atingir a convergência rapidamente.

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

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



-1

[afiliado] Usando o Kwatee ( http://www.kwatee.net ), você pode implantar em quantos servidores quiser. As implantações são incrementais (somente arquivos modificados são transmitidos) e podem ser paralelizados, tornando-os muito rápidos. Você também pode configurar o Kwatee para reconhecer o balanceador de carga, para que os servidores sejam removidos do LB durante as atualizações e depois 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.


gostaria de explicar o voto negativo?
mac

1
A adesão ao site apenas para oferecer um produto próprio muitas vezes gera votos negativos por aqui.
ceejayoz

Independentemente disso, tanto por respostas honestas e transparentes
mac
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.