Найти в Дзене

Одновременное выполнение команд на нескольких Linux-серверах

1. PSSH — Parallel SSH PSSH — это опенсорсный набор инструментов командной строки, написанный на Python и предназначенный для параллельного выполнения SSH-команд на множестве Linux-систем. Он быстро работает и лёгок в освоении. PSSH включает в себя такие средства, как parallel-ssh, parallel-scp, parallel-rsync, parallel-slurp и parallel-nuke (подробности об этих средствах можно посмотреть в man). Перед установкой parallel-ssh в Linux-системе сначала надо установить pip. Вот как это делается в разных дистрибутивах: $ sudo apt install python-pip python-setuptools   #Debian/Ubuntu
# yum install python-pip python-setuptools        #RHEL/CentOS
# dnf install python-pip python-setuptools        #Fedora 22+ Затем parallel-ssh устанавливают с использованием pip: $ sudo pip install parallel-ssh Далее, нужно внести имена хостов или IP-адреса удалённых Linux-серверов и сведения о портах в файл hosts (на самом деле, назвать его можно как угодно). Тут нам пригодится такая команда: $ vim hosts Вот
Оглавление

1. PSSH — Parallel SSH

PSSH — это опенсорсный набор инструментов командной строки, написанный на Python и предназначенный для параллельного выполнения SSH-команд на множестве Linux-систем. Он быстро работает и лёгок в освоении. PSSH включает в себя такие средства, как parallel-ssh, parallel-scp, parallel-rsync, parallel-slurp и parallel-nuke (подробности об этих средствах можно посмотреть в man).

Перед установкой parallel-ssh в Linux-системе сначала надо установить pip. Вот как это делается в разных дистрибутивах:

$ sudo apt install python-pip python-setuptools   #Debian/Ubuntu
# yum install python-pip python-setuptools        #RHEL/CentOS
# dnf install python-pip python-setuptools        #Fedora 22+

Затем parallel-ssh устанавливают с использованием pip:

$ sudo pip install parallel-ssh

Далее, нужно внести имена хостов или IP-адреса удалённых Linux-серверов и сведения о портах в файл hosts (на самом деле, назвать его можно как угодно). Тут нам пригодится такая команда:

$ vim hosts

Вот пример содержимого такого файла:

192.168.0.10:22
192.168.0.11:22
192.168.0.12:22

После того, как в файл будет внесено всё необходимое, пришло время запустить parallel-ssh, передав этой утилите имя файла с использованием опции -h, а также — команды, которые нужно выполнить на всех серверах, адреса которых имеются в файле hosts. Флаг -i утилиты используется для того, чтобы вывести на экран то, что попадёт в стандартные потоки вывода и ошибок после завершения выполнения команд на серверах.

Команда запуска parallel-ssh может выглядеть так:

$ parallel-ssh -h hosts "uptime; df -h"

На следующем рисунке показано использование утилиты при работе с тремя серверами.

Утилита parallel-ssh выполняет команды на нескольких серверах
Утилита parallel-ssh выполняет команды на нескольких серверах

2. Pdsh — Parallel Remote Shell Utility

Pdsh — это, опять же, опенсорсное решение, представляющее собой оболочку для одновременного выполнения команд на нескольких Linux-серверах.

Вот как установить pdsh в различных дистрибутивах:

$ sudo apt install pdsh         Debian/Ubuntu
# yum install pdsh              RHEL/CentOS
# dnf install pdsh              Fedora 22+

Для того чтобы выполнять команды на нескольких серверах, адреса этих серверов, как и при использовании parallel-ssh, надо добавить в файл, который тоже можно назвать hosts. Затем нужно запустить pdsh в следующем виде:

$ pdsh -w ^hosts -R ssh "uptime; df -h"

Здесь флаг -w используется для указания файла со списком серверов, флаг -R применяется для указания модуля удалённых команд (среди доступных модулей удалённых команд имеются ssh, rsh, exec; по умолчанию используется rsh). Обратите внимание на значок ^ перед именем файла со списком серверов.

Вот как выглядит работа с этой командой.

-3

