Wir haben viele Server und möchten sie trotzdem alle aktualisieren. Der eigentliche Weg ist, dass alle Sysadmins von Server zu Server gehen und ein machen aptitude update && aptitude upgrade
- es ist immer noch nicht cool.
Ich suche jetzt nach einer Lösung, die noch besser und sehr klug ist. Kann Puppe diesen Job machen? Wie machst du das?
debian
puppet
update
remote-access
Dennis Wisnia
quelle
quelle
Antworten:
Sie können den folgenden
exec
Typ verwenden:Um ehrlich zu sein, habe ich es nicht selbst versucht, aber ich denke, Sie müssen nur ein neues Modul erstellen, das eine solche Exec-Definition enthält.
Der
apt-get upgrade
Befehl ist interaktiv. Damit es leise läuft, können Sie die-q=2
oben gezeigte Option hinzufügen .quelle
touch
diese Datei auf dem Puppenmeister.Wenn alle Ihre Hosts Debian sind, können Sie das Paket für unbeaufsichtigte Upgrades ausprobieren.
http://packages.debian.org/sid/unattended-upgrades
Hier haben wir Puppet verwendet, um unsere virtuellen Debian-Maschinen zu verwalten. Mit Puppet können wir Konfigurationen für unbeaufsichtigte Upgrades auf allen Servern aktivieren und verwalten.
Kürzlich hat unser Team das mcollective-Tool getestet, um Befehle auf allen Servern auszuführen. Um jedoch mcollective Ruby-Kenntnisse zu nutzen, sind diese erforderlich.
[s] Guto
quelle
Ich würde Puppet, Facter und mCollective empfehlen.
mCollective ist ein sehr schönes Framework, in dem Sie Befehle über eine Reihe von Hosts (in Parallelen) ausführen können, wobei Facter als Filter verwendet wird.
Fügen Sie dazu einen lokalen Proxy / Cache hinzu, und Sie sind für die Serververwaltung gut gerüstet.
quelle
Verwenden Sie ein Tool, mit dem ein einzelner Befehl auf mehreren Servern ausgeführt werden kann. Und damit meine ich nicht, dass mit Terminator oder ClusterSSH eine Unmenge von Terminals geöffnet ist, sondern ein einziges Terminal für einen Verwaltungsserver, auf dem ein für den Job geeignetes Tool ausgeführt wird.
Ich würde in diesem Zusammenhang func, Salt oder mCollective empfehlen. Wenn Sie Puppet bereits haben, entscheiden Sie sich für mCollective (es lässt sich gut in Puppet integrieren). Wenn Sie dies nicht tun und einen alten Python auf Ihren Computern haben, wird Ihnen möglicherweise die Funktion gefallen. Wenn Sie Python neu haben, versuchen Sie es mit Salt. Alle diese Tools führen den in der Befehlszeile angegebenen Befehl asynchron aus, was viel mehr Spaß macht als eine sequentielle ssh-Schleife oder sogar die gleichen Eignungsbefehle in unzähligen Terminator-Fenstern für unzählige Server auszuführen.
Sie werden Salt auf jeden Fall lieben .
quelle
Ich denke, es gibt viele Dinge, die zu einer guten Lösung beitragen:
Bandbreite : Grundsätzlich fallen mir zwei Alternativen ein, um Bandbreite zu sparen:
Administration : Ich würde eine parallele Shell wie PDSH , PSSH , GNU Parallel konfigurieren und den Befehl auf allen Clients ausgeben, wenn ich den Befehl zuvor auf einem Beispielcomputer getestet hätte. Dann ist es nicht sehr wahrscheinlich, dass es bei allen anderen fehlschlägt. Alternativ können Sie einen Cron-Job auf allen Clients in Betracht ziehen, der dann jedoch automatisch fehlschlägt. Daher würde ich die erste Lösung vorziehen.
Wenn Sie Bedenken hinsichtlich der Gleichzeitigkeit von Upgrades haben, können Sie Ihre Befehle mit planen
at
Protokollierung : Wie bei parallelen Shells haben Sie die Möglichkeit, die Ausgabe umzuleiten. Ich würde stderr und stdout kombinieren und in eine Protokolldatei schreiben.
quelle
Mein eigener paralleler SSH- Wrapper: classh ist eine Alternative zu den verschiedenen parallelen und Cluster-SSH-Tools.
Vielleicht gefällt es dir besser oder du hasst es. Es gibt nur drei Gründe, warum ich es hier erwähne:
subprocess.communicate()
Methode: Sie können also nur etwa 64 KB stdout und separat bis zu 64 KB stderr erfassen. Außerdem wird jeder Remote-Prozess, der versucht, aus seinem stdin zu lesen, einfach zum Stillstand gebracht bis der lokale ssh-Unterprozess automatisch durch die Timeout-Behandlung von classh beendet wird )Es ist extrem einfach, ein benutzerdefiniertes Skript in Python zu schreiben, um classh.py als Modul zu verwenden. Es ist also sehr einfach, etwas zu schreiben wie:
Das ist alles dazu. In der verschachtelten abgeschlossenen Schleife können Sie beispielsweise eine Liste aller Personen erstellen, die einen bestimmten Beendigungsstatus zurückgegeben haben, oder nach bestimmten Fehlermeldungen suchen und Folgeaufträge einrichten, um diese zu verarbeiten. (Die Jobs werden gleichzeitig ausgeführt, standardmäßig 100 Jobs zu jedem Zeitpunkt, bis jeder abgeschlossen ist. Daher wird ein einfacher Befehl auf einigen hundert Hosts normalerweise in wenigen Sekunden ausgeführt und ein sehr komplexes Shell-Skript in einer einzigen langen Befehlszeichenfolge. Sagen wir, fünfzig Zeilen oder so ... können in meiner Umgebung über ein paar tausend Hosts in ungefähr 10 Minuten fertigstellen ... ungefähr 10.000 Hosts pro Stunde in meiner Umgebung, wobei sich viele davon interkontinent befinden).
Dies kann also als Ad-hoc-Maßnahme verwendet werden, bis Sie Ihre Puppenkonfiguration implementiert und gut getestet haben. Außerdem ist es sehr hilfreich, kleine Ad-hoc-Umfragen bei Ihren Hosts durchzuführen, um festzustellen, in welchen von Ihren Standards abweichen verschiedene kleine Wege.
quelle
Die Antwort mit exec ist ziemlich hilfreich.
Laut dem apt-get-Handbuch ist es jedoch keine gute Idee, -q = 2 auf diese Weise zu verwenden (obwohl ich es jahrelang ohne Probleme verwendet habe).
Ich habe selbst jahrelang ein Skript verwendet und apt-get folgendermaßen ausgeführt:
Dinge wie Marionetten und andere Werkzeuge, von denen die Leute sagten, dass sie funktionieren könnten, aber es scheint übertrieben zu sein, wenn man im Grunde nur ein paar Befehle nachahmt, die von einem Menschen eingegeben wurden. Ich glaube daran, das einfachste Tool für einen bestimmten Job zu verwenden. In diesem Fall ist ein Bash-Skript so einfach wie es nur geht, ohne die Funktionalität zu verlieren.
quelle
Seit Jahren aktualisiere und installiere ich gerne Pakete mit apt-dater . Es ist ein leichtes und effektives Tool für die Remote-Paketverwaltung. Es verwendet
screen
,sudo
undssh
.Für die Paketverwaltung ist apt-dater möglicherweise eine einfachere Lösung als Konfigurationsverwaltungstools.
apt-dater ist praktisch für die zentralisierte Paketverwaltung auf verschiedenen GNU / Linux -Varianten wie Debian und CentOS.
quelle
Sie können Stoff verwenden . Fabric ist eine Python-Bibliothek (2.5-2.7) und ein Befehlszeilentool zur Optimierung der Verwendung von SSH für die Anwendungsbereitstellung oder Systemverwaltungsaufgaben.
quelle
Verwenden Sie webmin ,,, und verwenden Sie die Webmin-Cluster-Funktion, mit der Sie alle Systeme zu einer Webmin-Konsole hinzufügen und ihnen einen Befehl erteilen oder alle von einem Ort aus steuern können.
Oder
Verwenden Sie Cluster ssh
Oder
PSSH
quelle
Eine andere Lösung, wenn auf allen Hosts Debian (oder Derivate) ausgeführt wird, ist die Verwendung des Cron-Apt-Pakets . Wie in der Dokumentation vorgeschlagen, muss jedoch ein wenig Vorsicht walten lassen.
Ich verwende derzeit cron-apt auf einem Dutzend Servern, um alle Sicherheitsupdates automatisch und unbeaufsichtigt durchzuführen. Um unerwünschte Upgrades zu vermeiden, verwende ich cron-apt nur auf Servern, auf denen die stabile Debian-Distribution ausgeführt wird, und ich stelle sicher, dass meine apt-Quellen so konfiguriert sind, dass der Distributionsname wheezy und nicht der Alias (stabil) verwendet wird.
Die von mir verwendete spezifische Cron-Apt-Konfiguration ist in einer Aktionsdatei zusammengefasst:
/etc/cron-apt/action.d/5-install
Jedes andere Upgrade wird manuell über den Bildschirm oder was auch immer am besten geeignet ist durchgeführt, da möglicherweise manuelle Eingriffe während des Upgrades erforderlich sind.
quelle