
Привет, Хабр! Представьте себе мир без катастроф — без каскадного резонанса и сдвига полюсов. Ах, сладкий сон. В реальной жизни такое невозможно: закон Мерфи живее закона Мура. Однако всё иначе в
Сегодня мы поговорим о балансировке нагрузки и отказоустойчивости. Решаем эту задачу с помощью GSLB (global server load balancing). В случае падения соединения или полного отказа ЦОДа сервис GSLB перенаправит ваших пользователей к доступному дата-центру.
Как сделать собственный DNS-балансировщик
Есть несколько глобальных сервисов, которые обеспечивают высокую доступность дата-центров. Однако для российских пользователей выбор невелик. Задумав сделать собственный балансировщик, мы решали следующие задачи:
- автоматически перенаправлять трафик в резервный ЦОД или облако;
- проверять показатели «здоровья» серверов при перенаправлении трафика.
Мы сделали форк на базе open source проекта Polaris-GSLB, а экспериментальным путем установили, что решение нам не подходит. На нагрузочных тестах проверка доступности серверов выходила за указанные в настройках временные параметры. Проблема в том, что Polaris написан на Python, который в мониторинговой части использует треды. Как треды работают при больших нагрузках — отдельная история. Что касается GSLB, мы нашли выход: переписали всё на Golang и уменьшили в два-три раза количество ресурсов, которое требуется на площадку для мониторинга.
В качестве DNS сервера используем PowerDNS, для которого написали кастомный бэкенд. Балансировка на уровне DNS не требует никаких особых настроек. К тому же это быстрое, надежное и проверенное временем решение.
Мы используем два алгоритма балансировки.
- Weighted Round Robin — усовершенствованная версия алгоритма Round Robin, в котором нагрузка распределяется равномерно, с учетом одинаковой вычислительной мощности серверов. Пользователь задает серверам веса в зависимости от вычислительной мощности. Тем самым нагрузка распределяется гибче: серверы с большим весом обрабатывают больше запросов.
- Failover group — смотрит на вес сервера и возвращает всегда сервер с наивысшим приоритетом до тех пор, пока он станет недоступен.
Как работает GSLB
Сервис состоит из нескольких модулей.
- DNS-сервер
Отвечает на запрос клиента «какой IP-адрес у сайта example.com?», например, 89.22.165.223.
- Мониторинг доступности
Active Monitoring в заданный интервал времени опрашивает узел по IP-адресу. Проверка доступности узлов идет по протоколам HTTP, HTTPS или TCP.

Когда DNS-сервер получает запрос от клиента (например, «какой IP-адрес у example.com?»), GSLB уже знает статус доступности ЦОДа. Клиенту не вернется IP-адрес выключенного узла. GSLB принимает решение о доступности ЦОДа в зависимости от интервалов и количества Liveness probes, которые указал пользователь.
ЦОДы могут работать в режиме active-active (трафик распределяется по ним равномерно) или по конфигурации active-passive, когда один из ЦОДов постоянно находится в статусе основного (active), а второй резервный (standby) и ждет поступления трафика.
Кейс: как работает сетевая балансировка у клиента
Клиент — финансовая компания, сайт которой размещается в двух ЦОДах: первый находится в активном состоянии, а второй — в резервном. Одно из ключевых требований к архитектуре — надежность. Пользователи должны всегда иметь возможность подключиться к сайту.
Клиент подключил правило балансировки GSLB в #CloudMTS, настроил домен, целевую группу из двух узлов, выбрал алгоритм Failover Group.
В нормальном режиме весь трафик поступает только на активный ЦОД. В случаи аварии и недоступности основного ЦОДа, GSLB весь трафик перебрасывает на резервный ЦОД.
Как подключить GSLB
GSLB повышает отказоустойчивость сервисов и обеспечивает доступность дата-центров, где бы они не были. Услуга предоставляется не только клиентам облака #CloudMTS. Это могут быть ваши собственные площадки или площадки других облачных провайдеров.
У сервиса простая настройка: прописать правила через веб-интерфейс, нажать кнопку «Подключить» и добавить NS записи для поддомена для перенаправления DNS запросов на серверы GSLB.
Далее мы рекомендуем провести disaster-recovery тестирование: отключить один ЦОД и проверить, что переключение DNS отработало нормально.
Подключить GSLB можно через сайт.
За облачными новостями заходите в Telegram-канал #CloudMTS
