Управление группами серверов с помощью pdsh. pdsh-mod-genders

Если у вас есть группа серверов в которой есть деление по ролям(серверы выполняют различные функции) или например вы используете разные дистрибутивы под разные задачи то эта заметка будет вам очень полезна).
В проекте в котором я работаю, для массового управления группами серверов есть средства собственной разработки. Это очень удобно, когда у тебя например 100 серверов и тебе нужно выполнить какое то действие  на конкретных группах или на всех и ты можешь оперировать именами групп а не длинным списком из имен серверов.
Типичный кейс — запуск puppet-агента на всех серверах. Или например проверка версии некого пакета на всех серверах с CentOS 7.3.

Другая проблема которую решает данное средство — инвентаризация. Хочется иметь некий файл с описанием серверов их ролей и прочих атрибутов позволяющих понять предназначение серверов и управлять ими «массово».
Недавно я попал в среду, где было очень много серверов и совершенно отсутствовали средства их инвентаризации и тем более управления.

Когда нужно было сделать что то на паре серверов люди делали примерно так:

pdsh -w sd01,sd05,sd06 rpm -qa kernel

Конечно, держать имена и роли всех серверов в голове это круто само по себе но совершенно не эффективно.
Особенно когда есть такие прекрасные и простые средства для упорядочивания всего этого хозяйства.

pdsh + genders

genders — это по сути файл с собственным синтаксисом описания ролей, атрибутов и библиотека для работы с этим файлом. Этот проект вышел из HPC где необходимо массовое управление группами серверов.

У pdsh есть модуль — pdsh-mod-genders позволяющий использовать genders-файл.

Установка

Для rhel-base дистрибутивов пакеты есть в EPEL.

yum install pdsh pdsh-mod-genders -y

Файл с описанием

Файл располагается в /etc/genders. Имеет очень простой формат:

node name  # roles and attributes_x000D_
sl01         puppet,el7_x000D_
dh0[1-3]     docker,el7_x000D_
sl0[2-7]     gluster,el7_x000D_
tgt0[1-2]    tgt,el7_x000D_
test         test,el6_x000D_
sl08,sl12    test,os=debian8

рэнжи можно указывать очень гибко:

foo01,foo02,foo03,foo04,foo05 = foo[01-05]_x000D_
foo3,foo7,foo9,foo11     = foo[3,7,9-11]_x000D_
fooi,fooj,foo0,foo1,foo2 = fooi,fooj,foo[0-2]

Управление серверами

выполнить docker ps на всех машинах с ролью docker:

pdsh -g docker docker ps

вывести дату на всех el7 серверах:

pdsh -g el7 date

вывести hostname серверов с debian8:

pdsh -g os=debian8 hostname

выполнить puppet на всех серверах описанных в файле:

pdsh -a puppet agent -t

есть еще полезная утилитка nodeattr из пакета genders которая так же позволяет получать различную инфу о серверах из этого файла, например проверять роли сервера в скриптах. Но, это уже другая история.

Помогла ли вам статья?

Рейтинг
( Пока оценок нет )
iVirt-it.ru
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: