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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я использую cfengine уже 5 лет для установки debian (в настоящее время от woody до lenny). С помощью etch я создаю собственный установщик debian. Благодаря preseed возникает один-единственный вопрос: «Какое имя хоста?». После этого cfengine настраивает весь сервер (dns + dhcp с dnssec, samba, ntpd, пользователи и пароли по умолчанию (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-скрипты в некоторой степени удобочитаемы.

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

/ thorsten

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

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

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

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

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

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

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

Да, вам СЛЕДУЕТ иметь несколько машин для тестирования перед развертыванием ваших изменений в реальной установке. Но с подобным сценарием конфигурации вы не забудете выполнить какие-либо действия в процессе установки.