воскресенье, 28 августа 2011 г.

DSH групповое управление Debian-based машинами


Имеется пара серверов, десяток, другой рабочих станций (устройств) с Линуксом на борту. Все это работает и не требует вмешательств, но бывает, что необходимо установить одинаковое программное обеспечение, произвести обновление или глобально перестроить систему, все это можно обозвать - типовые операции. Как же это сделать за минимальное время и с наименьшими усилиями? Первая пришедшая мысль - написать скрипт и выполнить его на каждом устройстве, т.е. к каждому устройству подойти (зайти удаленно), кому как нравится. Можно записать этот скрипт на каждое устройство и выполнить его, а можно сделать и выход, но не эффективный и скучный, а если количество устройств умножить на десять? Вот тогда начинаешь думать иначе, но это уже придумали и этим можно просто воспользоваться.

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.comserver16born.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 указывает, что выполнить действия с группой alluptime собственно выполняемая команда. Если все настроено правильно вы увидите, примерно, такой вывод. 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 программа"


Комментариев нет:

Отправить комментарий