Puppet Dateiübertragung langsam


7

Ich habe einen Puppenmeister und Sklaven in verschiedenen Rechenzentren. Die Latenz zwischen ihnen beträgt ~ 40ms. Wenn ich "Puppet Agent - Test" auf einem Slave ausführe, um das neueste Manifest anzuwenden, dauert es ~ 360 Sekunden, bis es fertig ist.

Nach einigem Graben kann ich sehen, dass die Hauptursache für die Verlangsamung die Dateiübertragung ist. Es scheint, dass es ~ 10 Sekunden dauert, um jede Datei zu übertragen. Die Dateien sind nur klein (Konfigurationsdateien), daher kann ich nicht verstehen, warum sie so lange dauern würden.

Dies ist ein Beispiel für eine Datei in meinem Manifest:

file { "/etc/rsyncd.conf" :
    owner       => "root",
    group       => "root",
    mode        => 644,
    source  => "puppet:///files/rsyncd/rsyncd.conf"
}

Puppet-Profiler laufen Ich sehe das:

10.21s - File[/etc/rsyncd.conf]

Es scheint auch, dass ich nicht mehr als einen Server gleichzeitig mit Puppet aktualisieren kann. Wenn ich zwei Server gleichzeitig betreibe, dauert die Puppe doppelt so lange.

Ich habe den Puppenmeister von Webrick auf Mischling umgestellt, aber das scheint nicht zu helfen. Dies macht das Bereitstellen von Änderungen schmerzhaft. Eine einfache Konfigurationsänderung kann eine Stunde dauern, bis sie auf allen Servern verfügbar ist.

Antworten:


8

Haftungsausschluss: Ich bin einer der Puppet-Entwickler.

Wenn Sie Dateien mit puppet://URLs als Quelle verwenden , stellt Puppet zwei SSL-Verbindungen zum Dateiserver her - eine für die Metadaten einschließlich der Prüfsumme und eine für den Inhalt. Die zweite wird hoffentlich wie erwartet nur erstellt, wenn der Inhalt auf der Festplatte veraltet ist.

Die Übertragung selbst ist Standard-HTTPS, und es gibt nichts Besonderes. Abgesehen vom SSL-Overhead und den Latenzkosten für zwei Verbindungen gibt es keinen Grund, warum Puppet so langsam sein sollte.

Puppet prüft auch die Datei auf beiden Seiten, dem Client und dem Server, wenn überprüft wird, ob sie aktuell ist. Das kann langsam sein, wenn Ihr Backing Store auch langsam ist.

Schließlich sollten Sie überprüfen, ob Ihre Netzwerkverbindung langsam ist, weil sie gesättigt ist, oder so ähnlich. Es wäre nicht das erste Mal, dass große Puffer zu einer schrecklichen Netzwerkleistung führen würden - und jemand hat einen Traffic Shaper in die Mitte gestellt, der Pings superschnell macht. ;)

Darüber hinaus schlage ich vor, dass Sie einen Fehlerbericht einreichen . Das Einbeziehen der Details und Netzwerkspuren wäre eine große Hilfe, um dieses Problem lösen zu können.

Was Sie beschreiben, ist sicherlich nicht normal, und es ist nicht das, was wir von kleinen Konfigurationsdateien in einem relativ schnellen Netzwerk erwarten würden, wie Sie es beschreiben. (Es ist auch nicht das, was andere sehen, so dass in Ihrem Setup eindeutig etwas Ungewöhnliches passiert.)


Vielen Dank für Ihre Antwort, ich werde einen Fehlerbericht ausfüllen. Nur als Referenz: Ein Server verfügt über GigE und der Puppet Master ist mit 100 MBit verbunden. Ich glaube also nicht, dass wir die Verbindung annähernd sättigen können.
Nudeln

@Noodles Wie wäre es mit den Antwortzeiten des Puppenmeisters auf die HTTPS-Anfragen? Überprüfen Sie die Systemlast? Vielleicht ist seine Lagerung langsam?
Shane Madden

3

Nach meiner Erfahrung würden ältere Versionen von Puppet alle DATEI-Daten serialisieren und DE-serialisieren, während sie sie hin und her übertragen. Und es war besonders schlimm und übertrug große (viele Megabyte) Binärdateien.

Herr Pittman schlägt oben vor, dass dies möglicherweise nicht mehr der Fall ist, aber Sie möchten vielleicht tiefer graben und sehen, ob die Version der Puppe, die Sie ausführen, diese Optimierung aufweist.

Es sieht so aus, als ob die Änderung in Puppet 0.25 eingegangen ist - siehe Fehler 583 ( http://projects.puppetlabs.com/issues/583 ), als sie von xlrpc in Rest konvertiert wurden.

Meine damalige Lösung bestand darin, Puppet zu verwenden, um vorinstallierte rsync-Schlüssel zu drücken, und einen rsync-Daemon zu verwenden, um Dateien (schreibgeschützt) für Endclients bereitzustellen. Rsync kann sehr effizient sein und viele Binärdaten übertragen und aktualisieren.

Überprüfen Sie also Ihre Puppenversionen, aber prüfen Sie auch, ob rsync als Leistungsvergleich für Sie geeignet ist.


0

Ich habe das Problem gefunden. Es scheint, dass, obwohl ich meinen Apache so eingerichtet habe, dass Puppetmaster über Passagier ausgeführt wird, die Konfigurationsdatei nie in meine httpd.conf aufgenommen wurde. Mein Puppenspieler führte immer noch die Standardeinstellungen aus. (netstat -anp | grep 8140 zeigte, dass Apache diesen Port nicht verwendete).

Nachdem ich diese Probleme behoben und sichergestellt habe, dass Apache 8140 abhört, dauert es 8 Sekunden, bis meine Puppet-Clients ausgeführt werden (von 380 Sekunden).


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.