автоматизированное развертывание Linux и управление конфигурацией в небольших масштабах - стоит ли это того?

24

Я собираюсь развернуть ~ 25 серверов под управлением Debian . Машины будут играть разные роли - веб-серверы, серверы приложений Java, прокси, блоки MySQL. Среда, вероятно, не будет сильно расти в будущем - может быть, еще 2-5 серверов в ближайшие 2 года.

Я, вероятно, буду использовать fai для установки системы, но я не уверен, стоит ли добавлять также централизованное управление конфигурацией cfengine или puppet для такого небольшого масштаба.

Имеет ли смысл управление конфигурацией для среды такого размера?

PQD
источник

Ответы:

29

Я бы порекомендовал использовать смесь предварительного заполнения Debian, где вы предоставляете установщику текстовый файл, который отвечает на все вопросы, которые он задает, и Puppet.

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

Инструмент управления конфигурацией особенно полезен, когда у вас есть несколько серверов, выполняющих одну и ту же роль, и вы хотите, чтобы они были идентичными, например, кластер веб-серверов. Однако они также могут быть полезны для настройки базовой установки всех серверов. Вы захотите установить определенные пакеты на все ваши серверы, такие как ntpd и MTA. Вы хотите изменить конфигурационный файл на всех ваших серверах. Дополнительным преимуществом является то, что вы можете хранить свои манифесты в чем-то вроде подрывной деятельности и вести учет того, что изменилось на сервере, кто это сделал и почему. Управление конфигурацией также может быть спасением в случае сбоя сервера, и вам необходимо быстро восстановить его. Установите ОС (используя FAI или preseeding), установите Puppet, и все будет готово, как и раньше. Очевидно, вам нужно хранить резервные копии данных.

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

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

Дэвид Пашли
источник
спасибо за подсказку о предпосевной обработке. Я смотрю на документы об этом прямо сейчас.
PQD
ФАИ - старая школа; Я определенно не рекомендовал бы это. Предпосевной + Кукольный ftw.
womble
Мы используем FAI и cfengine, у нас около 1000 машин, и это работает очень хорошо. Стоит отметить, что вы можете подключиться к машине по мере ее сборки, что значительно упростит написание микросценариев.
Джеймс
FAI старая школа? НЕТ! FAI очень прочен и имеет более чем 10-летний опыт работы. Взгляните на длинный список пользователей FAI по адресу fai-project.org/reports
Томас Ланге,
Хороший совет, мы используем похожий подход, и он работает хорошо. Тем не менее, я бы не уволил ФАИ. FAI не использует образы для установки (SystemImager делает это). Вы должны установить минимальный корневой каталог nfs, который используется для запуска установщика FAI. Процесс установки автоматизирован с помощью файлов конфигурации и выполнения различных пользовательских хуков. Преимущество перед предварительным заданием заключается в том, что концепция классов FAI позволяет легко обрабатывать несколько серверов (и даже рабочих станций), выполняющих разные роли.
JooMing
10

Я бы порекомендовал CFengine для любой среды, которая имеет более 2-3 блоков и где у вас есть некоторое представление о «шаблонах» или серверах, выполняющих определенные роли.

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

Противопоставьте даже опытному системному администратору, развертывающему веб-сервер в конце двенадцатичасовой смены, когда что-то уже пошло не так ... Вероятно, они помнят тот отвратительный маленький файл конфигурации, который нужно поместить в / etc / random / location / foo / bar, иначе приложение молча не сможет сделать что-то довольно важное, например, выставить счет клиентам? :)

Такие инструменты, как CFengine, также являются отличным способом выполнения обновлений безопасности для всей среды. Сброс конфигурации Nagios (NRPE) на все блоки также является пустяком. Если вы имеете дело с пятью ящиками или пять сотен коробок вы будете экономить время с Cfengine.

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

Возможно, ваш следующий вопрос будет CFengine против Puppet? Это более сложное решение, и я всегда обращался к CFengine из-за (в первые дни) некоторой незрелости от Puppet, особенно в части регистрации ошибок ... в эти дни я действительно не уверен - есть игра, не видишь? Оглядываясь назад на мои специфические проблемы с Puppet, они были связаны с сертификатом SSL, до сих пор мучительно вспоминают время, которое я потратил 3 часа на диагностику проблем с подключением к серверу <-> клиента в irc.freenode.net/#puppet с некоторыми здоровенными RTFM и RTFS только для поиска ошибка, не будучи зарегистрированным, и Люк сказал: «Ах, это действительно трудно исправить» и никогда не делал. :(

