hostprofi.ru
Подобрать хостинг
Термин·буква R

Round-robin DNS

краткое определение

Round-robin DNS — метод распределения нагрузки на уровне DNS: для одного домена создаются несколько A-записей с разными IP. DNS-резолверы возвращают их в ротации, и разные клиенты подключаются к разным серверам. Простейший вариант балансировки без выделенного балансировщика.

Round-robin DNS — механизм балансировки нагрузки, реализованный на уровне DNS. Для одного доменного имени регистрируется несколько A-записей с разными IP-адресами. При каждом DNS-запросе резолвер возвращает список IP в изменяющемся порядке — клиенты используют первый адрес из списка, и таким образом нагрузка распределяется между серверами.

Как работает

Настройка: три сервера с адресами 203.0.113.1, 203.0.113.2, 203.0.113.3 — в DNS для example.com создаются три A-записи:

example.com.  300  IN  A  203.0.113.1
example.com.  300  IN  A  203.0.113.2
example.com.  300  IN  A  203.0.113.3

Первый клиент получит [1,2,3], второй — [2,3,1], третий — [3,1,2] и т.д. Клиент подключается к первому IP в списке. TTL короткий (60-300 сек) для быстрой смены при отказе сервера.

Ограничения: DNS-резолверы кэшируют ответ на TTL, поэтому все запросы в течение TTL с одного резолвера уходят на один IP. Большинство корпоративных и операторских резолверов обслуживают тысячи пользователей — они кэшируют ответ, и распределение нагрузки происходит между резолверами, а не между пользователями. Для нескольких крупных пользователей это неравномерно.

DNS round-robin не определяет состояние серверов: если один сервер упал, DNS продолжает возвращать его IP. Часть клиентов будет получать ошибку соединения. Некоторые браузеры и HTTP-клиенты перебирают IP из списка при отказе первого (Happy Eyeballs, RFC 8305 — для IPv4/IPv6), но это не универсально.

История

Round-robin DNS описан IETF в RFC 1794 (1995) как техника горизонтального масштабирования. Использовался крупными сайтами (включая ранний Google до 2001 года) до появления аппаратных балансировщиков нагрузки. С распространением L4/L7-балансировщиков и CDN round-robin DNS стал нишевым инструментом для простых случаев.

Round-robin DNS vs другие методы балансировки

МетодHealth checkSticky sessionsСложность
Round-robin DNSНетНетМинимальная
Балансировщик L4 (HAProxy, LVS)ДаДа (IP hash)Средняя
Балансировщик L7 (nginx, Traefik)ДаДа (cookie)Средняя-высокая
CDN AnycastДаЗависит от провайдераМинимальная для клиента

На что обращать внимание

Round-robin DNS подходит для распределения статических файлов, где sticky sessions не нужны. Для динамических приложений с сессиями (корзина в интернет-магазине, авторизация) без липких сессий пользователи будут терять состояние при переключении между серверами. Мониторинг каждого IP в ротации — обязателен, иначе отказ одного сервера незаметен. Низкий TTL (60-300 сек) позволяет быстро убрать отказавший IP, но повышает нагрузку на DNS-инфраструктуру.

Типичные ошибки при использовании Round-robin DNS

Первая ошибка — считать Round-robin DNS заменой полноценному балансировщику нагрузки: DNS не проверяет доступность серверов. При отказе одного IP часть пользователей продолжает получать «мёртвый» адрес до истечения TTL. Вторая ошибка — высокий TTL при RR DNS: TTL должен быть 60–300 секунд, чтобы смена IP вступила в силу быстро. Третья ошибка — не учитывать кэширование на стороне клиента: браузеры кэшируют DNS независимо от TTL (Chrome — до 1 минуты). Для полноценного health-check используйте HAProxy, Nginx upstream или GeoDNS.

Другие термины