PDSH Egyidejű parancsfuttatás több Linux kiszolgálón

Ebben a cikkben elmondom, hogyan kell egy Linux kiszolgálók nagy flottáját kezelni az egyik kiszolgáló konzoljáról, távolról végrehajtani a parancsokat más kiszolgálókon, és megkapni azok eredményeit, ellenőrizni a kiszolgálók állapotát, és hasonló munkákat végezni párhuzamosan a segédprogram segítségével pdsh. Meg fogjuk érteni, hogyan kell telepíteni, konfigurálni és futtatni a parancsokat több kiszolgálón párhuzamosan.

PDSH (párhuzamosan elosztott héj) - nagy teljesítményű segédprogram parancsok párhuzamos futtatásához nagyszámú Linux-kiszolgálón az ssh-n keresztül. Alapértelmezés szerint az pdsh lehetővé teszi 32 párhuzamos kapcsolat támogatását a kezelt szerverekkel. Számos hasznos bővítőmodul létezik az pdsh számára, amelyeket ebben a cikkben is tárgyalunk..

Az pdsh segítségével:

  • Frissítsen szoftvert a szerverekre;
  • Telepítse a szükséges modulokat vagy segédprogramokat;
  • Futtasson néhány bash szkriptet;
  • Keressen frissítéseket és így tovább.

Tartalom:

  • Telepítse a PDSH és a kiegészítő modulokat
  • Az pdsh felügyeleti kiszolgáló és a kezelt Linux szerverek konfigurálása.
  • Példák az pdsh használatára a parancsok futtatásához több szerveren

Telepítse a PDSH és a kiegészítő modulokat

Először telepítenie kell az pdsh segédprogramot és a szükséges modulokat. A CentOS rendszeren a telepítés a yum csomagkezelőn keresztül történik:

yum install epel-release -y - csatlakoztassa az Epel tárolót

yum install pdsh pdsh-mod-genders -y - telepítse az pdsh-t és a nemek modult.

Általában nincs szükség másra az pdsh konfigurálásához. Telepítettük maga az pdsh-t, és telepítettünk egy kiegészítő modult is pdsh-mod-nemben, amiről később beszélni fogok, amikor továbbmegyünk a távoli szerverek parancsaira.

Az pdsh felügyeleti kiszolgáló és a kezelt Linux szerverek konfigurálása.

Annak érdekében, hogy ne adjon meg jelszavakat a távoli kiszolgálókhoz való kapcsolódáshoz, előállítjuk az ssh kulcsot a felügyeleti kiszolgálón, pdsh telepítve, és hozzáadjuk a kezelt kiszolgálókhoz..

ssh-keygen -q

Írja be azt a fájlt, amelybe menti a kulcsot (/ root /.ssh/id_rsa): Írja be a jelmondatot (üres, ha nincs jelmondat): Írja be újra ugyanazt a jelmondatot: 

A parancs futtatása ssh-keygen -q minden kérdéshez csak nyomja meg az Enter billentyűt. A kulcs kész, most már másolni kell a kezelt Linux-kiszolgálókra. Példaként 2 szervert vettem fel a Linux CentOS segítségével.

A kezelt szervereknél hozzon létre egy könyvtárat az ssh kulcshoz (ha nincs ilyen):

mkdir /root/.ssh/

Másolja a kulcsot ebbe a könyvtárba, visszhang segítségével:

echo -e "a kulcs a /root/.ssh/id_rsa.pub fájlból" >> /root/.ssh/authorized_keys

A kulcs hozzáadva volt, ellenőriznie kell, hogy az pdsh-kiszolgálóról való kapcsolat megy át:

ssh szerver1

Jól van.

Példák az pdsh használatára a parancsok futtatásához több szerveren

Mivel számos kiszolgáló különbözhet gazdagépnévben, készítettem magamnak egy ilyen PDSH konfigurációs sémát. A felügyeleti kiszolgáló pdsh fájljában lévő hosts fájlba hozzáadom az egyes kezelt kiszolgálókat, és megadom nekem a nekem megfelelő kényelmet, például:

macska / stb / házigazdák

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

Ahol csillagok helyett meg kell adnia az IP célkiszolgálókat.

Annak érdekében, hogy az pdsh csatlakozhasson a fájlban szereplő megadott szervernevekhez / root / ssh / ismert_szellemek az egyes kezelt szerverek kulcsaival elválasztva, vesszővel elválasztva adja hozzá a kívánt kiszolgáló nevét, amelyet az / etc / hosts könyvtárban adtunk meg. Például:

Ezután képes lesz csatlakozni a kényelme érdekében kiválasztott gazdagépnévvel. Hasznos lesz számunkra, ha 100500 szerverünk van, amelyeket másként nevezünk el.

Parancs futtatásához egy távoli kiszolgálón pdsh-n keresztül, használja a következő konstrukciót:

pdsh -w server1 'parancs' - Mindig azt tanácsolom, hogy idézze a futó parancsokat, mert ha speciális karaktereket használ, akkor a bash a kiszolgálón az pdsh-vel végrehajtja a parancsot a speciális karakter után helyben.

Például a távoli szerverek idejének megismeréséhez mindegyikhez futtathat egy parancsot.

pdsh -w server1 'date'

server1: szeptember 14, szombat 12:27:16 +06 2019

pdsh -w server2 'date'

server2: szeptember 14, szombat 12:27:21 +06 2019

Vagy azonnal végezzen egy parancsot a kiszolgálók listájához:

pdsh -w szerver1, szerver2 'dátum'

