PDSH Równoczesne wykonywanie poleceń na wielu serwerach Linux

W tym artykule powiem ci, jak zarządzać dużą flotą serwerów Linux z konsoli jednego serwera, zdalnie wykonywać polecenia na innych serwerach i uzyskiwać ich wyniki, sprawdzać status serwerów i wykonywać podobną pracę równolegle za pomocą narzędzia pdsh. Rozumiemy, jak go zainstalować, skonfigurować i uruchamiać polecenia na kilku serwerach równolegle.

PDSH (równolegle rozproszona powłoka) - wysokowydajne narzędzie do równoległego uruchamiania poleceń na dużej liczbie serwerów Linux za pośrednictwem ssh. Domyślnie pdsh pozwala na obsługę 32 jednoczesnych połączeń z zarządzanymi serwerami. Istnieje kilka przydatnych modułów rozszerzeń dla pdsh, które omówimy również w tym artykule..

Za pomocą pdsh możesz:

  • Zaktualizuj oprogramowanie na serwerach;
  • Zainstaluj niezbędne moduły lub narzędzia;
  • Uruchom skrypt bash;
  • Sprawdź aktualizacje i więcej.

Treść

  • Zainstaluj PDSH i moduły dodatkowe
  • Konfigurowanie serwera zarządzania pdsh i zarządzanych serwerów Linux.
  • Przykłady używania pdsh do uruchamiania poleceń na wielu serwerach

Zainstaluj PDSH i moduły dodatkowe

Najpierw musisz zainstalować narzędzie pdsh i niezbędne moduły. W CentOS instalacja odbywa się za pomocą menedżera pakietów yum:

mniam zainstalować epel-release -y - połącz repozytorium Epel

mniam zainstaluj pdsh pdsh-mod-genders -y - zainstaluj dla niego pdsh i moduł płci.

Ogólnie rzecz biorąc, nic więcej nie jest potrzebne do skonfigurowania pdsh. Zainstalowaliśmy sam pdsh, a także zainstalowaliśmy dodatkowy moduł pdsh-mod-genders, o czym powiem później, kiedy przejdziemy do uruchamiania poleceń na zdalnych serwerach.

Konfigurowanie serwera zarządzania pdsh i zarządzanych serwerów Linux.

Aby nie wprowadzać hasła do łączenia się ze zdalnymi serwerami za każdym razem, wygenerujemy klucz ssh na serwerze zarządzania z zainstalowanym pdsh i dodamy go do zarządzanych serwerów.

ssh-keygen -q

Wprowadź plik, w którym chcesz zapisać klucz (/root/.ssh/id_rsa): Wpisz hasło (puste, jeśli nie ma hasła): Wprowadź ponownie to samo hasło: 

Uruchamianie polecenia ssh-keygen -q dla wszystkich pytań wystarczy nacisnąć Enter. Klucz jest gotowy, teraz pozostaje skopiować go na zarządzane serwery Linux. Jako przykład wziąłem 2 serwery z systemem Linux CentOS.

Na zarządzanych serwerach utwórz katalog dla klucza ssh (jeśli go nie ma):

mkdir /root/.ssh/

Skopiuj klucz do tego katalogu, robię to przez echo:

echo -e "twój klucz z pliku /root/.ssh/id_rsa.pub" >> /root/.ssh/authorized_keys

Klucz został dodany, musisz sprawdzić, czy połączenie z serwera pdsh przechodzi:

serwer ssh 1

W porządku.

Przykłady używania pdsh do uruchamiania poleceń na wielu serwerach

Ponieważ wiele serwerów może różnić się nazwą hosta, stworzyłem taki schemat konfiguracji PDSH. W pliku hosts na serwerze zarządzania za pomocą pdsh dodam każdy serwer zarządzany i nadam mu dogodną dla mnie nazwę, na przykład:

cat / etc / hosts

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

Gdzie zamiast gwiazdek musisz podać serwery docelowe IP.

Aby pdsh mógł połączyć się z podanymi nazwami serwerów w pliku / root / ssh / known_hosts do klucza każdego zarządzanego serwera, oddzielonego przecinkiem, dodaj żądaną nazwę serwera, którą określiliśmy w / etc / hosts. Na przykład:

Po tym będziesz mógł połączyć się przy użyciu nazwy hosta, którą wybrałeś dla wygody, przyda się nam, jeśli będziemy mieli 100500 serwerów o różnych nazwach.

Aby uruchomić polecenie na zdalnym serwerze za pomocą pdsh, używana jest następująca konstrukcja:

pdsh -w serwer1 'polecenie' - Zawsze radzę cytować uruchomione polecenia, ponieważ jeśli użyjesz znaków specjalnych, bash na serwerze za pomocą pdsh wykona polecenie po znaku lokalnym lokalnie.

Na przykład, aby sprawdzić czas na zdalnych serwerach, możesz uruchomić polecenie dla każdego z nich.

pdsh -w serwer1 „data”

server1: Sat Sep 14 12:27:16 +06 2019

pdsh -w server2 'date'

server2: Sat Sep 14 12:27:21 +06 2019

Lub natychmiast wykonaj jedno polecenie dla listy serwerów:

pdsh -w serwer1, serwer2 „data”

