Назад | Перейти на главную страницу

Автоматизация развертывания сервера

Я обнаружил, что постоянно настраиваю почти идентичные серверы и VPS для ряда моих клиентов, и это может занять очень много времени. Часто единственное, что меняется между каждым развертыванием, - это другой веб-сайт, который будет обслуживаться. Есть ли простой способ автоматизировать все это и избавиться от утомительной монотонности настройки 56 одинаковых серверов?

На данный момент я развернул только серверы Ubuntu, но, возможно, я начну использовать другие операционные системы Linux или даже Windows. До сих пор я смотрел на Capistrano, но, похоже, он сосредоточен на написании небольших программ на Ruby для выполнения этой работы, а у меня вообще нет никаких знаний

Кукольный звучит идеально для того, что вы пытаетесь сделать, с той оговоркой, что на данный момент нет поддержки Windows.

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

Puppet является декларативным - он позволяет описывать ваши ящики с точки зрения ресурсов, которые должен иметь каждый ящик. Так что если хочешь ssh - вы пишете класс для этого ресурса - и внутри класса вы можете включить логику того, как ssh немного отличается от FreeBSD и Ubuntu. Он также знает, как использовать yum внутри Redhat и apt-get внутри дистрибутивов на основе Debian и ports в BSD. Теперь в вашем узле сервера у вас будет просто строка вроде include ssh - и puppet поступит правильно и установит SSH на машину, не запоминая, что это Ubuntu, Redhat или FreeBSD.

Что приятно, так это то, что все компоненты Сервера находятся в одном месте - и если в какой-то момент вы добавите определение узла Сервера, ВСЕ машины соответственно обновят свою конфигурацию.

Прямо сейчас я управляю только тремя ящиками с помощью Puppet, но это уже окупилось. Потратив неделю на настройку коробки, которую мы будем использовать для демонстрации стимулов в эксперименте, оказалось, что драйвер видеокарты был слишком старым в версии Ubuntu, которую я поставил (8.04). Мне пришлось установить последнюю версию Ubuntu (9.04), но после этого мне просто нужно было apt-get и запустить puppet - и все, что я потратил на настройку за неделю, было восстановлено.

У Puppet есть немного кривой обучения, но я успешно избегал изучения Ruby - я знаю, что использую его, так как это то, на чем написан puppet - но до сих пор мне удавалось просто модифицировать примеры в документации и рецепты в вики . Еще один недостаток заключается в том, что марионетке требуется немного больше времени, чтобы сделать что-то в первый раз. Положительным моментом является то, что все, что вы изменяете на всех своих машинах, хранится в одном месте - стандартная практика - хранить конфигурацию марионетки в системе контроля версий - так что вы всегда можете оглянуться назад и увидеть, как вы настраивали серверы в прошлом. - или откатить некоторые неудачные изменения.

Наконец, вот быстрое видео это простая марионеточная демонстрация, с которой я быстро начал.

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

Cobbler связывает вместе DHCP, PXE boot и Kickstart, чтобы сделать развертывание не более чем добавлением профиля машины и нажатием кнопки питания. Для виртуальных машин koan команда выполняет (в нашем случае) магию Xen, чтобы начать установку - на dom0 Я просто печатаю:

koan --system vps.fqdn --server cobbler --no-gfx

затем virsh console смотреть здание VPS без какого-либо взаимодействия.

Мы используем RHEL и настроили набор профилей для разделения дисков, настройки сети и установки базовых пакетов для различных классов серверов. Cobbler поддерживает разновидности Debian и Ubuntu, но я никогда не пробовал. В стороне: другие интересные применения Cobbler включают бег мемтест ISO и Прошивка HP обновления.

После того, как наши системы построены с помощью Cobbler, Puppet берет на себя настройку приложений, системных демонов, регистрации устройства в RHN и т. Д. Puppet запускается как демон, который периодически проверяет, соответствует ли конфигурация системы заданным манифестам - вы знаете, что ваши обновления прошли ко всем серверам. Это также отличный способ убедиться, что коробка, которая была остановлена ​​для обслуживания, имеет правильную конфигурацию, прежде чем вы вернете ее в рабочее состояние.

