company_banner

Знакомство с системой деплоя и сопровождения серверов xCAT

    В продолжение темы нашей предыдущей статьи, сегодня поговорим об инструменте, который мы используем изо дня в день.

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

    Любому инженеру, управляющему парком серверов Badoo – самой популярной сети знакомств в интернете, не хочется даже вспоминать о том, что когда-то приходилось править вручную конфигурации DHCP-сервера, собирать образы для сетевой PXE-загрузки… Мы хотим рассказать вам, где и как в нашей компании успешно используется программное решение xCAT.

    Прежде всего обозначим исходные условия, в рамках которых мы будем описывать ситуацию:
    • основной дистрибутив – SLES 11 или SLES 11 SP 1 (преимущественно второй);
    • последняя стабильная версия xCAT, готовый пакет под указанный дистрибутив (процесс установки подробно описан на домашней странице продукта);
    • несколько VLAN;
    • большое количество новых или уже работающих серверов.
    Возвращаясь к нашей первой статье, с которой мы также рекомендуем ознакомиться, остановимся в том месте, где нам необходимо подготовить конфигурацию DHCP-сервера, а точнее – добавить в него информацию о новых серверах. Именно с этого момента мы начинаем активно использовать xCAT.

    xCAT – это система управления парком серверов, которая обладает следующими возможностями:
    • поддержка актуального состояния DHCP-сервера,
    • поддержка актуального состояния DNS-зон и выполнение динамического обновления,
    • поддержка актуального состояния TFTP-сервера (что очень важно для нас),
    • создание образов для установки ОС,
    • поддержка PXE-сервера,
    • поддержка актуального состояния статических маршрутов на серверах,
    • отображение текущего состояния любого ранее сконфигурированного сервера,
    • управление группами серверов на основе указанной нами логики.
    Самый большой плюс системы xCAT в том, что это не абсолютно новый продукт, а в некотором роде синтез всех ранее известных, т.е. в процессе эксплуатации инженеру не приходится изучать новый синтаксис, что, несомненно, сказывается на быстроте осваивания программы.

    Кратко опишем процесс первичной настройки продукта.
    1. Заходим на сайт проекта, выбираем подходящий дистрибутив, получаем описание процесса установки.
    2. Устанавливаем требуемые пакеты.
    3. Устанавливаем непосредственно 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 через веб-интерфейс, доступ к консолям серверов с сервера управления.

    Мы будем рады продолжить цикл статей на вышеуказанные темы, если они вызывают ваш интерес, о чем вы всегда можете сообщить нам в комментариях.
    • +39
    • 15.8k
    • 9
    Badoo
    410.32
    Big Dating
    Share post

    Comments 9

      +3
      А расскажите о вашей системе спама. Как вы её используете, какие решения… ну ОЧЕНЬ интересно!
      0
      Расскажите о балансировке между дц
        0
        Расскажите о том, как у вас устроена работа с виртуальными серверами, какие проблемы были и как вы их решили. Например:
        0. что используете (xen, kvm,...)
        1. синхронизация времени на всех виртуальных серверах
        2. мониторинг
          +1
          Вы не поверите, но:
          0. VmWare ESXi — мало, не продакшн — лишь девел, тестинг
          1. визор в NTP серверва, а виртуалки с визора
          2. мониторинг сервисов на машинах — как на обычных серверах

          n. интересно то, как xCAT дает работать с виртуальными машинами, возможно, что не плохо будет — сделать заметочку в перспективе.
          +2
          Обязательно продолжайте!
          Понятное дело, это требует времени. С другой стороны, вы систематизируете собственные знания и, если мыслить глобально, в целом поднимаете уровень IT-развития на постсоветском пространстве.
            +2
            благодарим, что вы сочли это ценным.
              +1
              Как видите, комментариев к статье немного, люди просто не слышали про xCAT, да и у большинства проектов проблема инсталляции сотен серверов за раз не стоит.

              Спасибо за отзыв, мы обязательно продолжим публикацию статей.
              0
              Эх, жалко нет продолжения.

              Only users with full accounts can post comments. Log in, please.