server1: Sat Sep 14 12:36:20 +06 2019 server2: Sat Sep 14 12:36:20 +06 2019

Jeśli musisz wykonać polecenie na 10 serwerach, otrzymasz dość długie polecenie z listą wszystkich serwerów, co jest niewygodne. Ponieważ ustawiamy własną nazwę hosta dla serwerów i pdsh rozumie to, wywołując pdsh, możesz podać określone serwery lub zakres serwerów w nawiasach kwadratowych:

pdsh -w serwer [1-2] „data” - zakres serwerów w moim przypadku to 2 serwery. Może wynosić od 1 do 20, będzie wyglądać następująco: pdsh -w serwer [1-20] „data”

pdsh -w serwer [1,2] „data” - określone serwery 1 i 2, możesz wybrać na przykład 3-4 serwery, a polecenie będzie wyglądać następująco: pdsh -w server [1,2,7,9] „data”

W celu wygodniejszego formatowania można użyć wyjściowych wyników poleceń ze zdalnych serwerów z konstrukcją:

pdsh -w serwer [1-20] „uptime” | sortuj -n

Rozważ wcześniej zainstalowany moduł pdsh-mod-gendors. Aby go użyć, utwórz sam plik:

dotknij / etc / gender

Dlaczego jest to potrzebne? Płeć to natywny plik składni do opisywania ról pdsh. Jak można go zastosować w pracy? Na przykład:

  1. Masz 10 serwerów z Ubuntu. Połączymy je w jedną grupę Ubuntu, niech ich nazwy hostów będą ubuntu1-10.
    W pliku / etc / genders zapisujemy następujące wiersze:

    ubuntu [1-10] ubuntu
  2. Masz 10 serwerów z Centos i podobnymi nazwami hostów - centos1-10:
    centos [1-10] centos
  3. Istnieje również grupa serwerów dla programistów - web1-10:
    sieć [1-10] sieć
  4. Jeśli istnieje grupa serwerów o różnych nazwach, na przykład sys [1-5] i adm [4-8]:
    sys [1-5] nasz adm [4-8] nasz 

Tj. w pliku / etc / genders możesz tworzyć różne grupy serwerów Linux. Aby pdsh odczytywał dane z pliku płci podczas uruchamiania, musisz podać zamiast przełącznika -w -g.

W moim przypadku nadal są dwa serwery, ale to nic nie zmienia:

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

server1: Sat Sep 14 12:49:59 +06 2019 server2: Sat Sep 14 12:50:00 +06 2019 

Jest to o wiele wygodniejsze, a polecenie jest wykonywane na wszystkich serwerach w grupie..
Domyślnie pdsh pozwala na uruchomienie do 32 równoczesnych sesji na różnych serwerach. Liczba jednocześnie uruchomionych poleceń jest wskazywana za pomocą klawisza -f. Na przykład kiedy -f 1 dopóki polecenie nie zostanie wykonane na pierwszym serwerze, nie przejdzie do drugiego.

Na przykładzie naszego zespołu wygląda to tak:

pdsh -g ubuntu 'date' -f 1

Możesz także zastosować klucze -t i -u:

  • -t - ustaw limit czasu połączenia w sekundach;
  • -u - ustaw limit czasu dla zdalnego wykonywania poleceń.

Podsumowując, chciałbym podać kilka przykładów użycia pdsh do zarządzania grupami serwerów Linux.

Następujące polecenie na wszystkich określonych serwerach przejdzie do podanego przez nas katalogu i pobierz do niego obraz ISO 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'

Chcesz szybko sprawdzić, które repozytoria są zainstalowane na zarządzanych serwerach?

pdsh -w server [1,2] „mniam repolist”

server2: Załadowane wtyczki: najszybszy błąd server2: Ładowanie prędkości kopii lustrzanych z buforowanego pliku hosta server2: * baza: repo.centos.ru server2: * dodatki: repo.centos.ru server2: * aktualizacje: repo.centos.ru server2: repo id nazwa repo 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 - Aktualizacje 2500 server2: repolist: 12 954 server1: Załadowane wtyczki: najszybciejmirror server1: Ładowanie prędkości kopii lustrzanej z buforowanego pliku hosta serwer1: * baza: repo.centos.ru serwer1: * dodatki: repo.centos.ru serwer1: * aktualizacje: repo.centos.ru serwer1: identyfikator repo nazwa statusu repo serwer1: baza / 7 / x86_64 CentOS-7 - Base 10.019 serwer 1: dodatki / 7 / x86_64 CentOS-7 - Dodatki 435 serwer 1: aktualizacje / 7 / x86_64 CentOS-7 - Aktualizacje 2500 serwerów 1: repolista: 12 954

pdsh -w server [1,2] 'mniam zainstaluj httpd -y' - instalowanie apache na obu serwerach

I sprawdź, czy jest naprawdę zainstalowany:

Oznacza to, że możesz wykonać dowolne polecenie na kilku zdalnych serwerach. Jeśli chcesz uruchomić jakiś skrypt bash, radzę dodać go do jakiegoś pliku i skopiować na niezbędne serwery, a następnie uruchomić.

To wszystko, być może, mam nadzieję, że informacje będą dla ciebie przydatne i ułatwią rutynowe zadania zarządzania wieloma serwerami Linux.