Простий failover для вебсайту (моніторинг + динамічний DNS)

У цій статті я хочу показати, як легко та безкоштовно можна зробити failover схему для веб-сайту (або будь-якого іншого інтернет-сервісу) на комбінації моніторингу okerr та динамічного DNS сервісу. Тобто, у разі будь-яких проблем з основним сайтом (починаючи від проблеми з «PHP Error» на сторінці, і до нестачі місця або просто підозріло малої кількості замовлень у разі інтернет-магазину), нові відвідувачі будуть направлені на другий (третій, і так далі) свідомо працюючий сервер, або ж на «Sorry» сторінку, де їм чемно пояснять, що «є проблема, ми вже в курсі і вже лагодимо, скоро полагодимо» (а ви в цьому випадку насправді будете вже в курсі і зможете лагодити).

Жити з failover чи без?

Поки що не станеться якась проблема — різниці особливої ​​немає. А ось коли трапиться, то без failover'а часто відбувається таке: ви намагаєтеся швидко розібратися, в чому проблема, не виходить (бекапи не розвертаються, софт чомусь не працює як випливає з документації, ітд), а часу немає, сервера -Сайти лежать, клієнти дзвонять, все на нервах, намагаєтеся якось полагодити грубо і брудно «на скотчі», потім якось начебто запускається з милицями і живе. Ви думаєте, що на дозвіллі треба буде детальніше розібратися і переробити все красиво, але немає нічого постійного, ніж тимчасове.

Тепер, як це відбувається в гарному варіанті з файловером:

  • Помилка трапляється
  • Помилка виявляється автоматично
  • Розсилається оповіщення
  • Переводиться переключення на один із резервних серверів
  • Спокійно і без паніки розуміється проблема, виправляється і сервер знову вводиться в дію.

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

Майбутнє вже тут!

