Sočasno izvajanje ukazov PDSH na več strežnikih Linux

V tem članku vam bom povedal, kako upravljati veliko floto strežnikov Linux s konzole enega strežnika, na daljavo izvajati ukaze na drugih strežnikih in pridobiti njihove rezultate, preveriti stanje strežnikov in opraviti podobno delo vzporedno s pomočjo pripomočka pdsh. Razumeli bomo, kako ga namestiti, konfigurirati in zagnati ukaze na več strežnikih vzporedno.

PDSH (vzporedno razporejena lupina) - visoko zmogljiv pripomoček za vzporedno izvajanje ukazov na velikem številu strežnikov Linux prek ssh. Pdsh vam privzeto omogoča podporo 32 sočasnih povezav z upravljanimi strežniki. Obstaja več uporabnih razširitvenih modulov za pdsh, ki jih bomo tudi opisali v tem članku..

S pdsh lahko:

  • Posodobitev programske opreme na strežnikih;
  • Namestite potrebne module ali pripomočke;
  • Zaženite nekaj bash skripta;
  • Preverite posodobitve in več.

Vsebina:

  • Namestite PDSH in dodatne module
  • Konfiguriranje strežnika za upravljanje pdsh in upravljanih strežnikov Linux.
  • Primeri uporabe pdsh za zagon ukazov na več strežnikih

Namestite PDSH in dodatne module

Najprej morate namestiti pripomoček pdsh in potrebne module. V CentOS-u namestitev poteka prek upravitelja paketov yum:

umestite epel-release -y - priključite skladišče Epel

umestite pdsh pdsh-mod-spolov -y - namestite pdsh in modul spolov zanj.

Na splošno ni potrebno nič drugega za konfiguracijo pdsh-a. Sami smo namestili pdsh in tudi namestili dodaten modul pdsh-mod-spoli, o čemer bom govoril kasneje, ko bomo prešli na izvajanje ukazov na oddaljenih strežnikih.

Konfiguriranje strežnika za upravljanje pdsh in upravljanih strežnikov Linux.

Da ne bomo vsakič vnesli gesla za povezavo z oddaljenimi strežniki, bomo na upravljalnem strežniku z nameščenim pdsh generirali ključ ssh in ga dodali na upravljane strežnike.

ssh-keygen -q

Vnesite datoteko, v katero želite shraniti ključ (/root/.ssh/id_rsa): Vnesite geslo (prazno brez gesla): Ponovno vnesite isto geslo: 

Zagon ukaza ssh-keygen -q za vsa vprašanja samo pritisnite Enter. Ključ je pripravljen, preostalo mu je, da ga kopirate v upravljane Linux-strežnike. Kot primer sem vzel 2 strežnika z Linuxom CentOS.

Na upravljanih strežnikih ustvarite imenik za ključ ssh (če ga ni):

mkdir /root/.ssh/

Kopirajte ključ v ta imenik, to storim prek odmeva:

odmevi -e "vaš ključ iz datoteke /root/.ssh/id_rsa.pub" >> /root/.ssh/authorized_keys

Ključ je dodan, morate preveriti, ali povezava s strežnikom pdsh prehaja:

ssh server1

V redu je.

Primeri uporabe pdsh za zagon ukazov na več strežnikih

Ker se več strežnikov lahko razlikuje po imenu gostitelja, sem naredil zase takšno konfiguracijsko shemo PDSH. V datoteko gostitelji na upravljalnem strežniku s pdsh dodam vsak upravljani strežnik in mu dodam ime, ki je priročno zame, na primer:

mačka / itd / gostitelji

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

Kjer namesto zvezdic morate določiti ciljne strežnike IP.

Tako, da se pdsh lahko poveže z datotenimi imeni strežnikov v datoteki / root / ssh / known_hosts ključu vsakega upravljanega strežnika, ločenem z vejico, dodajte želeno ime strežnika, ki smo ga določili v / etc / hosts. Na primer:

Po tem se boste lahko povezali z imenom gostitelja, ki ste ga izbrali za udobje, koristno nam bo, če imamo 100500 strežnikov, ki so poimenovani drugače.

Za izvajanje ukaza na oddaljenem strežniku prek pdsh se uporablja naslednja konstrukcija:

pdsh -w server1 'ukaz' - Vedno vam svetujem, da navedete tekoče ukaze, ker če uporabljate posebne znake, bo bash na strežniku s pdsh ukaz izvedel po posebnem znaku lokalno.

Na primer, če želite izvedeti čas na oddaljenih strežnikih, lahko zaženete ukaz za vsakega od njih.

pdsh -w server1 'datum'

server1: sobota, 14. september 12:27:16 +06 2019

pdsh -w server2 'datum'

server2: sobota, 14. september 12:27:21 +06 2019

Ali pa takoj izvedite en ukaz za seznam strežnikov:

pdsh -w server1, server2 'datum'

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

Če morate izvesti ukaz na 10 strežnikih, dobite precej dolg ukaz s seznamom vseh strežnikov, kar je neprijetno. Ker za strežnike nastavimo svoje ime gostitelja in pdsh to razume, ko pokličete pdsh, lahko v kvadratnih oklepajih določite določene strežnike ali niz strežnikov:

pdsh -w strežnik [1-2] 'datum' - domet strežnikov je v mojem primeru 2 strežnika. Lahko je od 1 do 20, videti bo tako: pdsh -w strežnik [1-20] 'datum'

pdsh -w strežnik [1,2] 'datum' - specifičnih strežnikov 1 in 2, lahko izberete na primer 3-4 strežnike in ukaz bo izgledal tako: pdsh -w strežnik [1,2,7,9] 'datum'

Za bolj priročno oblikovanje se lahko pri izdelavi uporabijo izhodi ukazov ukazov z oddaljenih strežnikov:

pdsh -w strežnik [1-20] 'uptime' | sortirati -n

Razmislite o predhodno nameščenem modulu pdsh-mod-gendors. Če ga želite uporabiti, ustvarite datoteko:

dotik / itd / spolov

Zakaj je to potrebno? Spol je izvorna sintaksna datoteka za opis vlog pdsh. Kako se lahko uporablja pri delu? Na primer:

  1. V Ubuntuju imate 10 strežnikov. Združili jih bomo v eno skupino Ubuntu, njihova imena gostiteljev naj bodo ubuntu1-10.
    V datoteko / etc / spolov zapišemo naslednje vrstice:

    ubuntu [1-10] ubuntu
  2. Imate 10 strežnikov s Centos in podobnimi imeni gostiteljev - centos1-10:
    centos [1-10] centos
  3. Obstaja tudi skupina strežnikov za razvijalce - web1-10:
    splet [1-10] splet
  4. Če obstaja skupina strežnikov z različnimi imeni, na primer sys [1-5] in adm [4-8]:
    sys [1-5] naš adm [4-8] naš 

I.e. v datoteki / etc / sponders lahko ustvarite različne skupine strežnikov Linux. Če želite pdsh ob zagonu prebrati podatke iz datoteke o spolih, morate namesto stikala -w določiti -g.

V mojem primeru sta še vedno dva strežnika, vendar to ne spremeni ničesar:

[root @ server itd.] # pdsh -g centos 'datum'

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

To je veliko bolj priročno in ukaz se izvaja na vseh strežnikih v skupini..
Pdsh vam privzeto omogoča, da na različnih strežnikih izvajate do 32 sočasnih sej. Število hkrati izvajanih ukazov je prikazano s tipko -f. Na primer, kdaj -f 1 dokler ukaz ni izveden na prvem strežniku, ne bo šel na drugi.

Če uporabimo svojo ekipo kot primer, je videti tako:

pdsh -g ubuntu 'datum' -f 1

Uporabite lahko tudi tipke -t in -u:

  • -t - nastavite časovno omejitev povezave v nekaj sekundah;
  • -u - nastavite časovno omejitev za daljinsko izvajanje ukazov.

In na koncu želim navesti nekaj primerov, kako lahko uporabite pdsh pri upravljanju skupin strežnikov Linux.

Naslednji ukaz na vseh določenih strežnikih se bo odpravil v nam navedeni imenik in vanj naložil sliko Centos 7 iso:

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

Želite hitro preveriti, katera skladišča so nameščena na upravljanih strežnikih?

pdsh -w strežnik [1,2] 'yum repolist'

server2: Naloženi vtičniki: najhitrejši strežnik2: Nalaganje hitrosti zrcala iz predpomnjenega strežnika hostfile2: * baza: repo.centos.ru server2: * dodatki: repo.centos.ru server2: * posodobitve: repo.centos.ru server2: repo id repo ime status server2: base / 7 / x86_64 CentOS-7 - Base 10,019 server2: dodatek / 7 / x86_64 CentOS-7 - Dodatki 435 server2: posodobitve / 7 / x86_64 CentOS-7 - Posodobitve 2.500 server2: repolist: 12.954 server1: Naloženi vtičniki: najhitrejši strežnik1: Nalaganje hitrosti zrcala iz predpomnjenega strežnika gostiteljske datoteke1: * osnova: repo.centos.ru server1: * dodatki: repo.centos.ru server1: * posodobitve: repo.centos.ru server1: repo id repo ime statusa server1: baza / 7 / x86_64 CentOS-7 - Base 10,019 strežnik1: dodatki / 7 / x86_64 CentOS-7 - Dodatki 435 strežnik1: posodobitve / 7 / x86_64 CentOS-7 - Posodobitve 2.500 strežnik1: repolist: 12.954

pdsh -w strežnik [1,2] 'yum namestite httpd -y' - namestitev apache na oba strežnika

In preverite, ali je res nameščen:

To pomeni, da lahko kateri koli ukaz hkrati izvedete na več oddaljenih strežnikih. Če želite zagnati nekakšen bash skript, vam svetujem, da ga dodate v neko datoteko in kopirate na potrebne strežnike ter nato zaženete..

Morda je to vse, upam, da bodo informacije koristne za vas in olajšale rutinske naloge upravljanja več strežnikov Linux.