PDSH Souběžné provádění příkazů na více serverech Linux

V tomto článku vám řeknu, jak spravovat velkou flotilu serverů Linux z konzole jednoho serveru, vzdáleně spouštět příkazy na jiných serverech a získávat jejich výsledky, kontrolovat stav serverů a provádět obdobnou práci paralelně pomocí obslužného programu pdsh. Budeme rozumět tomu, jak jej nainstalovat, nakonfigurovat a spustit příkazy na několika serverech paralelně.

PDSH (paralelní distribuovaný shell) - vysoce výkonný nástroj pro paralelní běh příkazů na velkém počtu serverů Linuxu pomocí ssh. Ve výchozím nastavení pdsh umožňuje podporovat 32 souběžných připojení ke spravovaným serverům. Existuje několik užitečných rozšiřujících modulů pro pdsh, které se také budeme zabývat v tomto článku..

S pdsh můžete:

  • Aktualizace softwaru na serverech;
  • Nainstalujte potřebné moduly nebo nástroje;
  • Spusťte nějaký bash skript;
  • Zkontrolujte aktualizace a další.

Obsah:

  • Nainstalujte PDSH a přídavné moduly
  • Konfigurace serveru pro správu pdsh a spravovaných serverů Linux.
  • Příklady použití pdsh ke spuštění příkazů na více serverech

Nainstalujte PDSH a přídavné moduly

Nejprve musíte nainstalovat obslužný program pdsh a potřebné moduly. V CentOS se instalace provádí prostřednictvím správce balíků yum:

yum install epel-release -y - připojte úložiště Epel

yum nainstalovat pdsh pdsh-mod-genders -y - Nainstalujte pro ni pdsh a modul pohlaví.

Obecně není pro konfiguraci pdsh potřeba nic jiného. Nainstalovali jsme samotný pdsh a také nainstalovali další modul pdsh-mod-gender, o čem budu mluvit později, až přejdeme ke spouštěním příkazů na vzdálených serverech.

Konfigurace serveru pro správu pdsh a spravovaných serverů Linux.

Aby nebylo možné zadat hesla pro připojení ke vzdáleným serverům pokaždé, vygenerujeme ssh klíč na serveru pro správu s nainstalovaným pdsh a přidáme jej na spravované servery.

ssh-keygen -q

Zadejte soubor, do kterého chcete klíč uložit (/root/.ssh/id_rsa): Zadejte přístupové heslo (prázdné bez přístupového hesla): Zadejte stejné přístupové heslo znovu: 

Spuštění příkazu ssh-keygen -q pro všechny otázky stačí stisknout Enter. Klíč je připraven, nyní jej zbývá zkopírovat na spravované servery Linux. Jako příklad jsem vzal 2 servery s Linux CentOS.

Na spravovaných serverech vytvořte adresář pro klíč ssh (pokud neexistuje):

mkdir /root/.ssh/

Zkopírujte klíč do tohoto adresáře, dělám to prostřednictvím echo:

echo -e "klíč ze souboru /root/.ssh/id_rsa.pub" >> /root/.ssh/author_keys

Klíč byl přidán, musíte zkontrolovat, zda připojení ze serveru pdsh prochází:

ssh server1

Je to v pořádku.

Příklady použití pdsh ke spuštění příkazů na více serverech

Protože se řada serverů může lišit v názvu hostitele, vytvořil jsem pro sebe takové schéma konfigurace PDSH. V souboru hosts na serveru pro správu s pdsh přidám každý spravovaný server a pojmenuji ho, což je pro mě výhodné, například:

cat / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 :: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6 *. *. *. * Server1 *. *. *. * Server2 

Kde místo hvězdiček musíte zadat cílové servery IP.

Aby se pdsh mohl v daném souboru připojit k danému jménu serveru / root / ssh / known_hosts do klíče každého spravovaného serveru, odděleného čárkou, přidejte požadovaný název serveru, který jsme zadali v / etc / hosts. Například:

Poté se budete moci připojit pomocí hostname, které jste si vybrali pro pohodlí, bude pro nás užitečné, pokud máme 100500 serverů, které jsou pojmenovány jinak.

Ke spuštění příkazu na vzdáleném serveru pomocí pdsh se používá následující konstrukce:

pdsh -w server1 'command' - Vždy doporučuji citovat spuštěné příkazy, protože pokud používáte speciální znaky, bash na serveru s pdsh provede příkaz po speciální znak lokálně.

Chcete-li například zjistit čas na vzdálených serverech, můžete spustit příkaz pro každý z nich.

pdsh -w server1 'date'

server1: So 14. září 12:27:16 +06 2019

pdsh -w server2 'date'

server2: So 14. září 12:27:21 +06 2019

Nebo okamžitě spusťte jeden příkaz pro seznam serverů:

pdsh -w server1, server2 'date'

server1: So 14. září 12:36:20 +06 2019 server2: So 14. září 12:36:20 +06 2019