Выполнение команд на нескольких серверах с использованием pdsh

Если вы, при вызове pdsh, не указали список команд, которые надо выполнить на серверах, эта утилита запустится в интерактивном режиме. Подробности о pdsh можно узнать на соответствующей странице man.

3. ClusterSSH

ClusterSSH — это инструмент командной строки, предназначенный для администрирования кластеров серверов. Он запускает консоль администратора и, для каждого сервера, отдельное окно xterm. После этого на всех этих серверах можно одновременно выполнять одни и те же команды.

Установим clusterssh:

$ sudo apt install clusterssh    Debian/Ubuntu
# yum install clusterssh         RHEL/CentOS
$ sudo dnf install clusterssh    Fedora 22+

Теперь, для подключения к серверам, нужно выполнить команду следующего вида:

$ clusterssh linode cserver contabo

Можно воспользоваться и такой конструкцией:

$ clusterssh username@server1 username@server2 username@server3

После этого вы увидите нечто, подобное тому, что показано на следующем рисунке.

-4

Работа с несколькими серверами с помощью clusterssh

Команды, введённые в консоли администратора, выполняются на всех серверах. Для выполнения команд на отдельном сервере нужно вводить их в окне, открытом для него.

4. Ansible

Ansible — это популярный опенсорсный инструмент для автоматизации IT-процессов. Он используется для настройки систем и для управления ими, для установки приложений и для решения других задач.

Установим ansible:

$ sudo apt install ansible       Debian/Ubuntu
# yum install ansible            RHEL/CentOS
$ sudo dnf install ansible       Fedora 22+

После этого надо добавить адреса серверов в файл /etc/ansible/hosts.

$ sudo vim /etc/ansible/hosts

Вот пример фрагмента подобного файла с несколькими системами, объединёнными в группу webservers:

# Ex 2: A collection of hosts belonging to the 'webservers' group [webservers]
139.10.100.147
139.20.40.90
192.30.152.186

Теперь, для того, чтобы получить сведения команды uptime и узнать, какие пользователи подключены к хостам, входящим в группу webservers, можно воспользоваться следующей конструкцией:

$ ansible webservers -a "w " -u admin

Здесь опция -a используется для указания аргументов, передаваемых модулю, а флаг -u позволяет задать имя пользователя по умолчанию, применяемое для подключения к удалённым серверам по SSH.

Обратите внимание на то, что интерфейс командной строки ansible позволяет выполнять команды лишь по одной.

-5

Взаимодействие с несколькими серверами средствами ansible

4. Overcast

Overcast — это простая программа командной строки, предназначенная для облегчения запуска, настройки и управления кластерами машин, без длительного обучения или изучения тонкостей существующих инструментов управления серверами.

-6

Создавайте, перезагружайте и удаляйте экземпляры в DigitalOcean, Linode и Amazon или локально с помощью Vagrant + Virtualbox.

# Spin up a new Ubuntu 14.04 instance on DigitalOcean:
$ overcast digitalocean create db-01 # Spin up a new Ubuntu 14.04 instance on Linode:
$ overcast linode create db-02 # Spin up a new Ubuntu 14.04 instance on EC2:
$ overcast aws create db-03 --user ubuntu
$ overcast run db-03 allow_root_access_on_ec2
$ overcast instance update db-03 --user root # Spin up a new locally-running Ubuntu 14.04 Virtualbox instance:
$ overcast virtualbox create db-04 # Upgrade and install Redis across all of those instances in parallel:
$ overcast run db-* install/core install/redis --parallel

Запустите несколько команд или несколько сценариев на любом из ваших экземпляров через SSH. Команды могут выполняться последовательно или параллельно.

# Run bundled scripts, e.g. a LAMP stack:
$ overcast run lamp-01 install/core install/apache install/mysql install/php # Run scripts relative to the current working directory or using absolute path:
$ overcast run app-cluster ./recipes/my-app/install /path/to/script # Run sequences of commands and scripts across multiple machines in parallel:
$ overcast run db ./script.sh uptime "free -m" "df -h" --parallel

Подписывайтесь на мой канал и ставьте лайки!