PDSH едновременно изпълнение на команда на множество Linux сървъри

В тази статия ще ви кажа как да управлявате голям флот от Linux сървъри от конзолата на един сървър, да изпълнявате дистанционно команди на други сървъри и да получавате техните резултати, да проверявате състоянието на сървърите и да извършвате подобна работа паралелно с помощта на помощната програма pdsh. Ще разберем как да го инсталираме, конфигурираме и пускаме команди паралелно на няколко сървъра.

PDSH (паралелно разпределена обвивка) - високоефективна програма за паралелно изпълнение на команди на голям брой Linux сървъри чрез ssh. По подразбиране pdsh ви позволява да поддържате 32 едновременни връзки към управлявани сървъри. Има няколко полезни модула за разширение за pdsh, които също ще разгледаме в тази статия..

С pdsh можете:

  • Актуализиране на софтуер на сървъри;
  • Инсталирайте необходимите модули или помощни програми;
  • Пуснете някакъв баш сценарий;
  • Проверете за актуализации и други.

Съдържание:

  • Инсталирайте PDSH и добавъчни модули
  • Конфигуриране на pdsh сървър за управление и управлявани Linux сървъри.
  • Примери за използване на pdsh за изпълнение на команди на множество сървъри

Инсталирайте PDSH и добавъчни модули

Първо трябва да инсталирате помощната програма pdsh и необходимите модули. В CentOS инсталацията се осъществява чрез мениджъра на пакети yum:

yum инсталирайте epel-release -y - свържете хранилището на Epel

yum инсталирате pdsh pdsh-mod-spols -y - инсталирайте pdsh и джендър модула за него.

По принцип нищо друго не е необходимо за конфигуриране на pdsh. Инсталирахме самия pdsh, а също и инсталирахме допълнителен модул pdsh-мод-пола, за което ще говоря по-късно, когато преминем към изпълнение на команди на отдалечени сървъри.

Конфигуриране на pdsh сървър за управление и управлявани Linux сървъри.

За да не въвеждаме пароли за свързване към отдалечени сървъри всеки път, ще генерираме ssh ключа на сървъра за управление с инсталиран pdsh и ще го добавим към управляваните сървъри.

ssh-keygen -q

Въведете файл, в който да запазите ключа (/root/.ssh/id_rsa): Въведете парола (празна за без парола): Въведете отново същата парола: 

Изпълнение на командата ssh-keygen -q за всички въпроси просто натиснете Enter. Ключът е готов, сега остава да го копирате на управлявани Linux сървъри. Като пример взех 2 сървъра с Linux CentOS.

На управляваните сървъри създайте директория за ключа ssh (ако няма такъв):

mkdir /root/.ssh/

Копирайте ключа в тази директория, аз го правя чрез ехо:

echo -e "вашия ключ от файла /root/.ssh/id_rsa.pub" >> /root/.ssh/authorized_keys

Ключът е добавен, трябва да проверите дали връзката от pdsh сървъра преминава:

ssh сървър1

Добре е.

Примери за използване на pdsh за изпълнение на команди на множество сървъри

Тъй като редица сървъри могат да се различават по име на хост, направих за себе си такава конфигурационна схема на PDSH. Във файла с хостове на сървъра за управление с pdsh, добавям всеки управляван сървър и му давам име, което е удобно за мен, например:

котка / и т.н. / домакини

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

Къде вместо звездички трябва да посочите IP сървъри за местоназначение.

Така че pdsh може да се свърже с дадените имена на сървъри във файла / root / ssh / known_hosts към ключа на всеки управляван сървър, разделен със запетая, добавете желаното име на сървъра, което посочихме в / etc / hosts. Например:

След това ще можете да се свържете с името на хоста, което сте избрали за удобство, ще ни бъде полезно, ако имаме 100500 сървъри, които са наречени по различен начин.

За да стартирате команда на отдалечен сървър чрез pdsh, се използва следната конструкция:

pdsh -w server1 'команда' - Винаги ви съветвам да цитирате изпълняващи команди, защото ако използвате специални символи, bash на сървъра с pdsh ще изпълни командата след специалния символ локално.

Например, за да разберете времето на отдалечени сървъри, можете да изпълните команда за всеки от тях.

pdsh -w server1 'дата'

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

pdsh -w server2 „дата“

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

Или изпълнете веднага една команда за списък на сървърите:

pdsh -w server1, server2 „дата“

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

Ако трябва да изпълните команда на 10 сървъра, получавате доста дълга команда, в която са изброени всички сървъри, което е неудобно. защото задаваме собствено име на хост за сървъри и pdsh разбира това, когато извиквате pdsh, можете да посочите конкретни сървъри или набор от сървъри в квадратни скоби:

pdsh -w сървър [1-2] 'дата' - обхвата на сървърите в моя случай е 2 сървъра. Може да бъде от 1 до 20, ще изглежда така: pdsh -w сървър [1-20] 'дата'

pdsh -w сървър [1,2] 'дата' - специфични сървъри 1 и 2, можете да изберете например 3-4 сървъра и командата ще изглежда така: pdsh -w сървър [1,2,7,9] 'дата'

За по-удобно форматиране, изходът на командните резултати от отдалечени сървъри може да се използва при изграждането:

pdsh -w сървър [1-20] 'ъптайм' | сортиране -n

Помислете за предварително инсталиран модул pdsh-мод-gendors. За да го използвате, създайте самия файл:

докосване / и т.н. / пол

Защо е необходимо? Genders е нативния синтаксисен файл за описание на pdsh роли. Как може да се приложи в работата? Например:

  1. Имате 10 сървъра с Ubuntu. Ние ще ги комбинираме в една Ubuntu група, нека техните имена на хостове да бъдат ubuntu1-10.
    Във файла / etc / пол пишем следните редове:

    ubuntu [1-10] ubuntu
  2. Имате 10 сървъра с Centos и подобни имена на хостове - centos1-10:
    центо [1-10] центос
  3. Има и група сървъри за разработчици - web1-10:
    web [1-10] уеб
  4. Ако има група сървъри с различни имена, например sys [1-5] и adm [4-8]:
    sys [1-5] adm [4-8] нашето 

Т.е. във файла / etc / sponders можете да създавате различни групи сървъри на Linux. За да може pdsh да чете данни от джендър файла при стартиране, трябва да посочите вместо превключвателя -w .

В моя случай все още има два сървъра, но това не променя нищо:

[root @ сървър и т.н.] # pdsh -g centos 'дата'

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

Това е много по-удобно и командата се изпълнява на всички сървъри в групата..
По подразбиране pdsh ви позволява да стартирате до 32 едновременни сесии на различни сървъри. Броят на едновременно изпълняваните команди се показва с помощта на клавиша . Например, когато -е 1 докато командата се изпълни на първия сървър, няма да премине към втория.

Използвайки нашия екип като пример, изглежда така:

pdsh -g ubuntu 'дата' -f 1

Можете също да приложите ключове и :

  • - задайте времето за изчакване на връзката в секунди;
  • - задайте изчакване за отдалечено изпълнение на командата.

И в заключение бих искал да дам няколко примера за това как можете да използвате pdsh при управление на Linux сървърни групи.

Следващата команда на всички посочени сървъри ще отиде в посочената от нас директория и ще изтегли в нея изображението Centos 7 iso:

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'

Искате бързо да проверите кои хранилища са инсталирани на управлявани сървъри?

pdsh -w сървър [1,2] 'yum repolist'

server2: Заредени плъгини: fastestmirror server2: Зареждане на огледални скорости от кеширан хостфилър сървър2: * база: repo.centos.ru server2: * екстри: repo.centos.ru server2: * актуализации: repo.centos.ru server2: repo id repo име статус сървър2: база / 7 / x86_64 CentOS-7 - база 10,019 сървър2: екстри / 7 / x86_64 CentOS-7 - екстри 435 сървър2: актуализации / 7 / x86_64 CentOS-7 - актуализации 2500 сървър2: реполист: 12954 сървър1: заредени плъгини: fastestmirror сървър1: Зареждане на скоростта на огледалото от кеширан сървър на хост-файл1: * база: repo.centos.ru сървър1: * екстри: repo.centos.ru server1: * актуализации: repo.centos.ru server1: repo id repo име статус сървър1: база / 7 / x86_64 CentOS-7 - база 10,019 сървър1: екстри / 7 / x86_64 CentOS-7 - екстри 435 сървър1: актуализации / 7 / x86_64 CentOS-7 - актуализации 2500 сървър1: реполист: 12,954

pdsh -w сървър [1,2] 'yum install httpd -y' - инсталиране на apache и на двата сървъра

И проверете дали наистина е инсталиран:

Тоест можете да изпълните всяка команда наведнъж на няколко отдалечени сървъра. Ако искате да стартирате някакъв баш скрипт, бих ви посъветвал да го добавите в някакъв файл и да го копирате на необходимите сървъри и след това да го стартирате.

Това е всичко, може би, надявам се, че информацията ще ви бъде полезна и ще облекчи рутинните задачи за управление на множество Linux сървъри.