Pokud potřebujete provést příkaz na 10 serverech, dostanete poměrně dlouhý příkaz se seznamem všech serverů, což je nevhodné. Protože nastavili jsme vlastní název hostitele pro servery a pdsh to chápe, když voláte pdsh, můžete určit konkrétní servery nebo řadu serverů v hranatých závorkách:

pdsh -w server [1-2] 'date' - rozsah serverů v mém případě jsou 2 servery. Může to být od 1 do 20, bude to vypadat takto: pdsh -w server [1-20] 'date'

pdsh -w server [1,2] 'date' - konkrétní servery 1 a 2, můžete si vybrat například 3-4 servery a příkaz bude vypadat takto: pdsh -w server [1,2,7,9] 'date'

Pro pohodlnější formátování lze výstup výsledků příkazů ze vzdálených serverů použít s konstrukcí:

pdsh -w server [1-20] 'uptime' | řadit -n

Zvažte dříve nainstalovaný modul pdsh-mod-gendors. Chcete-li jej použít, vytvořte samotný soubor:

dotek / etc / gender

Proč je to nutné? Pohlaví je nativní soubor syntaxe pro popis rolí pdsh. Jak může být použit v práci? Například:

  1. Máte 10 serverů s Ubuntu. Zkombinujeme je do jedné skupiny Ubuntu a jejich názvy hostitelů budou ubuntu1-10.
    Do souboru / etc / genders píšeme následující řádky:

    ubuntu [1-10] ubuntu
  2. Máte 10 serverů s Centos a podobnými hostitelskými jmény - centos1-10:
    centos [1-10] centos
  3. Existuje také skupina serverů pro vývojáře - web1-10:
    web [1-10] web
  4. Pokud existuje skupina serverů s různými názvy, například sys [1-5] a adm [4-8]:
    sys [1-5] adm [4-8] our 

I.e. v souboru / etc / genders můžete vytvořit různé skupiny serverů Linux. Aby pdsh mohl číst data ze souboru pohlaví při spuštění, musíte místo přepínače -w určit -g.

V mém případě stále existují dva servery, ale to nic nemění:

[root @ server atd.] # pdsh -g centos 'date'

server1: So 14. září 12:49:59 +06 2019 server2: So 14. září 12:50:00 +06 2019 

To je mnohem pohodlnější a příkaz se provádí na všech serverech ve skupině.
Ve výchozím nastavení pdsh umožňuje spustit až 32 souběžných relací na různých serverech. Počet současně spuštěných příkazů je označen tlačítkem -f. Například, když -f 1 dokud není příkaz proveden na prvním serveru, nepřechází na druhý.

Na příkladu našeho týmu to vypadá takto:

pdsh -g ubuntu 'date' -f 1

Můžete také použít klíče -t a -u:

  • -t - nastavit časový limit připojení v sekundách;
  • -u - nastavit časový limit pro vzdálené provádění příkazů.

Na závěr bych rád uvedl několik příkladů, jak můžete použít pdsh při správě skupin serverů Linux.

Následující příkaz na všech zadaných serverech přejde do určeného adresáře a stáhne do něj iso obraz Centos 7:

pdsh -w server [1,2] 'cd / root && wget http://mirror.yandex.ru/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso'

Chcete rychle zkontrolovat, které repozitáře jsou nainstalovány na spravovaných serverech?

pdsh -w server [1,2] 'yum repolist'

server2: Loaded pluginy: fastestmirror server2: Načítání rychlostí zrcadlení z mezipaměti hostfile server2: * base: repo.centos.ru server2: * extras: repo.centos.ru server2: * aktualizace: repo.centos.ru server2: repo id repo name status server2: base / 7 / x86_64 CentOS-7 - Base 10,019 server2: extras / 7 / x86_64 CentOS-7 - Extras 435 server2: updates / 7 / x86_64 CentOS-7 - Aktualizace 2 500 server2: repolist: 12 954 server1: Načtené pluginy: fastestmirror server1: Načítání rychlosti zrcadlení z mezipaměti hostfile server1: * base: repo.centos.ru server1: * extras: repo.centos.ru server1: * aktualizace: repo.centos.ru server1: repo id repo name status server1: base / 7 / x86_64 CentOS-7 - Base 10,019 server1: extras / 7 / x86_64 CentOS-7 - Extras 435 server1: aktualizace / 7 / x86_64 CentOS-7 - Aktualizace 2 500 server1: repolist: 12 954

pdsh -w server [1,2] 'yum install httpd -y' - instalace apache na oba servery

A zkontrolujte, zda je skutečně nainstalován:

To znamená, že můžete provést libovolný příkaz najednou na několika vzdálených serverech. Pokud chcete spustit nějaký bash skript, doporučujeme vám jej přidat do nějakého souboru a zkopírovat na potřebné servery a poté jej spustit..

To je všechno, snad doufám, že tyto informace budou pro vás užitečné a usnadní rutinní úkoly správy více serverů Linux.