Distribuzione di file su più server


11

Abbiamo un repository centrale di file in dire server-1 su /srv/www. Quindi abbiamo anche un numero N di server. Vogliamo che il server 1 sia in grado di distribuire i suoi file /srv/wwwsu tutti i server nel modo più rapido ed efficiente possibile.

Esiste qualcosa come rsync, ma invece di specificare un singolo target, specificare un cluster (N server) di target?

Pensavo gitpotesse funzionare, ma possiamo specificare anche più telecomandi da spingere?

Qual è la soluzione migliore, supponendo che N server alla fine possa arrivare a centinaia.


2
Presumo che un filesystem di rete non sia possibile?
cjc,

stackoverflow.com/questions/849308/… per un trucco per passare a più telecomandi. Non sono sicuro di centinaia, però.
cjc,

Risposte:


14

Bene, sia Twitter che Facebook hanno iniziato a usare bittorrent nei loro cluster per distribuire nuovi giri di codice. In questo modo, sono in grado di inviare il codice a decine di migliaia di server in pochissimo tempo rispetto ai metodi di distribuzione centralizzati della vecchia scuola.

Non sembra che tu sia ancora su quella scala, ma non c'è nulla di male nel progettare il tuo sistema di distribuzione in modo tale che non si rivelerà un collo di bottiglia in qualunque momento presto.


1
Come usano bittorrent?
Dragos,

3
Vedi gli articoli a cui ho collegato.
SEE

@EEAA il link Twitter è interrotto
gprasant

@gprasant fixed.
EEAA

7

Non consiglio git per le scale con cui stai parlando. Può funzionare, ma vedo personalmente alcuni deficit con l'utilizzo di quel modello per il recupero.

Ci sono un paio di cose che determinano il modo migliore per farlo:

  1. Quanto grande di un repository deve essere condiviso.
  2. Quanto velocemente deve convergere.

Per una perfetta convergenza e la massima velocità dovrai utilizzare un file system di rete, come NFSv4. I filesystem in cluster che conosco non si adattano a "più centinaia" di nodi, quindi deve essere un filesystem di rete. Questo presenta le sue sfide, ma significa che raggiungerai la convergenza nel momento in cui i file vengono aggiornati sull'head NFS.

Per una rapida convergenza, puoi usare alcuni trucchi rsync. Se il demone rsync finisce per essere associato alla CPU, puoi sicuramente mettere un paio di server rsync su un loadbalancer come haproxy. Abbinalo ai processi cron per estrarre i dati (o qualche altro metodo per attivare gli aggiornamenti del codice) e puoi raggiungere la convergenza abbastanza rapidamente.

Per entrambi i precedenti, sarà probabilmente una buona idea mettere il repository centrale su collegamenti 10GbE per il massimo throughput.

Un alternativo è un push-rsync, dove viene eseguito dal repository centrale per inviare aggiornamenti ai server. Non converrà velocemente come uno dei precedenti, ma sarà più amichevole con la larghezza di banda interna. Utilizzare più host spingendo a intervalli divisi per una migliore velocità.



-1

[affiliato] Usando Kwatee ( http://www.kwatee.net ) puoi distribuire su tutti i server che vuoi. Le distribuzioni sono incrementali (vengono trasmessi solo i file modificati) e possono essere parallelizzate in modo molto rapido. Puoi anche configurare Kwatee in modo che sia consapevole del bilanciamento del carico in modo che i server vengano rimossi dall'LB durante gli aggiornamenti e quindi reinseriti. C'è un'interfaccia grafica per configurare i parametri di distribuzione e quindi le distribuzioni possono essere attivate manualmente tramite GUI o automatizzate utilizzando i comandi python.


vuoi spiegare il voto negativo?
mac,

1
Unirsi al sito solo per magnacciare il proprio prodotto spesso genera downvotes da queste parti.
Ceejayoz,

Indipendentemente da ciò, tanto per risposte oneste e trasparenti
mac,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.