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/www
so 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 git
kö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.
rsync
deployment
git
Justin
quelle
quelle
Antworten:
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.
quelle
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:
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.
quelle
rdist kann für Sie arbeiten.
quelle
[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.
quelle