Mit der PDSh arbeiten
Zur Navigation springen
Zur Suche springen
Allgemeines
PDSh = Parallel Distributed Shell
"Pdsh ist ein effizienter, Multithreaded Remote-Shell-Client, der Befehle auf mehreren entfernten Hosts parallel ausführt."
einige sinnvolle PDSH-Befehle
- 1. Speicherplatz aller www´s auslesen
pdsh -w www[1-97].estugo.de "df -h | grep ploop"- 2. Speicherplatz aller www´s + Mädchenserver auslesen.
pdsh -w www[1-97].estugo.de "df -h | grep ploop" && pdsh -w 37.218.252.[113,114,160,199,207,208,209] "df -h | grep ploop"- 2.1 Besser und neuer - Speicherplatz aller Shared Host´s auslesen
pdsh -w ^/root/PDSH/hosts "df -h | grep ploop"
- 3. Manchmal ist auf Servern z.B. ein Dienst oder ein Script nicht so eingerichtet, dass es bei einem Reboot automatisch geladen wird. Das kann man nachholen.
- 3.A. Auf einem CentOS6 Server würde man zum Beispiel den DrWeb Dienst mit folgenden zwei Befehlen zum "Autostart" hinzufügen.
pdsh -w www[1-69].estugo.de "chkconfig --add drwebd"- und darauf folgend
pdsh -w www[1-69].estugo.de "chkconfig drwebd on"
- 3.B. Auf einem CentOS7 Server sähe das ganze etwas anders aus:
pdsh -w www[70-97].estugo.de "systemctl enable drwebd"
- 4. Auslesen der Product Version und Maskieren von Sonderzeichen
-
pdsh -w ^/root/PDSH/madel "plesk version | grep \"Product version"\"
- Maskieren von zB Sonderzeichen wird unmittelbar vor und nach dem Sonderzeichen über ein " \ " realisiert, siehe Befehl oben.
- 5 Korrektur eines z.B. angepassten Scriptes via umbenennen und neu hinzufügen
-
pdsh -w ^/root/PDSH/madel "mv /usr/local/sbin/monitor_mailqueue_plesk.sh /usr/local/sbin/monitor_mailqueue_plesk.org"pdsh -w ^/root/PDSH/madel "wget --user=Shopbenutzer12 --password='9k2aS2s' -P /usr/local/sbin/ https://www.estugo.de/files/scripts/monitor_mailqueue_plesk.sh"
- 6 Manuelles Update von DrWeb auf allen Servern ausführen
- auf Shared Maschinen
pdsh -w ^/root/PDSH/hosts "/opt/drweb/update.pl"
- auf Managed Maschinen
pdsh -w ^/etc/pdsh/hosts "/opt/drweb/update.pl"
Verwendung von Host-Listen um die PDSH-Befehle zu vereinfachen
- Gerade bei verschiedenen, nicht numerischen, Hostnamen oder verschiedenen IP-Ranges, kann der PDSH-Befehl sehr lang und unübersichtlich werden.
- Die PDSH kann daher auch so angepasst werden, dass man Host-Listen verwendet.
- Durch ein Zirkumflex (^), gefolgt vom absoluten Pfad der Host-Liste (z.B. ^/root/PDSH/hosts) wird nun jeder Server aus dieser einfachen Liste angesteuert.
- Die Liste wird wie folgt angelegt:
- www1.estugo.de
- www2.estugo.de
- www3.estugo.de
- www4.estugo.de
- ...
- ...
- ...
- Gerade bei verschiedenen, nicht numerischen, Hostnamen oder verschiedenen IP-Ranges, kann der PDSH-Befehl sehr lang und unübersichtlich werden.
- Der Befehl zum Auslesen der Speicherbelegung aller Shared Server (www UND Mädchenserver aus Punkt 2.) ist dann wesentlich überschaubarer wie folgt
pdsh -w ^/root/PDSH/hosts "df -h | grep ploop"
Möglichkeit eigener Listen für z.B. ausschließlich CentOS6 Server
- Möchte ich beispielsweise nur CentOS6 Server bearbeiten, so kann ich für diese Server eine eigene Liste anfertigen und diese im Befehl verwenden
- Hierzu wird im Ordner, auf den für den Befehl zugegriffen wird, einfach eine entsprechende Liste angelegt (z.B. centos6) und diese dann im Pfad angegeben.
pdsh -w ^/root/PDSH/centos6 "df -h | grep ploop"
Einsatz der Host-Listen: Auf der PDSH für unsere Managed Server
- Der PDSH-Befehl für die Managed schaut derzeit so aus
pdsh -w 128.127.67.[13,37,44,46-50,52,54,55,59-63,65,67-69,83,110-114,116-122,124,126,149,160,188],93.90.188.[15,16,27,29],195.110.43.[16,18-20,46,49,81,89,122,204,240],192.162.85.[97,146,204],192.162.84.[5,6,23,38,114,172],195.34.83.[120,123,160,216,218,223],89.22.104.[106,108,149,153,243,198],89.22.105.[61,149,129],89.22.106.8,89.22.107.[91,144,168,177,218,224,251],89.22.120.[128,138],89.22.121.[43,87] "date"- SCHLIMM!
- Der gleiche Befehl bei Verwendung der Host-Liste sieht wie folgt aus
pdsh -w ^/etc/pdsh/hosts "date"
Pflege der Host-Listen
Damit nicht versehentlich in der falschen Liste gearbeitet wird, habe ich die Host-Listen auf der Shared PDSh, sowie auf der Managed PDSh in verschiedenen Verzeichnissen angelegt.
Innerhalb dieser Verzeichnisse können weitere individuelle Listen erstellt werden, welche dann im entsprechenden Befehl verwendet werden können.
Host-Liste für die Managed PDSh
mcedit /etc/pdsh/hosts- Bitte achtet darauf, dass Ihr keine Leerzeile nach der letzten Zeile einbaut. Die PDSh würde versuchen diese zu lesen und dann einen Fehler verursachen.
- Bei Löschungen von Managed Servern, diesen auch aus der Host-Liste löschen!
- alle shared Maschinen
mcedit /root/PDSH/hosts - nur CentOS6 Maschinen
mcedit /root/PDSH/centos6- beispielsweise bei cURL Updates
via PDSh eine IP-Tables Regel auf allen Servern in die IP-Tables hinzufügen
- Hier am Beispiel der IP Range 37.218.252.0/24 . Diese füge ich wie folgt als als erlaubt (ACCEPT) für den Zugriff auf Port 22 (SSH) auf allen Managed vServern hinzu.
pdsh -w ^/etc/pdsh/hosts "service fail2ban stop >/dev/null 2>&1 && iptables -I INPUT -s 37.218.252.0/24 -p tcp --dport 22 -j ACCEPT >/dev/null && service iptables save >/dev/null 2>&1 && service fail2ban start >/dev/null 2>&1"
- Durch das Stoppen und Starten des fail2ban zieht sich dieser Vorgang ziemlich. Die "hosts" habe ich daher auf drei Dateien aufgeteilt.
- Somit kann der obere Befehl nun aufgeteilt werden in "pdsh -w ^/etc/pdsh/hosts1 ..."; "pdsh -w ^/etc/pdsh/hosts2 ..."; "pdsh -w ^/etc/pdsh/hosts3 ..."
- Durch das Stoppen und Starten des fail2ban zieht sich dieser Vorgang ziemlich. Die "hosts" habe ich daher auf drei Dateien aufgeteilt.
- Was bedeutet in diesem Kontext ">/dev/null 2>&1"?
- >/dev/null leitet die Standardausgabe (stdout) nach /dev/null um, wodurch sie verworfen wird.
- 2>&1 leitet den Standardfehler (2) zur Standardausgabe (1) um, die ihn dann ebenfalls verwirft, da die Standardausgabe bereits umgeleitet wurde.
- Get auch etwas exotischer mit der IP für den Zabbix-Server. Diese füge ich wie folgt als als erlaubt (ACCEPT) für den Zugriff auf Port 10050 auf allen Shared hinzu.
pdsh -w ^/root/PDSH/hosts "service fail2ban stop >/dev/null 2>&1 && iptables -A INPUT -s 89.22.107.170/32 -p tcp -m tcp --dport 10050 -j ACCEPT >/dev/null && service iptables save >/dev/null 2>&1 && service fail2ban start >/dev/null 2>&1"
Änderungen der php.ini auf allen Servern erledigen.
- 1. Zunächst die gewünschten Änderungen der php.ini im Plesk eines Servers vornehmen (an alle PHP-Versionen denken!)
- 2. Erstelle nun einen Ordner z.B. php_ini auf dem lokalen Rechner
- 3. via WinSCP Verbindung mit diesem Server herstellen (Anmeldung als root)
- 4. Wechsele in das Vzeichnis /opt/plesk/php/7.x/etc/
- Das "x" steht für die entsprechende PHP-Version - jede Version hat einen eigenen Ordner
- 5. kopiere die Datei php.ini in Deinen lokalen Ordner
- 6. Benenne die Datei um in z.b. php70.ini für die php.ini aus dem Ordner 7.0
- 7. Führe diesen Schritt für alle .php.ini Dateien in den verschiedenen Ordnern für die PHP-Versionen durch
- 8. Verbinde Dich nun mit dem Server hosting.estugo.de und kopiere Dein lokales Verzeichnis php_ini in das Verzeichnis /var/www/vhosts/web2.hosting.hostkraft.de/html/estugo/files/scripts/
- 9. Mache aus dem soeben hinzugefügten Ordner ein .zip File
- 10. Logge Dich nun auf der PDSH ein und kopiere die .zip-File auf alle Server mit dem folgenden Befehl
pdsh -w ^/root/PDSH/hosts "wget --user=Shopbenutzer12 --password='9k2aS2s' -P /root/ https://www.estugo.de/files/scripts/php_ini.zip"
- 11. Entpacke die .zip-File auf allen Servern mit dem folgenden Befehl
pdsh -w ^/root/PDSH/hosts "unzip /root/php_ini.zip"
- 12. Ersetze nun die php.ini durch die geänderte Version mit dem folgenden Befehl
pdsh -w ^/root/PDSH/centos7 "cp /root/php_ini/php71.ini /opt/plesk/php/7.1/etc/php.ini"
- 13. Mache dies für alle PHP-Versionen entsprechend