![](https://habrastorage.org/storage1/7c701b54/3bbd50f8/586fe987/3c371d85.png)
Если ваша деятельность так или иначе связана с установкой и настройкой крупных партий оборудования, то материал, на наш взгляд, будет вам полезен и интересен.
Любому инженеру, управляющему парком серверов Badoo – самой популярной сети знакомств в интернете, не хочется даже вспоминать о том, что когда-то приходилось править вручную конфигурации DHCP-сервера, собирать образы для сетевой PXE-загрузки… Мы хотим рассказать вам, где и как в нашей компании успешно используется программное решение xCAT.
Прежде всего обозначим исходные условия, в рамках которых мы будем описывать ситуацию:
- основной дистрибутив – SLES 11 или SLES 11 SP 1 (преимущественно второй);
- последняя стабильная версия xCAT, готовый пакет под указанный дистрибутив (процесс установки подробно описан на домашней странице продукта);
- несколько VLAN;
- большое количество новых или уже работающих серверов.
xCAT – это система управления парком серверов, которая обладает следующими возможностями:
- поддержка актуального состояния DHCP-сервера,
- поддержка актуального состояния DNS-зон и выполнение динамического обновления,
- поддержка актуального состояния TFTP-сервера (что очень важно для нас),
- создание образов для установки ОС,
- поддержка PXE-сервера,
- поддержка актуального состояния статических маршрутов на серверах,
- отображение текущего состояния любого ранее сконфигурированного сервера,
- управление группами серверов на основе указанной нами логики.
Кратко опишем процесс первичной настройки продукта.
- Заходим на сайт проекта, выбираем подходящий дистрибутив, получаем описание процесса установки.
- Устанавливаем требуемые пакеты.
- Устанавливаем непосредственно xCAT-сервер.
Основные команды для управления (добавление, изменение, проверка ввода): tabedit и tabdump
Правим файл основной конфигурации системы:
tabedit site
Основные моменты, на которые следует обратить внимание:
"installdir","/install"
― директория, в которую xCAT будет складывать все образы систем для установки, здесь же располагаются различные post-скрипты. В случае http-установки системы каталог будет доступен через веб-интерфейс. Также в нем будут расположены шаблоны для автоматической установки системы."ipmiretries","3"
― попытки подключения к интерфейсу управления сервером."ipmitimeout","2"
― без комментариев."master","master_server_name"
― имя мастер-сервера, которое должно «резолвиться», также следует иметь его в файле /etc/hosts."tftpdir","/tftpboot"
― путь к директории, в которой будут располагаться файлы, необходимые для загрузки по PXE, также TFTP-сервер должен иметь доступ к директории, потому как именно он и будет раздавать образы для pxe-boot."xcatconfdir","/etc/xcat"
― путь к директории с конфигурационными файлами xCAT."timezone","GMT"
― временная зона."useNmapfromMN","yes"
― использовать nmap на мастер-сервере для отображения состояния хостов (в том числе nodestat hostname)"dhcpinterfaces","ethN,!remote!"
― интерфейсы, на которых DHCP-сервер отвечает на DHCP-запросы. (Первый – физический интерфейс, второй ― для VLAN, где наш сервер прописан в качестве выдающего адреса)"nameservers","1.1.1.1"
― адреса DNS-серверов, куда после выдачи lease наш сервер будет пробовать отправить информацию о PTR-записи для хоста.Такой конфигурации вполне достаточно для ознакомления, а также для тестового запуска xCAT-сервера.
Теперь пробуем добавить доступ непривилегированному пользователю.
Для этого необходимо:
— наличие пользователя в системе;
— выдать и подписать сертификаты на xCAT-сервер
/opt/xcat/share/xcat/scripts/setup-local-client.sh username
Получаем директорию $HOME/.xcat, вот с таким содержимым:
ca.pem
client-cert.pem
client-cred.pem
client-key.pem
client-req.pem
— добавить информацию о пользователе в служебные таблицы xCAT. В данном случае выдаем пользователю максимальные полномочия, для этого выполним
tabedit policy
и добавим строку следующего вида:
username,allow
После проделанных нами действий пользователь получает доступ к управлению сервером xCAT.
Далее, для создания репозитория установки нам необходимо иметь образы операционных систем, которые мы собираемся использовать.
В составе xCAT представлена утилита copycds, которая работает по следующему сценарию:
copycds [{-n|--name|--osver}=distroname] [{-a|--arch}=architecture] 1st.iso [2nd.iso …]
Таким образом, если у нас есть образ установочного DVD, то достаточно просто выполнить
copycds PATH_TO_ISO SLES-11-DVD-x86_64-GM-DVD1.iso
xCAT самостоятельно выявит версию операционной системы (если нет ― --osver), затем скопирует все на локальный диск (в нашем случае ― /install/sles11)
xCat имеет также набор конфигураций для стандартной установки, которые расположены в каталоге /opt/xcat/share/xcat/install/, но для нас не представляют никакого интереса, поэтому создаем свой профиль установки и располагаем его по пути
/install/custom/install/DISTRNAME/Templatename.tmpl.
Примечание: в случае с SuSe Linux – это xml-файл, который нам поможет сделать YaST (хотя его проще написать самостоятельно, предварительно ознакомившись со структурой и составом параметров на сайте производителя).
Как только типовой шаблон установки готов, остается лишь добавить новые машины и начать установку ОС, о чем и пойдет речь ниже.
Для корректной процедуры установки нам понадобится информация:
1) о серверах, на которых мы собираемся устанавливать ОС,
2) hostname каждого сервера,
3) о подсетях, которые мы планируем использовать,
4) о соответствии hostame-ip,
5) о реквизитах доступа к интерфейсу управления сервером.
Возвращаясь к нашей предыдущей статье, мы вспоминаем, что вся необходимая информация у нас есть, остается лишь добавить ее в xCAT, что мы и демонстрируем:
1. Добавляем группы серверов в систему:
nodeadd depl[1-200] groups=depl
2. Добавляем информацию об интерфейсах управления серверами (предположим, что именуются они так: depl[1-200]ipmi):
nodeadd depl[1-200]ipmi groups=depl_ipmi
3. Мы говорили о том, что у нас есть подсеть (VLAN), в которой оказывается все новое оборудование. Описываем подсети следующим образом:
#netname,net,mask,mgtifname,gateway,dhcpserver,tftpserver,nameservers,ntpservers,logservers,dynamicrange,nodehostname,comments,disable
tabedit networks
"depl_vlan","2.2.2.0","255.255.255.0","!remote!","2.2.2.1",,"1.1.1.1","5.5.5.5","6.6.6.6",,"2.2.2.200-2.2.2.254",,,
"depl_vlan_ipmi","3.3.3.0","255.255.255.0","!remote!","3.3.3.1",,"1.1.1.1","5.5.5.5","6.6.6.6",,"3.3.3.200-3.3.3.3.254",,,
Примечание: т.к. xCat формирует конфигурацию DHCP-сервера, а информацию о фиксированных адресах хранит в файле с leases, желательно использовать фиксированные адреса хостов, которые не попадают в динамический диапазон, во избежание возможных проблем с потерей серверов в подсетях.
4. Добавляем информацию о MAC-адресах основных интерфейсов серверов, а также интерфейсов управления:
#node,interface,mac,comments,disable
tabedit mac
"depl1","eth0","MAC1",,
"depl2","eth0","MAC2",,
"depl3","eth0","MAC3",,
"depl1ipmi","eth0","ipmi_MAC1",,
"depl2ipmi","eth0","ipmi_MAC2”,,
"depl3ipmi","eth0","ipmi_MAC3",,
...
Подсказка: в прошлой статье мы говорили о файле nodes, с которым мы тесно работаем, в него же мы добавим информацию о MAC-адресах, тогда достаточно будет выполнить
cat nodes | awk {'print "\""$1"\",\"eth0\",\""$15"\""'}
и получить на выходе записи вида
"depl1","eth0","MAC1",,
То же самое для интерфейсов управления:
cat nodes | awk {'print "\""$1"manage\",\"eth0\",\""$10"\""'}
"depl1ipmi","eth0","ipmi_MAC1",,
5. Добавляем информацию о соответствии hostame – ip:
#node,ip,hostnames,otherinterfaces,comments,disable
tabedit hosts
"depl1","2.2.2.2","depl1","depl1ipmi:3.3.3.2",,
"depl2","2.2.2.3","depl2","depl2ipmi:3.3.3.3",,
"depl3","2.2.2.4","depl3","depl3ipmi:3.3.3.4",,
...
Сгенерировать эти настройки мы можем с помощью несложной команды:
for i in `seq 1 200`; do echo '"depl$i'","2.2.2.'$[$i+1]'","depl'$i'","depl'$i'manage:3.3.3.'$[$i+1]'",,'; done
6. Правим опции виртуальных консолей и их скоростей (тут нам и пригодится принадлежность всех новых машин одной группе: в итоге нам достаточно будет одной строки вместо двухсот.):
#node,power,mgt,cons,termserver,termport,conserver,serialport,serialspeed,serialflow,getmac,comments,disable
tabedit nodehm
"testgroup","ipmi","ipmi",,,,"1","1","115200",,,,
7. Правим таблицу noderes:
#node,servicenode,netboot,tftpserver,nfsserver,monserver,nfsdir,installnic,primarynic,discoverynics,cmdinterface,xcatmaster,current_osimage,next_osimage,nimserver,comments,disable
tabedit noderes
"depl",,"pxe","1.1.1.1","1.1.1.1",,,,,,,,,,,,
8. Добавляем информацию о типе наших серверов, а также о методе установки ОС:
#node,os,arch,profile,provmethod,supportedarchs,nodetype,comments,disable
tabedit nodetype
"depl","sles11.1","x86_64","Templatename","install",,"osi",,
В данном случае мы используем метод install – установку системы, можно использовать netboot – для сетевой загрузки, а также для выполнения служебных процедур.
9. Добавляем информацию о соответствии основного интерфейса сервера и его интерфейса управления:
#node,bmc,bmcport,username,password,comments,disable
tabedit ipmi
"depl","/\z/ipmi/","0",”ipmi_username”,"ipmi_password",,
Здесь мы тоже схитрим и не будем указывать отдельно соответствие для каждого сервера, а используем группу. Учитывая, что именование интерфейса управления у нас не что иное, как дописывание ipmi к hostname сервера, то это именно то, что нам нужно. И учитываем то, что username & password к IPMI у нас одинаковый для всех серверов, что также указано в таблице.
10. Теперь генерируем конфигурацию файла /etc/hosts:
makehosts
11. Создаем конфигурацию для DHCP-сервера:
makedhcp -a -n
Можно посмотреть информацию по любому узлу:
lsdef nodename
Теперь сервер готов к запуску процесса установки.
12. Выполняем:
nodeset depl[1-10] install
Вместо depl[1-10] допускается использование названия группы или перечисление через запятую.
На этом этапе мы получаем конфигурации для PXE-загрузки на каждый хост в /tftpboot/pxelinux.cfg/ и копию файла автоустановки в /install/autoinst/.
13. Даем серверу команду на загрузку с сетевого интерфейса при следующей загрузке
rsetboot depl[1-10] net
14. Отправляем сервер на перезагрузку
rpower depl[1-10] boot
Далее можем наблюдать за процессом установки в консолях серверов, либо настроить conserver (данная возможность не рассматривается в рамках этой статьи).
В последнюю очередь собираем образ для сетевой загрузки. В Badoo образы используются для диагностики, восстановления и «оживления» проблемного оборудования, подготовки нестандартного «железа», проведения тестов производительности.
Для этого выполняем команду genimage – она запустит несложный визард, ответив на вопросы которого мы получим образ системы в
/install/netboot/$DISTR/$ARCH/profile_name
Полученный образ можно менять и править по своему усмотрению, после чего следует выполнить
packimage -o $DISTR -p profile_name -a $ARCH
Так мы получаем готовый netboot образ, в который отправляем наши сервера:
nodeset depl[11-200] netboot=$DISTR-$ARCH-profile_name
rsetboot depl[11-200] net
rpower depl[11-200] boot
В netboot образ желательно положить публичные ключи, но можно воспользоваться и реквизитами для доступа из таблицы passwd (tabedit passwd)
После того, как осуществлены все подготовительные процедуры на серверах, начинаем на них установку ОС – результат мы получим через 15 минут.
Остается лишь разместить все наши сервера в нужных подсетях, после чего они проходят через Puppet, который выполнит установку нужного ПО в индивидуальном порядке, по группам, а также установит нужные параметры системы.
В завершение статьи хотелось бы отметить, что при наличии системы подобного рода инженеру достаточно отдавать нужные команды, прилагая минимум усилий к конфигурированию серверов.
Безусловно, сегодня мы рассказали далеко не обо всех преимуществах системы xCAT и тонкостях настройки, за рамками статьи остались такие моменты, как управление гипервизорами, а также виртуальными серверами на них посредством xCAT; установка и управление сервером xCAT через веб-интерфейс, доступ к консолям серверов с сервера управления.
Мы будем рады продолжить цикл статей на вышеуказанные темы, если они вызывают ваш интерес, о чем вы всегда можете сообщить нам в комментариях.