PDSH Súbežné vykonávanie príkazov na viacerých serveroch Linux

V tomto článku vám poviem, ako spravovať veľkú flotilu serverov Linux z konzoly jedného servera, vzdialene spúšťať príkazy na iných serveroch a získavať ich výsledky, kontrolovať stav serverov a vykonávať podobnú prácu paralelne pomocou nástroja PDSH. Budeme rozumieť tomu, ako ho nainštalovať, nakonfigurovať a spúšťať príkazy na viacerých serveroch súčasne.

PDSH (paralelný distribuovaný obal) - vysoko výkonný nástroj na paralelné spúšťanie príkazov na veľkom počte serverov Linux prostredníctvom protokolu ssh. V predvolenom nastavení vám pdsh umožňuje podporovať 32 súbežných pripojení k spravovaným serverom. Existuje niekoľko užitočných rozširujúcich modulov pre pdsh, ktorým sa budeme venovať aj v tomto článku..

S pdsh môžete:

  • Aktualizácia softvéru na serveroch;
  • Nainštalujte potrebné moduly alebo pomôcky;
  • Spustiť nejaký bash skript;
  • Skontrolujte aktualizácie a ďalšie informácie.

obsah:

  • Nainštalujte PDSH a prídavné moduly
  • Konfigurácia servera správy pdsh a spravovaných serverov Linux.
  • Príklady použitia pdsh na spúšťanie príkazov na viacerých serveroch

Nainštalujte PDSH a prídavné moduly

Najprv musíte nainštalovať obslužný program pdsh a potrebné moduly. V systéme CentOS sa inštalácia vykonáva prostredníctvom správcu balíkov yum:

yum install epel-release -y - pripojte úložisko Epel

yum nainštalujte pdsh pdsh-mod-pohlavia -y - nainštalujte pre ňu pdsh a modul pohlavia.

Vo všeobecnosti nie je na konfiguráciu pdsh potrebné nič iné. Nainštalovali sme samotný pdsh a tiež nainštalovali ďalší modul PDSH-mod-pohlavia, o ktorom budem hovoriť neskôr, keď prejdeme na spúšťanie príkazov na vzdialených serveroch.

Konfigurácia servera správy pdsh a spravovaných serverov Linux.

Aby sme zakaždým nezadávali heslá pre pripojenie k vzdialeným serverom, vygenerujeme ssh kľúč na serveri pre správu s nainštalovaným pdsh a pridáme ho na spravované servery..

ssh-keygen -q

Zadajte súbor, do ktorého sa má kľúč uložiť (/root/.ssh/id_rsa): Zadajte prístupové frázy (prázdne bez hesla): Znova zadajte rovnaké prístupové frázy: 

Spustenie príkazu ssh-keygen -q pre všetky otázky stačí stlačiť Enter. Kľúč je pripravený, teraz ho treba skopírovať na spravované servery Linux. Ako príklad som vzal 2 servery so systémom Linux CentOS.

Na spravovaných serveroch vytvorte adresár pre kľúč ssh (ak neexistuje):

mkdir /root/.ssh/

Skopírujte kľúč do tohto adresára, urobím to prostredníctvom echo:

echo -e "kľúč zo súboru /root/.ssh/id_rsa.pub" >> /root/.ssh/author_keys

Kľúč bol pridaný, musíte skontrolovať, či pripojenie zo servera pdsh prechádza:

ssh server1

Je to v poriadku.

Príklady použitia pdsh na spúšťanie príkazov na viacerých serveroch

Pretože množstvo serverov sa môže líšiť v názve hostiteľa, vytvoril som pre seba takú konfiguračnú schému PDSH. V súbore hosts na serveri pre správu s pdsh pridám každý spravovaný server a pomenujem mu meno, ktoré je pre mňa výhodné, napríklad:

hostitelia mačiek / etc /

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

Ak namiesto hviezdičiek musíte zadať cieľové servery IP.

Aby sa pdsh mohol pripojiť k danému názvu servera v súbore / root / ssh / known_hosts do kľúča každého spravovaného servera, oddeleného čiarkou, pridajte požadovaný názov servera, ktorý sme zadali v / etc / hosts. Napríklad:

Potom sa budete môcť pripojiť pomocou názvu hostiteľa, ktorý ste si pre pohodlie vybrali, bude pre nás užitočné, ak máme 100500 serverov, ktoré sú pomenované odlišne.

Ak chcete spustiť príkaz na vzdialenom serveri pomocou pdsh, použite nasledujúcu konštrukciu:

pdsh -w server1 'command' - Vždy vám odporúčam citovať spustené príkazy, pretože ak používate špeciálne znaky, bash na serveri s pdsh vykoná príkaz po špeciálnom znaku lokálne.

Napríklad, ak chcete zistiť čas na vzdialených serveroch, môžete spustiť príkaz pre každý z nich.

pdsh -w server1 'date'

server1: So 14 september 12:27:16 +06 2019

pdsh -w server2 'date'

server2: So 14 september 12:27:21 +06 2019

Alebo okamžite vykonajte jeden príkaz pre zoznam serverov:

pdsh -w server1, server2 'date'

