Варіанти для багатодоступної високодоступності з лялькою


14

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

Ще краще було б мати якусь активну / активну настройку, щоб сервери на другому сайті не опитувались через WAN.

Чи існують якісь стандартні методи високої доступності ляльок на різних сайтах?


1
Я зрозумів, що ви правильно ставите запитання? Ви шукаєте спосіб отримати зайвого майстра ляльок у випадку, якщо ляльковий майстер недоступний?
Hrvoje Špoljar

Це якось залежить від того, як ти використовуєш ляльку. Існує велика гнучкість. Наприклад, ви використовуєте збережені конфігурації?
Зоредаче

3
Ви дивилися на "безшовну маріонетку"? Суть його полягає в тому, що кожен агент має замовлення на маніфести, і вони застосовують їх локально. Ви в кінцевому підсумку з gitабо svnабо rsyncабо будь-який інший варіант управління системою ви використовуєте бути те , що вам потрібно масштабувати , а не ляльковод.
Ladadadada

3
Лише натяк на вирішення питання про активні дії: Ви можете використовувати anycast, щоб оголосити однаковий ( "віртуальний" / "сервісний" ) IP з обох центрів обробки даних. Ми робимо це для вирішення DNS-серверів. У кожному центрі обробки даних наші балансові менеджери оголошують ту саму IP-адресу anycast. Наша маршрутизація надає перевагу локальному балансиру вантажу, але в разі виходу з ладу повертається до інших постійних серверів (~ "більше не повідомляючи про будь-яку IP-адресу").
Мічуельник

1
Я бачу, що одна з нових функцій для лялькових версій 3.0 - це підтримка запису SRV , те, що люди з Windows добре знайомі та могли б допомогти із вмістом на Сайті.
sysadmin1138

Відповіді:


13

Лялечка насправді досить добре піддається багатокористувацькому середовищу, з застереженнями. Основна? Багато частин лялечки люблять бути централізованими. Орган сертифікації, служби інвентаризації та інформаційної панелі / звітів, файлові пакети та збережені конфігурації - всі вони найкраще підходять (або просто вимагають) налаштування, де є лише одне місце для них.

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


Почнемо з базової функціональності, щоб отримати вузол, який звітує майстру:

Модулі та маніфести

Ця частина проста. Версія контролює їх. Якщо це система управління версіями розподілених версій, тоді просто централізуйте та синхронізуйте та змініть потік "push / pull" за потребою на веб-сайті з відмовою. Якщо це Subversion, то, ймовірно, ви захочете svnsyncперенести репо на ваш аварийний сайт.

Орган сертифікації

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

  • Чи повинен один майстер дійсно бачити свій власний сертифікат, представлений у клієнті auth для вхідного з'єднання від іншого ведучого, як дійсний?
  • Чи надійно це буде працювати для служби інвентаризації, інформаційної панелі тощо?
  • Як додати додаткові дійсні імена DNS alt у дорозі?

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

Отже, те, що залишається, - це мати центрального господаря ЦА. Усі довірчі відносини продовжують працювати, коли ЦС знижується, оскільки всі клієнти та інші майстри кешують сертифікат CA та CRL (хоча вони не оновлюють CRL так часто, як слід), але ви не зможете підписувати нові сертифікати, поки ви отримуєте резервну копію основного сайту або відновлюєте головний центр CA із резервних копій на відмовному сайті.

Виберете одного майстра, який буде діяти як КА, а всі інші майстри відключать його:

[main]
    ca_server = puppet-ca.example.com
[master]
    ca = false

Потім вам потрібно, щоб центральна система отримувала весь трафік, пов’язаний із сертифікатом. Для цього є кілька варіантів;

  1. Використовуйте нову SRVпідтримку запису в 3.0, щоб спрямувати всі вузли агентів у потрібне місце для CA -_x-puppet-ca._tcp.example.com
  2. Встановіть параметр ca_serverconfig у puppet.confвсіх агентів
  3. Проксі весь трафік для запитів, пов'язаних з CA, від агентів до правильного майстра. Наприклад, якщо ви працюєте з усіма своїми майстрами в Apache за допомогою Пасажира, то налаштуйте це на не-CA:

    SSLProxyEngine On
    # Proxy on to the CA.
    ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-ca.example.com:8140/$1
    # Caveat: /certificate_revocation_list requires authentication by default,
    # which will be lost when proxying. You'll want to alter your CA's auth.conf
    # to allow those requests from any device; the CRL isn't sensitive.
    

І це повинно це робити.


