Рубрика:
Администрирование /
How To
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Набор утилит dtools Управляем множеством UNIX-систем
В подчинении сисадмина обычно находится не один, а несколько серверов. Давать команды каждому по отдельности неэффективно, на помощь приходят специализированные инструменты – Fabric, pyDSH, dtools и другие
Первые два основаны на Python и при необходимости вполне могут заменить более сложные инструменты; dtools (Distributed tools [1]) написан на bash и по идеологии и подходу ближе к классическому shell, а поэтому очень прост в понимании и использовании. При необходимости dtools легко расширяется. В репозиториях дистрибутивов Linux dtools обычно не встречается, но его установка проста.
$ sudo apt-get install git
$ git clone https://github.com/ajdiaz/dtools.git
$ cd dtools
$ sudo cp dt dthost dtstatus /usr/bin
$ sudo cp -r lib /usr/lib/dtools
$ sudo cp -r doc/man/ /usr/share/man/man1
Все операции выполняются с помощью bash скрипта dt, cинтаксис выглядит просто:
dt pattern command arguments
Шаблоны представляют собой фильтр-выборку целевых хостов. Сами узлы описываются в базе, по умолчанию это файл ~/.dtdb, но с помощью параметра -D/--db можно указать любой другой файл (или, как вариант, изменить значение переменной DTOOLS_DB=~/.dtdb в самом скрипте). Каждый узел описывается в отдельной строке, после которой указываются тэги, которым он будет соответствовать.
localhost www smtp mysql
host1 www mysql wp
host2 www pg wp
Пример самый простой, на самом деле тэгов и узлов может быть много, и, таким образом, можно описать все возможные варианты для подачи команд. Как и принято в UNIX, названия регистрозависимы, то есть mysql и MySQL – это разные тэги.
Чтобы просмотреть список узлов для определенного тэга, необходимо использовать параметр list:
$ dt tag:www list
Возможна выборка узлов с несколькими тэгами. Например, выберем все хосты, у которых есть тэги mysql или wp:
$ dt tag:mysql+tag:wp list
Или нам нужны только узлы, у которых присутствуют оба тэга одновременно:
$ dt tag:mysql:tag:wp list
Все шаблоны описаны файлами в /usr/lib/dtools/patterns (в ~/.dtools/patterns шаблоны может создавать сам пользователь). Кроме указанных, есть также и операция отрицания, например, все тэги, кроме wp, можно отобрать с помощью tag:wp:not::, и другие шаблоны all (все), nil (по сути, пустышка), ec2 (узлы AWS EC2), out (внешний URL), и использование регулярных выражений.
Выборку возможно производить с помощью нескольких шаблонов. Но результат лучше вначале протестировать с помощью list или специального ключа -p/--pretend.
Для удобства можно использовать три парсера (dthost, dtstatus, dtcompact), выводящие результат в разной форме.
$ dt exp:.* list | dthost
Узлы в ~/.dtdb можно заносить вручную, но, когда список большой, это становится неудобно. Здесь проще использовать команду add. Добавим host3 с тэгом mysql:
$ dt sys:host3 add mysql
Операции производятся через SSH. Вначале следует подключиться по ssh к удаленной системе, и узел будет автоматически добавлен ~/.ssh/known_hosts. Это можно сделать и самому:
ssh-keyscan host >> ~/.ssh/known_hosts
Все должно работать автоматически. Но здесь есть нюансы. По умолчанию для аутентификации используется открытый ключ, а не логин/пароль, а поэтому в зависимости от ситуации будет выдаваться ошибка. Удобнее скопировать открытый ключ на удаленные системы, это можно сделать вручную или с помощью команды ssh-copy-id. Но в обычном режиме это вряд ли получится, поэтому следует использовать интерактивный (-i), вводя пароль к каждому узлу:
$ dt -i exp:.* ssh-copy-id ~/.ssh/id_dsa.pub
Здесь есть тонкость, не описанная в документации, – подключение производится с помощью текущей учетной записи, и как-либо указать иную нельзя. Но выход найти просто – узлы базы следует прописывать в стиле ssh, как user@host. Команды, которые может выполнять dtools, – это именно «внутренние» команды, а не команды ОС. Хотя для удобства они созвучны.
- Сайт dtools – http://ajdiaz.me/dtools.
Подготовил Сергей Яремчук
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|