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

Управление приложением на нескольких серверах или PXE против cfEngine / Chef / Puppet

У нас есть приложение, работающее на нескольких (5 или около того, и они будут расти). Аппаратное обеспечение всех машин идентично, и в идеале программное обеспечение должно быть таким же. До сих пор я управлял ими вручную и больше не хочу (статические IP-адреса, отключение всех необходимых служб, установка необходимых пакетов ...). Может ли кто-нибудь сбалансировать плюсы и минусы следующих вариантов или предложить что-то более умное?

1: Индивидуально установите centos на все ящики и управляйте конфигурациями с помощью chef / cfengine / puppet. Это было бы хорошо, так как мне нужен был предлог, чтобы научиться использовать одно из приложений, но я не знаю, действительно ли это лучшее решение.

2: Сделайте одну коробку идеальной и изобразите ее. Обслуживайте изображение через PXE, и всякий раз, когда я хочу внести изменения, я могу просто перезагрузить ящики с нового образа. Как специалисты по кластеру обычно справляются с такими вещами, как наличие MAC-адресов в файлах / etc / sysconfig / network-scripts / ifcfg *? Мы также используем infiniband, и он также отказывается запускаться, если hwaddr неверен. Могут ли они быть правильно сгенерированы при загрузке?

Я склоняюсь к решению PXE, но думаю, что мониторинг с помощью munin или nagios будет немного сложнее с этим. У кого-нибудь есть опыт работы с такого рода проблемами?

Все серверы имеют твердотельные накопители, они быстрые и мощные.

Спасибо, Мэтт.

Ваш кластер больше похож на кластер HPC, чем на OLTP, как мой, но я думаю, что установка, которую я использую, подойдет и вам. Я называю это "mpdehaan trifecta", потому что это умение человека, который написал или управляет тремя задействованными инструментами.

1.) Сапожник для подготовки базовой сборки. Cobbler - это проект, целью которого является создание пересечения ваших систем kickstart, pxe, yum-repo, dhcp, dns и т. Д. Это, безусловно, самый простой способ настроить и запустить кикстарт, и при необходимости вы можете использовать другие функции.

2.) Кукольный для управления конфигурацией. В идеале хосты, построенные вашим сапожником, представляют собой очень простые конфигурации, которые знают просто достаточно, чтобы позвонить домой на ваш марионеточный сервер при запуске. Затем Puppet применит ваши настройки конфигурации и будет поддерживать их согласованность в вашей среде на неограниченный срок.

3.) Func для специальных команд на нескольких машинах параллельно. Например, «разверните новую проверку кода svn и перезапустите apache». Достаточно просто использовать func для вызова одной и той же команды bash на группе серверов, как и cluster-ssh. Если вы действительно хотите вникнуть в это, вы можете написать для него свои собственные модули с помощью очень простого Python.

У всех трех инструментов есть хорошие вики-сайты и активные каналы IRC для помощи на freenode.

Обзор

В некотором смысле, у вас есть два вопроса ...

  • Как построить и поддерживать стандартные серверы?
  • Как сохранить стандартную конфигурацию и внести изменения позже?

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

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

Создание серверов

Мне не нравятся изображения в мире UNIX; это скорее подход в стиле Windows. Даже некоторые люди, занимающиеся Windows, похоже, переориентируют сейчас сценарии для стандартных сборок.

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

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

Во-первых, воспользуйтесь преимуществами автоматизации сборки вашего дистрибутива, например Kickstart в RHEL / CentOS. Kickstart будет базовым вариантом с вариациями в зависимости от ваших потребностей. Сборки Kickstart могут быть инициированы с сервера PXE.

Для более сложной части сборки и всего, что не подходит для файла Kickstart, вы можете написать свои собственные сценарии. Однако вы можете обнаружить, что puppet или cfengine лучше подходят для вас, чем пользовательские скрипты. Я считаю, что пользовательские сценарии наиболее гибкие и не ограничиваются каким-либо одним подходом.

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



Соблюдение стандартов

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