Перш ніж ми перейдемо до допоміжних служб, бічна примітка;

Імена DNS для основних сертифікатів

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

У розділі 2.7 вам знадобиться загальне ім'я DNS на зразок puppet.example.com, і всі майстри потребують цього у своєму сертифікаті. Це означає, що встановити dns_alt_namesїх конфігурацію, повторно видавати сертифікат, який вони мали до того, як вони були налаштовані як майстер, повторно видали cert знову, коли вам потрібно додати нове ім'я DNS до списку (наприклад, якщо ви хотіли, щоб кілька імен DNS до агенти віддають перевагу майстрам на своєму сайті) .. потворно.

З 3.0 ви можете використовувати SRVзаписи. Віддайте це своїм клієнтам;

[main]
    use_srv_records = true
    srv_domain = example.com

Тоді ніякі спеціальні сертифікати не потрібні для майстрів - просто додайте новий запис у свій SRVRR на _x-puppet._tcp.example.comі ви налаштовані, це живий майстер у групі. А ще краще, ви можете легко зробити логіку вибору майстра більш складною; "будь-який ol 'робочий майстер, але віддайте перевагу тому, що знаходиться на вашому сайті", встановивши різні набори SRVзаписів для різних сайтів; не dns_alt_namesпотрібно.


Звіти / Інформаційна панель

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

[master]
    reports = http
    reporturl = https://puppetdash.example.com/reports/upload

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

Інвентаризація фактів

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

facts_terminus = inventory_service
inventory_server = puppet-ca.example.com
inventory_port = 8140

Встановіть центральний сервер інвентаризації для зберігання даних інвентаризації через ActiveRecord або PuppetDB, і він повинен бути в курсі кожного разу, коли послуга буде доступна.


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


1
+1 для матеріалів CA. Зауважте, що ви можете синхронізувати / контролювати версії всіх приємностей ЦС та просто не активувати жодне з них у лялькових майстрах "в режимі очікування", поки не виникне ситуація з відмовою (в цей момент ви підготуєте біти CA на своєму новому "майстрі" та оновите SRVзапис відповідно - SRVзаписи вважають мене найелегантнішим рішенням, незважаючи на мою загальну
амбіційність

1
@ voretaq7 Це хороший момент - суто встановлення з відмовою було б набагато меншим, ніж такий тип активного / активного розгортання.
Шейн Медден

2
Як додаток, я також внесла оновлення до посібника з масштабування мастерів
Шейн Мадден

8

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

У нашому випадку через природу radmind ми просто rsyncрозшифровуємо стенограми та файли даних від затвердженого майстра на сервері radmind кожного віддаленого сайту, а клієнти витягують свої оновлення з сервера з коротким ім'ям хоста radmind(через магію resolv.confцього оцінюється radmind.[sitename].mycompany.com- завжди локальний Якщо локальний сервер не працює, достатньо легко переосмислити та вказати на будь-який інший сервер сайту).

Такий процес rsync, ймовірно, буде працювати і у вашій ситуації, але він, ймовірно, неоптимальний порівняно з рішенням, заснованим на контролі версій.


Для лялькових або шеф-кухарів система на основі версії має більше сенсу, ніж проста rsync з кількох причин - велика полягає в тому, що ви керуєте версіями маріонеткових сценаріїв (а не цілі образи ОС, як це було б з радіовидом).
Окрім додаткових переваг управління на основі управління версіями, ви можете мати декількох людей, що працюють над репозиторієм одночасно (великий виграш за паралелізм), ви отримуєте історію редакцій по суті безкоштовно, і якщо хтось порушує середовище лялькових, ви маєте легкий відкат (припускаючи, що ви ' Ви знову використовуєте, у gitвас є те, git blameщо робить те, що написано на бляшанці).
Творче розгалуження та об'єднання навіть дозволяють вам здійснити основне оновлення ОС або інший перехід у рамках контролю версій - Після того, як ви це правильно встановите, просто перейдіть на нову гілку і (сподіваємось), виробничий потік буде просто працювати.

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

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


Люди, які працюють у «Мозкові виплати за дерево» , очевидно, поєднували рішення контролю над версією та rsync разом із деякими спеціальними завданнями Capistrano - їх рішення, здається, напівфабрикато в тому сенсі, що воно все ще покладається на елементи ручного робочого процесу, але його можна було б адаптувати та автоматизувати без забагато роботи.
Параноїдний нав'язливий тестер у мені захоплюється їх noopкроком перевірки на здоровий стан - ненависні до мене ручні процеси бажають певного рівня автоматизації навколо нього ...

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