image

Привет, Хабр! Представьте себе мир без катастроф — без каскадного резонанса и сдвига полюсов. Ах, сладкий сон. В реальной жизни такое невозможно: закон Мерфи живее закона Мура. Однако всё иначе в квантовом мире ИТ.

Сегодня мы поговорим о балансировке нагрузки и отказоустойчивости. Решаем эту задачу с помощью 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.

image

Когда 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

Комментарии (2)


  1. sunnybear
    24.11.2022 22:54
    +1

    Локальный DNS кэш 15 минут? Нет, не слышали (c)


  1. FD254
    25.11.2022 13:30

    Подскажите, а вы его только в виде сервиса предоставляете или можете выложить исходиники-бинарники ?