szerver1: szeptember 14 szeptember 12:36:20 +06 2019 server2: szeptember 14 szeptember 12:36:20 +06 2019

Ha parancsot kell végrehajtania 10 kiszolgálón, meglehetősen hosszú parancsot kap, amely felsorolja az összes kiszolgálót, ami kényelmetlen. mert saját kiszolgálónevet állítunk be a kiszolgálókhoz, és az pdsh megérti ezt, amikor az pdsh meghívásakor megadhat konkrét kiszolgálókat vagy kiszolgálócsoportokat szögletes zárójelben:

pdsh -w szerver [1-2] 'date' - az én esetemben a kiszolgálók tartománya 2 szerver. 1 és 20 között lehet, így néz ki: pdsh -w szerver [1-20] „dátum”

pdsh -w szerver [1,2] 'date' - specifikus 1. és 2. szerver, választhat például 3-4 szervert, és a parancs így néz ki: pdsh -w szerver [1,2,7,9] „dátum”

A kényelmesebb formázás érdekében a távoli szerverekből származó parancs eredmények kimenete felhasználható a konstrukcióval:

pdsh -w szerver [1-20] 'uptime' | sort -n

Vegye figyelembe egy korábban telepített modult pdsh-mod-gendors. Használatához maga hozza létre a fájlt:

érintse meg az / etc / nemeket

Miért van rá szükség? A Genders egy natív szintaxisfájl az pdsh szerepkörök leírására. Hogyan lehet alkalmazni a munkában? Például:

  1. 10 szerver van az Ubuntu-val. Egyesítjük őket egy Ubuntu csoportba, legyen az ubuntu1-10 gazdaneveik.
    Az / etc / genders fájlban a következő sorokat írjuk:

    ubuntu [1-10] ubuntu
  2. 10 szerver van Centos és hasonló gazdanevekkel - centos1-10:
    centos [1-10] centos
  3. Van még egy kiszolgálók csoportja a fejlesztők számára - web1-10:
    web [1-10] web
  4. Ha van egy kiszolgálócsoport, különböző névvel, például sys [1-5] és adm [4-8]:
    sys [1-5] mi adm [4-8] mi 

Ie az / etc / genders fájlban különféle csoportokat hozhat létre Linux kiszolgálókkal. Annak érdekében, hogy az pdsh elolvassa az adatokat a nemek fájljáról indításkor, a -w kapcsoló helyett meg kell adnia -g.

Az én esetemben még mindig van két szerver, de ez semmit sem változtat:

[root @ szerver stb.] # pdsh -g centos 'dátum'

szerver1: szeptember 14 szeptember 12:49:59 +06 2019 server2: szeptember 14 szeptember 12:50:00 +06 2019 

Ez sokkal kényelmesebb, és a parancs a csoport összes szerverén végrehajtásra kerül..
Alapértelmezés szerint az pdsh lehetővé teszi, hogy akár 32 egyidejű munkamenetet futtasson különféle szerverekön. A gombbal jelzi az egyidejűleg futó parancsok számát -f. Például mikor -f 1 mindaddig, amíg a parancsot nem hajtják végre az első szerveren, a másodikra ​​nem megy.

Csapatunk példaként való felhasználása így néz ki:

pdsh -g ubuntu 'date' -f 1

Kulcsokat is alkalmazhat -t és -u:

  • -t - állítsa be a kapcsolat időkorlátját másodpercben;
  • -u - a távoli parancs végrehajtásának időkorlátja.

Végezetül szeretnék néhány példát mutatni arra, hogyan lehet az pdsh-t használni Linux szervercsoportok kezelésekor.

A következő parancs az összes megadott kiszolgálón eljut az általunk megadott könyvtárba, és tölti le a Centos 7 iso képet:

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

Gyorsan ellenőrizni szeretné, hogy melyik tároló van telepítve a kezelt szerverekre?

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

kiszolgáló2: betöltött beépülő modulok: leggyorsabb tükörkiszolgáló2: tükör sebességének betöltése a gyorsítótárazott hostfájlkiszolgálón2: * alap: repo.centos.ru szerver2: * extrák: repo.centos.ru szerver2: * frissítések: repo.centos.ru szerver2: repo id repo név status server2: base / 7 / x86_64 CentOS-7 - Base 10 019 server2: extras / 7 / x86_64 CentOS-7 - Extrák 435 server2: frissítések / 7 / x86_64 CentOS-7 - Frissítések 2500 server2: repolist: 12,954 server1: Loaded plugins: leggyorsabb tükör szerver1: Tükör sebesség betöltése a gyorsítótárba helyezett host fájl fájl szerverről1: * alap: repo.centos.ru szerver1: * extrák: repo.centos.ru szerver1: * frissítések: repo.centos.ru szerver1: repo id repo név státusz szerver1: alap / 7 / x86_64 CentOS-7 - Base 10 019 szerver1: extrák / 7 / x86_64 CentOS-7 - Extrák 435 szerver1: frissítések / 7 / x86_64 CentOS-7 - Frissítések 2500 szerver1: újratelepítő: 12 954

pdsh -w szerver [1,2] 'yum install httpd -y' - az apache telepítése mindkét szerverre

És ellenőrizze, hogy valóban telepítve van-e:

Vagyis bármilyen parancsot egyszerre végrehajthat több távoli szerveren. Ha valamilyen bash szkriptet szeretne futtatni, azt javasolom, hogy tegye hozzá egy fájlhoz, és másolja át a szükséges szerverekre, majd indítsa el..

Talán ennyi is, remélem, az információ hasznos lesz az Ön számára, és megkönnyíti a több Linux szerver kezelésének rutin feladatait.