Имеется пара серверов, десяток, другой рабочих станций (устройств) с Линуксом на борту. Все это работает и не требует вмешательств, но бывает, что необходимо установить одинаковое программное обеспечение, произвести обновление или глобально перестроить систему, все это можно обозвать - типовые операции. Как же это сделать за минимальное время и с наименьшими усилиями? Первая пришедшая мысль - написать скрипт и выполнить его на каждом устройстве, т.е. к каждому устройству подойти (зайти удаленно), кому как нравится. Можно записать этот скрипт на каждое устройство и выполнить его, а можно сделать и выход, но не эффективный и скучный, а если количество устройств умножить на десять? Вот тогда начинаешь думать иначе, но это уже придумали и этим можно просто воспользоваться.
DSH - distributed shell (распределенная оболочка) работает банально просто. DSH получает на вход команду, выполняет ее на описанных устройствах и возвращает с каждого устройства ответ. Вот это как раз то, что нам надо для выполнения поставленной задачи. Будем рассматривать на примере нескольких серверов. Для начала определимся с какого сервера будем производить управление. Проводим подготовительные работы.
user$ sudo su root# apt-get install dsh
Для обеспечения доступа без пароля главного сервера к каждому подчиненному серверу необходимо снабдить подчиненные сервера сертификатом RSA. Как это сделать было подробно рассмотрено "Авторизация SSH по RSA ключу". Если этого не сделать, то при каждом обращении подчиненный сервер будет спрашивать пароль. Сертификаты лучше генерировать от пользователя root, тогда не возникнет проблем с уровнем безопасности при установке программного обеспечения и запуск/остановка некоторых служб. Если необходимо управлять и главным сервером, то передайте RSA ключ на него тоже и добавьте его имя или IP адрес в список управления. Далее необходимо службе DSH сообщить, кем нужно управлять, для этого редактируем конфигурационный файл DSH/etc/dsh/group/all.
# Group A1 localhost srv_01 srv_02 srv_03 # Group A2 srv_04 srv_05 srv_06 srv_07 srv_08 192.168.0.3 192.168.0.4 192.168.0.7 # Group B4 srv_09 srv_10
Имена серверов можно записывать в любом формате, в котором они отвечают через службу DNS, например, examle1.com, server16, born.station11.net или указать IP адрес. Сервера можно распределять по группам, например, A1 - базы данных, A2 - кластер, B4 - почтовые сервера, тогда имеет смысл разнести их в соответствующие группы. Для каждой группы создадим отдельный файл (своего рода алиас). Разумеется имена группам можете давать свои.
Группа A1 /etc/dsh/group/a1.
srv_01 srv_02 srv_03
Группа A2 /etc/dsh/group/a2.
srv_04 srv_05 srv_06 srv_07 srv_08 192.168.0.3 192.168.0.4 192.168.0.7
Группа B4 /etc/dsh/group/b4.
srv_09 srv_10
На этом настройка DSH закончена, попробуем выполнить несколько команд.
root# dsh -g all uptime
Немного поясню: ключ -g all указывает, что выполнить действия с группой all, uptime собственно выполняемая команда. Если все настроено правильно вы увидите, примерно, такой вывод. UpTime всех подключенных серверов.
14:34:06 up 1:20, 2 users, load average: 0.00, 0.00, 0.00 14:34:07 up 1:18, 1 user, load average: 0.16, 0.03, 0.01 14:34:07 up 1:17, 1 user, load average: 0.00, 0.00, 0.00 14:34:09 up 11 days, 1:05, 1 user, load average: 0.01, 0.36, 0.52
Для того, чтобы знать с какого сервера пришло сообщение нужно добавить ключ -M.
root# dsh -g all -M uptime
localhost: 14:34:25 up 1:20, 2 users, load average: 0.00, 0.00, 0.00 192.168.0.3: 14:34:25 up 1:18, 1 user, load average: 0.12, 0.03, 0.01 192.168.0.4: 14:34:25 up 1:17, 1 user, load average: 0.00, 0.00, 0.00 192.168.0.7: 14:34:27 up 11 days, 1:05, 1 user, load average: 0.01, 0.34, 0.50
Если вам необходимо выполнить команды с параметрами, то их необходимо заключить в "кавычки"или указать ключ -с.
root# dsh -g a2 -M "free -m | grep Mem"
192.168.0.3: Mem: 250 31 219 0 3 16 192.168.0.4: Mem: 250 31 219 0 3 16 192.168.0.7: Mem: 497 475 21 0 133 264
root# dsh -g all -M "apt-get -y upgrade"
root# dsh -g all -M "apt-get -y --force-yes install программа"
Комментариев нет:
Отправить комментарий