Марионетка действительно классная. Вам не нужно контролировать каждый аспект вашей конфигурации - начните с того, что он управляет чем-то простым, что вам нужно настроить для каждого блока (sudoers это канонический пример) и возьмем его оттуда. Убедитесь, что ваши манифесты Puppet также имеют версии; Нет ничего лучше, чем возможность легко вернуться к заведомо исправной конфигурации, не запоминая, что нужно изменить.

Там, где я сейчас работаю, мы должны управлять Linux-частью нашей серверной фермы, а это чуть более 300 Linux-серверов. Сюда входят в основном HP Proliants, затем IBM 3850, некоторые блейд-модули IBM, VMware ESX и некоторые KVM для наших внутренних серверов управления.

сапожник

Мы смотрели на cobbler, но проблема заключалась в том, что cobbler очень специфичен для RHEL / Red Hat. Нам нужно поддерживать как минимум RHEL и SLES, а на очереди Ubuntu.

кукольный

Мы рассматривали марионетку, однако позже отказались от нее, поскольку она зависит от Ruby, а это означает, что обновление Ruby потенциально может нарушить нашу систему управления.

горячий провод

Hotwire - это то, что мы используем (внутренняя разработка, но с открытым исходным кодом), и делаем это последние несколько лет. Во-первых, он проводит инвентаризацию систем, которые будут построены, что означает инвентаризацию центра обработки данных, стойки, оборудования, операционной системы, сети и т. Д., А во-вторых, выполняет быструю сборку и развертывание. После создания системы автоматическая инвентаризация hotwire поддерживает синхронизацию инвентаря, а cfengine поддерживает их. Hotwire знает об аппаратном обеспечении сервера, обращаясь к данным SMBIOS / DMI в Bios через python-dmidecode.

Бонусные очки заключаются в том, что он объединяет инвентаризацию и процесс сборки в один, поэтому меньше нужно управлять, а функция живого инвентаря великолепна, поскольку мы знаем, если что-то не так.

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

cfengine

Мы используем cfengine, потому что кроме него и puppet больше ничего нет. Это на самом деле является хороший инструмент, но «хороший» только в зависимости от того, насколько хороши ваши политики - если вы установите опасные политики, то небольшая ошибка может нанести большой ущерб. Например, согласно политике мы не «модифицируем» файлы, мы либо заменяем их, либо не делаем. Также все замененные файлы имеют заголовок, который сообщает любому редактирующему его человеку, что он будет заменен при следующем запуске (он запускается через cron ежечасно).

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

Я добился успеха с Кукольный. Повар появляется новый. Более подробный список опций и сравнительную таблицу можно найти в статье Википедии, Сравнение программного обеспечения для управления конфигурацией с открытым исходным кодом.

Для автоматизации установки в зависимости от целевой системы:

  • Debian / Ubuntu: предварительная установка FAI или d-i
  • RedHat / Fedora: кикстарт
  • Novell / openSuSE: AutoYaST
  • Solaris: Jumpstart
  • Windows: unattended.sourceforge.net

Для управления конфигурацией я бы предложил использовать марионетку.

У меня большой успех с Кукольный, но вам нужно написать много config.

Еще одно голосование за Puppet здесь. Мы широко используем его для выполнения всех операций по установке и настройке серверов и приложений. 200+ узлов и их количество растет. Поддержка Windows, по-видимому, находится в стадии разработки, хотя в каком состоянии я не уверен.

Мы все еще изучаем начальную загрузку ОС, но, как упоминалось выше, Cobbler выглядит интересным. В настоящее время мы используем сочетание загрузки PXE с предварительной загрузкой Debian / Ubuntu, но это вряд ли оптимально.