nixgeek
источник
хорошая точка зрения. проблема в моем случае, что вещи будут узкоспециализированными, количество шаблонов [из-за избыточности] будет, вероятно, около n / 2 [где n - общее количество серверов].
PQD
1
Это неплохо, большинство моих WWW кластеров имеют n + 2, если не n / 2, и вы можете быть достаточно гибкими с CFengine в развертывании узлов за вашими балансировщиками нагрузки, такими как HAproxy. Совершенно жизнеспособно также управлять IPVS и поддерживать активность :-) Даже с учетом требований избыточности n / 2, я бы поспорил, что в вашей среде много одинаковых или похожих файлов конфигурации? Помните, что с CFengine у ​​вас есть инструмент 'editfiles' для таких вещей, как "шаблонный" конфигурационный файл, содержащий что-то вроде IP, а затем (во время выполнения) поиск и замена с правильной информацией. ;)
nixgeek
@astinus спасибо за ваши комментарии. Я также немного боюсь, что смогу снизить производительность из-за проблем с центральной конфигурацией. Что вы думаете об отключении автоматического опроса конфигурации и регистрации на каждой из машин и принуждении к обновлению и ручной проверке, все ли в порядке? [да, у меня будет nagios / кастомный мониторинг на месте ... но все же].
PQD
1
Я думаю, что уверенность в ваших методах управления конфигурацией приходит со временем, но пока что просто отключите автоматический опрос ящиков и используйте «cssh» для входа в каждый класс ящиков, чтобы запустить «cfagent -qv» (или что угодно!), Когда Вы хотите подтолкнуть обновления. Если вам нужен лучший совет для повышения уверенности, разверните виртуальную машину в качестве «промежуточной» среды и убедитесь, что все изменения пройдут в первую очередь. Довольно просто, если вы сохраняете конфигурацию CFengine или Puppet в Subversion, просто используйте ветки и теги.
nixgeek
Я также рекомендую использовать SLACK для смешного упрощения (пере) установки систем, управления конфигурацией. Это доступно здесь: sundell.net/~alan/projects/slack
HK_
5

Помимо cfengine и puppet, есть еще и шеф-повар . Я настоятельно рекомендую использовать один из этих инструментов, поскольку все всегда будет развиваться в неожиданных направлениях. Это помогает управлять вещами в централизованном месте.

Важно признать, что есть вероятность, что вы не получите всего, но если вы сможете получить хотя бы 90%, это только начало. Кроме того, это весело и сделает вашу жизнь проще в долгосрочной перспективе. Наконец, это хороший навык - идти вперед.

Джодер Хо
источник
chef - это недавняя запись на сцене управления конфигурацией. Он предназначен для настройки путем написания ruby, чтобы делать то, что вы хотите, в отличие от пользовательского декларативного языка puppet. Время покажет, какой метод работает хорошо. Я сейчас сижу в марионеточном лагере.
Дэвид Пашли
3

Я использую cfengine с 5 лет для установки Debian (от woody до lenny в настоящее время). С помощью etch я создаю собственный debian-installer. Благодаря preseed возникает один вопрос: «Какое имя хоста?». После этого cfengine настраивает весь сервер (dns + dhcp с пользователями и паролями dnssec, samba, ntpd, default (Samba), ssh, openvpn, apache vHosts, резервное копирование с помощью rsnapshot на LVM, пользовательские веб-модули и т. Д.).

Даже когда я устанавливаю только один сервер, я использую скрипты cfengine из своего набора инструментов, например:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Мне нравится cfengine, потому что скрипты cf2 читаются человеком.

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

/ Торстен

ThorstenS
источник
2

Это должно стоить даже для небольшого сайта. Это все о последовательности, как вы растете. И вы знаете, что ваш сайт будет расти. Лучше всего начинать, пока ты еще маленький. Cfengine потрясающий. Особенно версия 3, которая может обрабатывать все менеджеры пакетов по всему полю, и она действительно легкая и безопасная, и она «просто работает». Кукольный просто не доставил то, что требовал. Не пробовал Шеф.

Преимущество cfengine перед остальными заключается в том, что он очень легкий, но на самом деле имеет больше возможностей. Это безопасность, как ssh, а не веб-сертификаты, используемые puppet. Когда я рассказал своему боссу о cfengine, он подумал, что это научная фантастика :) Если вы ищете что-то футуристическое, попробуйте прочитать некоторые исследовательские работы Марка Берджесса. Отличная вещь.

SAnnukka
источник
1

Инструмент номер один, который мне хотелось бы иметь при запуске небольшого сайта, - это «кнопочные» сборки. Это облегчает исправления, обновления и перестройки, что может решить множество других проблем в будущем.

Нет SSH правильно установлен на всех коробках? нет также curl / wget / vim? а как насчет других внутренних инструментов, которые вы хотели бы иметь на каждой коробке?

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

ericslaw
источник
1

Я согласен с каждым здесь. Вы должны начать изучать и настраивать рабочую инфраструктуру, когда вы невелики. Потому что тогда вы готовы, когда вы растете.

В зависимости от того, что вы хотите запустить, я бы выбрал FAI, cfengine и pre-seeding для Debian / Ubuntu. FAI может работать со многими различными инструментами, так что это хорошее начало для любого Debian-подобного дистрибутива. С конфигурацией, управляемой классом FAI (и cfengine), вы можете легко разделить ваши установки на небольшие модули, которые затем вы можете выбрать, какие из них использовать для каждой вашей машины. Таким образом, это будет полезно, даже если у вас много разных машин. Это на самом деле более полезно, так как вы будете документировать свою установку с помощью этих сценариев. А при установке на новую машину вы ничего не забудете.

Да, вы ДОЛЖНЫ иметь несколько машин для тестирования, прежде чем внедрять свои изменения в оперативную установку. Но с помощью сценария настройки, подобного этому, вы не забудете сделать какой-либо шаг в процессе установки.

Андерс
источник