Если вы решите полагаться на системные пакеты, а не на создание собственных сборок на основе исходного кода для ваших наиболее важных серверных ролей, многие из них можно поддерживать с помощью собственных системных утилит. Это может быть простой сценарий для запуска for цикл против вашего списка серверов и запустите yum -y update package.

Для управления конфигурацией здесь находятся puppet, cfengine и другие управление конфигурацией утилиты вступают в игру. Это очень полезные утилиты, обеспечивающие необходимую основу без написания собственных сценариев с нуля.

Когда вы обновляете стандарты конфигурации для своих серверов, важно включить их в стандартные сборки серверов.

Если вы пойдете по маршруту pxe, обязательно посмотрите на

http://etherboot.org/wiki/index.php

Gpxe даст вам больше гибкости с целями загрузки. Достаточно легко загрузить aoe blade, и нет ничего лучше, чем загрузка ядра с удаленного http-сервера !!!!!!!!!! :-).

Какое время работы сервера вам нужно?

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

На стороне pxe у вас есть несколько вариантов, в зависимости от файлового ввода-вывода вашего кластера. Либо просто загрузите ядро ​​и смонтируйте диск удаленно через aoe или iscsi.

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

Я также добился успеха, используя nfs root, используя кластерное решение nfs. Вы можете указать разные файлы для обслуживания в зависимости от адресов их клиентов.

Опять же, вы должны проверить, нравится ли вашему приложению (-ям) работать с nfs. Он не подходит для любой рабочей нагрузки.

кластерный сервер nfs может содержать 192.168.0.1:/etc/hostname 192.168.0.2:/etc/hostname

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

Все это сократит время развертывания, если вы централизуете файловую систему в сетевом хранилище. Создание образа операционной системы на удаленный диск по сети требует времени !!!!

Если вы используете какое-либо из этих решений, убедитесь, что у вас есть хорошо спроектированный и отказоустойчивый сетевой уровень, а также что ваш сервер nfs / SAN хорошо спроектирован и безопасен!

Потеря соединения с вашим NFS / SAN плохо скажется на работоспособности сервера. :-(

Довольно легко создать несколько скриптов для tftp / pxe для управления процессом загрузки.

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

Недавно я завершил большой проект по развертыванию централизованной системы управления сборкой / инициализацией и конфигурацией за $ WORK. Мы работаем с CentOS.

Мой дизайн, который мне очень нравится, дает нам процесс сборки практически в один щелчок (ну, одну страницу веб-интерфейса), используя несколько пользовательских сценариев PHP, чтобы связать все вместе с помощью простого, но эффективного веб-интерфейса.

Общая теория:

  1. Выполняйте все установки из одного унифицированного минималистичного файла KickStart (ну, хорошо, один для x86 и один для x86-64, но все же практически идентичные файлы с минимальным выбором пакетов).
  2. Сценарий постустановки KickStat загружает Puppet.
  3. Puppet применяет всю конфигурацию узла / хоста, установку пакетов и т. Д.

Я согласен с тем, что образы - это не способ делать что-то в Unix ... они действительно больше подходят для мира Windows, где сценарии / автоматическая установка и настройка не так просты.

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

Эта система дает ряд преимуществ:

  • Puppet обрабатывает все, кроме стандартной базовой установки, поэтому все необходимые пакеты и конфигурация находятся в одном месте.
  • Манифесты Puppet служат дополнительным источником низкоуровневой документации.
  • Пока вы придерживаетесь Puppet (т.е.не вносите локальные изменения конфигурации и не объединяете их обратно в Puppet), создание дубликата машины тривиально.
  • Поскольку все хосты построены на общей основе, вы можете предварительно установить оборудование или виртуальные машины с базовым набором пакетов (KickStart), а затем превратить их в функциональные узлы, просто добавив классы по мере необходимости.
  • Puppet позволяет «помечать» хосты для производства или разработки, поэтому невероятно легко создать копию хоста для разработки / тестирования, обновить пакеты или внести необходимые изменения в конфигурацию, протестировать, а затем снова включить в производство.