- PVSM.RU - https://www.pvsm.ru -
В этой статье я хочу показать, как легко и бесплатно можно сделать failover схему для веб-сайта (или любого другого интернет-сервиса) на комбинации мониторинга okerr [1] и динамического DNS сервиса. То есть, в случае любых проблем с основным сайтом (начиная от проблемы с «PHP Error» на странице, и до нехватки места или просто подозрительно малом числе заказов в случае интернет-магазина), новые посетители будут направлены на второй (третий, и так далее) заведомо работающий сервер, или же на «Sorry» страничку, где им вежливо объяснят, что «есть проблема, мы уже в курсе и уже чиним, скоро починим» (а вы в этом случае на самом деле будете уже в курсе и сможете чинить).
Пока не случится какая-то проблема — разницы особой нет. А вот когда случится, то без failover'а часто происходит следующее: вы пытаетесь быстро разобраться, в чем проблема, не получается (бэкапы не разворачиваются, софт почему-то не работает как ему следует из документации, итд), а времени нет, сервера-сайты лежат, клиенты звонят, все на нервах, пытаетесь как-то починить грубо и грязно «на скотче», потом как-то вроде запускается с костылями и живет. Вы думаете, что на досуге надо будет подробнее разобраться и переделать все красиво, но нет ничего более постоянного, чем временное.
Теперь, как это происходит в красивом варианте с файловером:
В этой схеме, конечно тоже могут возникнуть свои запердыки, но все таки, схема линейная, каждый этап тут простой и главное — его можно отладить отдельно, поэтому шанс сбоя этой схемы гораздо ниже, а все действия могут быть автоматизированы и исполняться быстро (в отличие от задачи найти и исправить неведомую епическую хрень). Ваш самолет приземлился в далекой стране, вы включаете телефон и видите в телеграмме уведомление, что сервер упал, но все хорошо, активировался резервный сервер, вы можете продолжать свою поездку, вам не нужно ни лететь назад, ни чинить по SSH из ближайшего кафе с WiFi. Разберетесь тогда, когда будет удобнее.
Раньше, основная проблема, которая делала failover часто неприемлемым решением заключалась в сумме затрат на него. Либо нужно было покупать дорогие железяки (и приглашать еще более дорогих специалистов). Либо колхозить что-то сложное по гайдам (мне попадался даже вариант, когда два сервера связываются дополнительно нуль-модемным кабелем, и гоняют по нему heartbeat, чтобы в нужный момент запасной сервер узнал, и перехватил управление). Сейчас есть способы проще и бесплатные. Если у вас есть сайт с котиками — нет вам оправдания, если вы еще не реализовали для него failover!
Ну и кроме того, для failover схемы нужен еще сервер (а может быть и не один) и раньше это было большими затратами, сейчас можно взять VDSку за копейки.
Для практической иллюстрации решения с okerr + dynamic dns мы запустили свой сайт с котиками cat.okerr.com [2]. Котиков мы ненавидим, поэтому их там почти не будет. Всего есть три сайта, каждый выглядит примерно одинаково (все на одном шаблоне), но с разными котятами чтобы было легко отличить, и каждый пишет техническую информацию, чтобы увидеть, как работает failover. Страничка обновляется сама раз в 1 минуту, но всегда можно нажать reload в браузере.
В технической информации есть строчка “status=OK”. Иногда сервера симулируют проблемы и пишут status=ERR. Главный сервер “как бы падает” в 20 минут каждого часа (0:20, 1:20, 2:20, ...). Запасной (backup) сервер в 40 минут. Последний сервер (“sorry”-сервер) работает всегда. В 0 минут каждого часа, основной и запасной сервер “восстанавливаются”.
Если вы откроете сайт, и оставите его во вкладке — увидите, что он никогда не падает (хотя каждый отдельный сервер периодически симулирует проблему), а в случае проблемы с сервером, просто “бегает” между живыми серверами. Будет меняться картинка, имя и адрес сервера и его роль. Иногда можно поймать момент когда status=ERR (проблема уже есть, но вся схема failover еще не отработала), но уже следующее обновление покажет вам страничку с рабочего сайта.
Посмотрим, как это устроено под капотом. Задача файловера в том, чтобы адрес cat.okerr.com всегда указывал на IP адрес рабочего сервера.
За каждым из серверов, которые держат наш котосайт в okerr есть индикатор, который раз в минуту проверяет его состояние.
На этом скрине мы видим, как проверяется сайт cat.okerr.com с сервера alpha.okerr.com. Страничка должна содержать status=OK, и как мы видим наверху, статус индикатора у нас сейчас OK. Когда сервер “поломается”, будет ERR. (Это только один пример индикатора, окерр — это мониторинг, поэтому можно прилепить любой тип индикатора, например, проверять свободное место на диске, количество новых заказов в базе, и даже логические индикаторы, например, ночью будут одни критерии ошибки, а днем другие).
В настройках проекта мы создали failover схему с этими индикаторами:
В схеме три индикатора (три сервера), разные по приоритетам. Главный сервер для сайта — charlie, если он не работает (не будет “status=OK” или просто недоступен), то bravo и в последнем случае — alpha. В правой части страницы показывается состояние DNS записи на разных серверах.
Для тех, кто заметил, что используется имя cat.he.okerr.com: Мы используем схему чуть сложнее. Вместо того, чтобы просто изменять DNS запись cat.okerr.com, мы изменяем cat.he.okerr.com (на Dynamic DNS провайдере Hurricane Electric [3]), а cat.okerr.com — это CNAME (алиас), который не меняется, всегда указывает на cat.he.okerr.com. Hurricane нам просто нравится больше в качестве динамического DNS, и у него есть ключи для управления отдельной записью (а не всей зоной), нам это кажется безопаснее. Вы можете тоже не указывать в okerr пароли-ключи для управления всем доменом, а только для поддомена или записи.
По шагам, как работает эта схема:
Чтобы 7 этап (часто — самый долгий) ускорить, TTL динамической DNS записи нужно установить как можно ниже. Обычно сервисы позволяют интервалы 90-120 секунд. Это вполне разумный компромисс.
Все это можно настроить за вечер (если у вас уже есть дублирующий сервер). И okerr и сервисы динамического DNS бесплатны. Чтобы получить в okerr больше проверок и короче период проверки нужно пройти тренинг (со страницы профиля). По прохождению сразу же повышается уровень (20 индикаторов по часу + 1 быстрый, 10 минутный). А если их будет мало — напишите на support@okerr.com, скорее всего можно будет повысить (пока что всегда была возможность, ни разу не отказывал, наоборот, сам предлагал). Просто изначально я не хочу обещать всем всё, не уверен, что хватит мощностей, чтобы сдержать слово. Но пока пользователей мало, так что с повышением лимитов проблем нет.
Что может okerr вообще — посмотрите на сайте презентацию [4]. Вообще, это мониторинг (zabbix из облака), а файловер — это приятная доп.функция. Также с сайта можно без регистрации зайти в демо.
При изменении состояния индикатора — отсылается уведомление на почту или Telegram. (Мы тут посмотрели что происходит, и поняли, что, похоже, telegram — самый надежный мессенджер. Спасибо РКН за стресс-тест!) При правильной настройке okerr, любое уведомление — это либо сигнал “бросайте все, надо чинить!”, либо “отбой!”. Лишних алертов от окерра быть не должно (если они есть — надо настраивать как-то иначе). Например, для нашего котосайта сервер alpha последний и никогда не имитирует ошибку. Если он ляжет — мы должны знать. А вот остальные сервера постоянно симулируют ошибки, поэтому, чтоб не получать алерты несколько раз в час, у тех индикаторов стоит статус “тихий”.
Имеет смысл также сделать sorry-сервер (на любом самом дешевом
Автор: xenon
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dns-2/281270
Ссылки в тексте:
[1] okerr: https://okerr.com/
[2] cat.okerr.com: https://cat.okerr.com/
[3] Hurricane Electric: http://he.net/
[4] презентацию: https://okerr.com/presentation.html
[5] хостинге: https://www.reg.ru/?rlink=reflink-717
[6] cp.okerr.com/status/okerr: https://cp.okerr.com/status/okerr/
[7] Источник: https://habr.com/post/359372/?utm_campaign=359372
Нажмите здесь для печати.