Если у вас есть группа серверов в которой есть деление по ролям(серверы выполняют различные функции) или например вы используете разные дистрибутивы под разные задачи то эта заметка будет вам очень полезна).
В проекте в котором я работаю, для массового управления группами серверов есть средства собственной разработки. Это очень удобно, когда у тебя например 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 которая так же позволяет получать различную инфу о серверах из этого файла, например проверять роли сервера в скриптах. Но, это уже другая история.
Помогла ли вам статья?