server1: So 14 september 12:36:20 +06 2019 server2: So 14. september 12:36:20 +06 2019

Ak potrebujete vykonať príkaz na 10 serveroch, dostanete pomerne dlhý príkaz so zoznamom všetkých serverov, čo je nepohodlné. pretože pre servery sme nastavili vlastné meno hostiteľa a spoločnosť pdsh to chápe. Pri volaní servera pdsh môžete v hranatých zátvorkách určiť konkrétne servery alebo rad serverov:

pdsh -w server [1-2] 'date' - rozsah serverov v mojom prípade sú 2 servery. Môže to byť od 1 do 20, bude to vyzerať takto: pdsh -w server [1-20] 'date'

pdsh -w server [1,2] 'date' - konkrétne servery 1 a 2, môžete si zvoliť napríklad 3 až 4 servery a príkaz bude vyzerať takto: pdsh -w server [1,2,7,9] 'date'

Pre pohodlnejšie formátovanie možno výstup výsledkov príkazov zo vzdialených serverov použiť pri konštrukcii:

pdsh -w server [1-20] 'doba prevádzkyschopnosti' | druh -n

Zvážte predtým nainštalovaný modul PDSH-mod-gendors. Ak ho chcete použiť, vytvorte samotný súbor:

dotyk / etc / pohlavia

Prečo je to potrebné? Pohlavia je natívny syntaktický súbor na opis rolí pdsh. Ako sa dá uplatniť v práci? Napríklad:

  1. Máte 10 serverov s Ubuntu. Budeme ich spájať do jednej skupiny Ubuntu, pričom ich hostiteľské mená budú ubuntu1-10.
    Do súboru / etc / gender píšeme nasledujúce riadky:

    ubuntu [1-10] ubuntu
  2. Máte 10 serverov s Centos a podobnými hostiteľskými menami - centos1-10:
    centos [1-10] centos
  3. Existuje tiež skupina serverov pre vývojárov - web1-10:
    web [1-10] web
  4. Ak existuje skupina serverov s rôznymi názvami, napríklad sys [1-5] a adm [4-8]:
    sys [1-5] adm [4-8] our 

tj V súbore / etc / gender môžete vytvoriť rôzne skupiny serverov Linux. Aby pdsh mohol pri štarte čítať údaje zo súboru pohlaví, musíte namiesto prepínača -w uviesť -g.

V mojom prípade stále existujú dva servery, ale nič to nemení:

[root @ server atď] # pdsh -g centos 'date'

server1: So 14 september 12:49:59 +06 2019 server2: So 14. september 12:50:00 +06 2019 

Je to omnoho pohodlnejšie a príkaz sa vykoná na všetkých serveroch v skupine..
V predvolenom nastavení vám pdsh umožňuje spúšťať až 32 súbežných relácií na rôznych serveroch. Počet súčasne spustených príkazov sa zobrazuje pomocou tlačidla -F. Napríklad, keď -f 1 kým sa príkaz nevykoná na prvom serveri, neprejde na druhý.

Na príklade nášho tímu to vyzerá takto:

pdsh -g ubuntu 'date' -f 1

Môžete tiež použiť kľúče -T a -u:

  • -T - nastaviť časový limit pripojenia v sekundách;
  • -u - nastaviť časový limit pre vzdialené vykonanie príkazu.

Na záver by som rád uviedol niekoľko príkladov, ako môžete použiť pdsh pri správe skupín serverov Linux.

Nasledujúci príkaz na všetkých určených serveroch prejde do nami určeného adresára a do neho stiahne izo image Centos 7:

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

Chcete rýchlo skontrolovať, ktoré archívy sú nainštalované na spravovaných serveroch?

server pdsh -w [1,2] 'repozitár yum'

server2: Načítané doplnky: fastestmirror server2: Načítava sa rýchlosť zrkadiel z hostovaného súboru hostfile v vyrovnávacej pamäti server2: * base: repo.centos.ru server2: * doplnky: repo.centos.ru server2: * aktualizácie: 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 - Aktualizácia 2 500 server2: repolist: 12 954 server1: Načítané doplnky: fastestmirror server1: Načítava sa rýchlosť zrkadla z vyrovnávacej pamäte hostfile server1: * base: repo.centos.ru server1: * extras: repo.centos.ru server1: * updates: repo.centos.ru server1: repo id repo name status server1: base / 7 / x86_64 CentOS-7 - základný server 10 019 server1: doplnky / 7 / x86_64 CentOS-7 - doplnky 435 server1: aktualizácie / 7 / x86_64 CentOS-7 - aktualizácie 2 500 server1: repolista: 12 954

pdsh -w server [1,2] 'yum install httpd -y' - inštalácia apache na obidva servery

A skontrolujte, či je skutočne nainštalovaný:

To znamená, že môžete vykonať ľubovoľný príkaz naraz na niekoľkých vzdialených serveroch. Ak chcete spustiť nejaký bash skript, odporúčame vám ho pridať do nejakého súboru a skopírovať ho na potrebné servery a potom ho spustiť..

To je všetko, dúfam, že tieto informácie budú pre vás užitočné a uľahčia rutinné úlohy pri správe viacerých serverov Linux.