Раніше основна проблема, яка робила failover часто неприйнятним рішенням, полягала в сумі витрат на нього. Або треба було купувати дорогі залізяки (і запрошувати ще дорожчих спеціалістів). Або колгоспити щось складне по гайдах (мені траплявся навіть варіант, коли два сервери зв'язуються додатково нуль-модемним кабелем, і ганяють по ньому heartbeat, щоб у потрібний момент запасний сервер дізнався, і перехопив управління). Зараз є способи простіші та безкоштовні. Якщо у вас є сайт з котиками - немає виправдання, якщо ви ще не реалізували для нього failover!

Ну і крім того, для failover схеми потрібен ще сервер (а може бути і не один) і раніше це було великими витратами, зараз можна взяти VDSку за копійки.

Найнадійніший сайт з котиками

Для практичної ілюстрації рішення з okerr+dynamic dns ми запустили свій сайт з котиками cat.okerr.com. Котиків ми ненавидимо, тож їх там майже не буде. Усього є три сайти, кожен виглядає приблизно однаково (все на одному шаблоні), але з різними кошенятами, щоб було легко відрізнити, і кожен пише технічну інформацію, щоб побачити, як працює failover. Сторінка оновлюється сама раз на 1 хвилину, але можна натиснути reload в браузері.

У технічної інформації є рядок "status = OK". Іноді сервери симулюють проблеми та пишуть status=ERR. Головний сервер "як падає" в 20 хвилин кожної години (0:20, 1:20, 2:20, ...). Запасний (backup) сервер у 40 хвилин. Останній сервер (sorry-сервер) працює завжди. В 0 хвилин кожної години, основний та запасний сервер "відновлюються".

Простий failover для вебсайту (моніторинг + динамічний DNS)

Якщо ви відкриєте сайт, і залишите його у вкладці - побачите, що він ніколи не падає (хоча кожен окремий сервер періодично симулює проблему), а у випадку проблеми із сервером просто "бігає" між живими серверами. Змінюватиметься картинка, ім'я та адреса сервера та його роль. Іноді можна спіймати момент, коли status=ERR (проблема вже є, але вся схема failover ще не відпрацювала), але вже наступне оновлення покаже вам сторінку з робочого сайту.

Failover на okerr + dynamic DNS

Подивимося, як це влаштовано під капотом. Завдання файловера в тому, щоб cat.okerr.com завжди вказував на IP адресу робочого сервера.
За кожним із серверів, які тримають наш котосайт у okerr, є індикатор, який раз на хвилину перевіряє його стан.

Простий failover для вебсайту (моніторинг + динамічний DNS)

На цьому скрині ми бачимо, як перевіряється сайт cat.okerr.com із сервера alpha.okerr.com. Сторінка має містити status=OK, і як ми бачимо нагорі, статус індикатора у нас зараз OK. Коли сервер “зламається”, буде ERR. (Це тільки один приклад індикатора, окер - це моніторинг, тому можна приліпити будь-який тип індикатора, наприклад, перевіряти вільне місце на диску, кількість нових замовлень в базі, і навіть логічні індикатори, наприклад, вночі будуть одні критерії помилки, а вдень інші) .

У налаштуваннях проекту ми створили схему failover з цими індикаторами:

Простий failover для вебсайту (моніторинг + динамічний DNS)

У схемі три індикатори (три сервери), різні за пріоритетами. Головний сервер для сайту – charlie, якщо він не працює (не буде “status=OK” або просто недоступний), то bravo і в останньому випадку – alpha. У правій частині сторінки відображається стан запису DNS на різних серверах.

Для тих, хто помітив, що використовують ім'я cat.he.okerr.com: Ми використовуємо схему трохи складніше. Замість того, щоб просто змінювати запис DNS cat.okerr.com, ми змінюємо cat.he.okerr.com (на Dynamic DNS провайдері Ураган електричний), а cat.okerr.com – це CNAME (аліас), який не змінюється, завжди вказує на cat.he.okerr.com. Hurricane нам просто подобається більше як динамічний DNS, і він має ключі для управління окремим записом (а не всією зоною), нам це здається безпечнішим. Ви також можете не вказувати в okerr паролі-ключі для управління всім доменом, а тільки для піддомена або запису.

Від падіння до підняття

За кроками, як працює ця схема:

  1. Трапляється (симулюється) проблема на сервері
  2. Сенсор okerr раз на хвилину перевіряє стан кожного сервера і повідомляє головний сервер проекту в okerr
  3. Індикатор відповідного сервера змінює стан OK на ERR
  4. При зміні статусу індикатора, що перераховується failover, обчислюється, яку адресу потрібно встановити (якщо потрібно. Наприклад, якщо працює основний сервер, а в цей час помер запасний — жодних змін не буде)
  5. Ця адреса повідомляється в службу dynamic dns. Після завершення цього етапу праворуч ви побачите статус “synced”
  6. Незабаром (секунди) запис дійде до DNS серверів вашого домену (у котосайту це ns1-ns5.he.net).
  7. Починаючи з цього моменту, деякі користувачі вже потраплятимуть на новий живий сервер. Але ще не всі DNS сервери у світі оновили записи, і десь ще може бути закешований колишній запис. Можна побачити, як дані на публічних DNS серверах "танцюють", показуючи то нове, то старе значення. Якщо оновити сторінку налаштування failover, окер сам запросить нові дані з DNS серверів.
  8. Після того, як дані стабілізувалися, старий кешований запис скрізь протух — усі 100% запитів йдуть на новий сервер.

Щоб 7 етап (часто найдовший) прискорити, TTL динамічного DNS запису потрібно встановити якомога нижче. Зазвичай послуги дозволяють інтервали 90-120 секунд. Це цілком розумний компроміс.

Додатково

Все це можна налаштувати за вечір (якщо у вас вже є сервер, що дублює). І okerr та сервіси динамічного DNS безкоштовні. Щоб отримати в okerr більше перевірок і коротше період перевірки, потрібно пройти тренінг (зі сторінки профілю). По проходженню відразу підвищується рівень (20 індикаторів за годиною + 1 швидкий, 10 хвилинний). А якщо їх буде мало - напишіть на [захищено електронною поштою]швидше за все можна буде підвищити (поки що завжди була можливість, жодного разу не відмовляв, навпаки, сам пропонував). Просто спочатку я не хочу обіцяти всім, не впевнений, що вистачить потужностей, щоб стримати слово. Але поки що користувачів мало, так що з підвищенням лімітів проблем немає.

Що може okerr взагалі - подивіться на сайті презентацію. Взагалі, це моніторинг (zabbix з хмари), а файловер - це приємна додаткова функція. Також із сайту можна без реєстрації зайти в демо.

При зміні стану індикатора — надсилається повідомлення на пошту або Telegram. (Ми тут подивилися що відбувається, і зрозуміли, що, схоже, telegram - найнадійніший месенджер. Дякуємо РКН за стрес-тест!) При правильному налаштуванні okerr, будь-яке повідомлення - це або сигнал "кидайте все, треба лагодити!", або " відбій!”. Зайвих алертів від окерра не повинно бути (якщо вони є — треба налаштовувати якось інакше). Наприклад, для нашого сайту сервер alpha останній і ніколи не імітує помилку. Якщо він ляже — ми маємо знати. А ось інші сервери завжди симулюють помилки, тому, щоб не отримувати алерти кілька разів на годину, у тих індикаторів стоїть статус "тихий".

Має сенс також зробити sorry-сервер (на будь-якому найдешевшому хостингу), який буде мати вашу сторінку вибачень (на випадок, якщо всі основні та запасні сервери будуть лежати) або перекине на сторінку статусу на okerr (ось наприклад наша cp.okerr.com/status/okerr) або statuspage.io.

Джерело: habr.com

Додати коментар або відгук