Bereitstellen von Dateien auf mehreren Servern


11

Wir haben ein zentrales Repository von Dateien in beispielsweise Server-1 unter /srv/www. Dann haben wir auch N Server. Wir möchten, dass Server-1 seine Dateien /srv/wwwso schnell und effizient wie möglich auf allen Servern bereitstellen kann.

Gibt es so etwas wie rsync, aber anstatt ein einzelnes Ziel anzugeben, geben Sie einen Cluster (N Server) von Zielen an?

Ich dachte, es gitkönnte funktionieren, aber können wir auch mehrere Fernbedienungen angeben, die gepusht werden sollen?

Was ist die beste Lösung, vorausgesetzt, N Server erreichen möglicherweise Hunderte.


2
Ich gehe davon aus, dass ein Netzwerk-Dateisystem nicht möglich ist.
cjc

stackoverflow.com/questions/849308/… für einen Git-Trick zum Drücken auf mehrere Fernbedienungen. Ich bin mir jedoch nicht sicher über Hunderte.
cjc

Antworten:


14

Nun, sowohl Twitter als auch Facebook haben begonnen, Bittorrent in ihren Clustern zu verwenden, um neue Code-Revisionen zu verbreiten. Auf diese Weise können sie Code in sehr kurzer Zeit auf Zehntausende von Servern übertragen, verglichen mit zentralisierten Bereitstellungsmethoden der alten Schule.

Es hört sich noch nicht so an, als wären Sie in dieser Größenordnung, aber es schadet nicht, Ihr Bereitstellungssystem so zu gestalten, dass es sich in naher Zukunft nicht als Engpass herausstellt.


1
Wie verwenden sie Bittorrent?
Dragos

3
Siehe die Artikel, auf die ich verlinkt habe.
EEAA

@EEAA Twitter-Link ist defekt
gprasant

@gprasant behoben.
EEAA

7

Ich empfehle Git nicht für die Waage, mit der Sie sprechen. Es kann funktionieren, aber ich persönlich sehe einige Defizite bei der Verwendung dieses Modells zum Abrufen.

Es gibt einige Dinge, die bestimmen, wie dies am besten funktioniert:

  1. Wie groß ein Repo sein muss, muss geteilt werden.
  2. Wie schnell es konvergieren muss.

Für eine perfekte Konvergenz und maximale Geschwindigkeit müssen Sie ein Netzwerkdateisystem wie NFSv4 verwenden. Die mir bekannten Cluster-Dateisysteme lassen sich nicht auf mehrere Hundert Knoten skalieren, daher muss es sich um ein Netzwerk-Dateisystem handeln. Dies stellt seine eigenen Herausforderungen dar, bedeutet jedoch, dass Sie die Konvergenz erreichen, sobald die Dateien auf dem NFS-Kopf aktualisiert werden.

Für eine schnelle Konvergenz können Sie einige rsync-Tricks verwenden. Wenn der rsync-Daemon CPU-gebunden ist, können Sie sicher ein paar drei rsync-Server hinter einen Loadbalancer wie haproxy stellen. Wenn Sie dies mit Cron-Jobs kombinieren, um Daten abzurufen (oder eine andere Methode zum Auslösen von Code-Updates), können Sie die Konvergenz ziemlich schnell erreichen.

In beiden Fällen ist es wahrscheinlich eine gute Idee, das zentrale Repository für einen maximalen Durchsatz auf 10-GbE-Links zu setzen.

Eine Alternative ist ein Push-Rsync, bei dem er vom zentralen Repo ausgeführt wird, um Updates auf Ihre Server zu übertragen. Es konvergiert nicht so schnell wie die oben genannten, ist jedoch für Ihre interne Bandbreite freundlicher. Verwenden Sie mehrere Hosts, die für eine bessere Geschwindigkeit in geteilte Bereiche drücken.



-1

[verbunden] Mit Kwatee ( http://www.kwatee.net ) können Sie auf so vielen Servern bereitstellen, wie Sie möchten. Bereitstellungen sind inkrementell (nur geänderte Dateien werden übertragen) und können so sehr parallelisiert werden. Sie können Kwatee auch so konfigurieren, dass Load-Balancer-fähig sind, sodass Server während der Aktualisierung aus der LB entfernt und dann erneut eingefügt werden. Es gibt eine grafische Oberfläche zum Konfigurieren der Bereitstellungsparameter. Anschließend können Bereitstellungen entweder manuell über die GUI ausgelöst oder mithilfe von Python-Befehlen automatisiert werden.


Möchtest du die Abwahl erklären?
Mac

1
Wenn Sie sich der Website anschließen, um Ihr eigenes Produkt zu pimpen, werden Sie hier häufig abgelehnt.
Ceejayoz

Unabhängig davon, so viel zu ehrlichen und transparenten Antworten
Mac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.