автоматичне розгортання та управління конфігурацією Linux в невеликих масштабах - чи варто це?


24

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

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

Чи має сенс керування конфігурацією для середовища такого розміру?

Відповіді:


29

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

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

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

Управління конфігурацією вимагає присвячення, щоб переконатися, що ви лише вносите зміни, використовуючи їх, і буде налаштовано параметри попередньої вартості, але як тільки у вас буде робоча установка, ви не пошкодуєте про це.

Лялька - це найсучасніший із двох згаданих вами інструментів. Я дуже рекомендую його будь-кому. Конфігурація є декларативною мовою і легко створювати конструкції вищого рівня. Навколо нього також дуже велика спільнота, і завжди є люди, які бажають допомогти у списку розсилки або на каналі IRC.


дякую за підказку щодо попереднього висіву насіння. я зараз розглядаю документи про це.
pQd

FAI - старий скол; Я точно не рекомендував би його. Попередній посів + лялечний фут.
живіт

Ми використовуємо 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 vs Puppet? Це більш важке рішення, і я завжди ходив на CFengine через (в перші дні) деякої незрілості від лялькок, особливо навколо реєстрації помилок .... в ці дні я справді не впевнений - чи бачите гру? Озираючись на мої конкретні питання , з Puppet, вони були сертифікат SSL , пов'язані, до болю до сих пір пам'ятаю час я витратив 3 години діагностики сервер <-> Проблеми з підключенням клієнта в irc.freenode.net/#puppet з деякими здоровенний RTFM і RTFS тільки знайти помилка, не будучи зареєстрованою, і Лука сказав: "Ах, це справді важко виправити", і ніколи цього не робив. :(


влучне зауваження. Проблема полягає в тому, що в моєму випадку речі будуть вузькоспеціалізованими, кількість шаблонів [через надмірність] буде, мабуть, приблизно n / 2 [де n - загальна кількість серверів].
pQd

1
Це не погано, більшість моїх кластерів WWW мають n + 2, якщо не n / 2, і ви можете бути досить гнучкими за допомогою CFengine при розгортанні вузлів за вашими балансирами навантаження, як HAproxy. Цілком реально керувати IPVS та кеепалівськими речами теж :-) Навіть з n / 2 вимогами до надмірності я б ставку на те, щоб у вас було багато однакових або подібних конфігураційних файлів у вашому оточенні? Пам'ятайте, що у CFengine у ​​вас є інструмент "editfiles" для того, щоб робити такі дії, як "шаблонний" конфігураційний файл, що містить щось на зразок IP, а потім (під час виконання) пошук і заміна потрібної інформації. ;)
nixgeek

@astinus дякую за ваші коментарі. Я також трохи боюся знизити своє виробництво за допомогою накручування в центральну конфігурацію. що ви думаєте про відключення автоматичного опитування конфігурації та входу в журнал на кожній з машин та змушування його оновлюватись і вручну перевіряти, чи все добре? [так, у мене також будуть встановлені нагіоси / користувальницький моніторинг ... але все ж].
pQd

1
Я думаю, що впевненість у ваших методах управління конфігурацією приходить з часом, але в проміжку часу просто відключіть автоматичне опитування скриньки і використовуйте 'cssh' для входу в кожен клас скриньок, щоб запустити 'cfagent -qv' (або що завгодно!), Коли ви хочете натиснути оновлення. Якщо ви хочете покращити підказку для підвищення рівня впевненості, розгорніть віртуальну машину як середовище "інсценування" та переконайтеся, що всі зміни пройдуть спочатку. Досить просто, якщо ви зберігаєте конфігурацію CFengine або Puppet в Subversion, просто використовуйте гілки та теги.
nixgeek

Я також рекомендую використовувати SLACK для смішного спрощення систем (пере) встановлення, управління конфігурацією. Доступний тут: sundell.net/~alan/projects/slack
HK_

5

Крім cfengine та лялькових, є ще шеф-кухар . Я настійно пропоную використовувати один із цих інструментів, оскільки речі завжди будуть рости в несподіваних напрямках. Це допомагає керувати речами в централізованому місці.

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


шеф-кухар - це нещодавній запис на сцені управління конфігурацією. Він призначений для налаштування, написавши рубін, щоб робити те, що ви хочете, на відміну від спеціальної декларативної мови лялечки. Час покаже, який метод добре працює. Зараз я сиджу в ляльковому таборі.
Девід Пашлі

3

Я використовую cfengine з 5 років для установки debian (від woody до lenny в наш час). За допомогою etch я створюю власну програму debian-installer. Завдяки попередньо заданому одному питання виникає: "що таке ім'я хоста". Після цього 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-скрипти трохи зрозумілі для людини.

тому, безумовно, варто працювати з інструментами для автоматичного управління конфігурацією.

/ торстен


2

Це повинно бути вартим навіть для невеликого сайту. Це все про консистенцію в міру зростання. І ви знаєте, що ваш сайт буде рости. Найкраще починати, поки ваш ще маленький. Cfengine - приголомшливий. Особливо версія 3, яка може працювати з усіма менеджерами пакетів по всьому полю, і його справжній легкий і безпечний, і він "просто працює". Лялька просто не доставила те, що вимагала. Не намагався шеф-кухар.

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


1

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

Немає належного встановленого ssh на всіх ящиках? немає також curl / wget / vim? що з іншими внутрішніми інструментами, які ви хотіли б мати у кожній коробці?

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


1

Я згоден з кожним тут. Ви повинні почати вчитися та налаштовувати робочу інфраструктуру, коли ви не великі. Тому що тоді ти готовий, коли виростеш.

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

Так, у вас ОБ'ЄДНУЄТЬсь деякі машини, на які можна перевірити, щоб розгорнути зміни в реальній інсталяції. Але з таким сценарієм конфігурації ви не забудете зробити будь-який крок в реальній установці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.