DNS балансировка позволяет равномерно распределять запросы по нескольким серверам при запросе к домену без использования балансировщиков. Балансировка достигается за счет добавления нескольких DNS записей типа А.
Решение применяется при горизонтальном масштабировании приложений — дублировании проекта на другом сервере (вертикальное и горизонтальное масштабирование).
Схему иногда называют Round robin DNS пул — она подразумевает существование проекта на минимум двух серверах. Например, на серверах с IP адресами: 123.123.123.123 и 123.123.123.124
Балансировка нагрузки за счет записей DNS
После дублирования проекта задается вторая запись DNS
site.ru A 123.123.123.123
site.ru A 123.123.123.124
Запросу к сайту при этом будут распределяться равномерно, создаваемая нагрузка уменьшится вдвое.
Данный способ является самым простым решением при необходимости балансировки и не требует каких-либо настроек как при использовании HAProxy или Nginx.
Использование Round robin DNS пулов имеет свои минусы:
- нет геолокации клиентов
- нет возможности проверки статуса бэкенда. Если один из серверов вышел из строя запросы на него будут продолжать отправляться
- необходимо каким-то образом организовывать синхронизацию данных. В том числе сессий РНР поскольку запросы пользователя при двух последовательных обращениях с большой долей вероятности будут обработаны разными серверами
- нельзя строить логику распределения запросов и управлять весами — приоритетами. Такая возможность есть для почтового трафика за счет задания метрик DNS записей
Практически все перечисленные проблемы (помимо синхронизации) можно решить применяя в качестве DNS сервера пакет GDNSD, он предлагает:
- geoIP — функционал, используемый для отслеживания источников запросов
- проверку статуса сервера при помощи отправки UDP TCP запросов с определенной периодичностью
Для использования GDNSD нужен маленький TTL чтобы поддерживать динамичность. Негативное последствие при этом — увеличение трафика на DNS сервера поскольку запросы пользователей происходят чаще.
Отключение серверов, которые перестали быть доступны, можно реализовать за счет автоматизированной смены DNS записей через API. Проверки доступности может осуществляться мониторингом, который на основе поступающих данных будет принимать решение об отключении определенных бэкендов за счет удаления DNS записей.
DNS балансировка возможна на любое количество серверов. Её активно применяют сервисы, осуществляющие фильтрацию веб трафика для сайтов.