DNS и настройка

Round Robin DNS: как распределить нагрузку сайта между серверами

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

Что вообще значит «round robin»?

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

Например, у домена может быть три A-записи с тремя разными IP. Первый посетитель получит первый адрес, второй — второй, третий — третий, четвёртый — снова первый, и так далее по кругу. В результате нагрузка от посетителей более-менее равномерно размазывается между тремя серверами, хотя формально они все «отвечают» за один и тот же домен.

Зачем это нужно, если сервер и так справляется?

Пока трафика немного, один сервер прекрасно тянет и сайт, и почту, и всё остальное. Но у растущего проекта — интернет-магазина в сезон распродаж, новостного сайта в момент вирусного всплеска, сервиса с тысячами одновременных запросов — один сервер рано или поздно упирается в потолок по процессору, памяти или пропускной способности канала.

Есть два классических пути: сделать один сервер мощнее (вертикальное масштабирование) или добавить ещё серверы и распределить нагрузку между ними (горизонтальное масштабирование). Round Robin DNS — самый простой и дешёвый способ реализовать второй вариант без специального балансировщика нагрузки: настройка укладывается в несколько минут в панели управления DNS-записями.

Как именно это настраивается технически?

Технически ничего экзотического: администратор создаёт для домена не одну A-запись, а несколько — по числу серверов, между которыми нужно распределить нагрузку. Все записи указывают на один и тот же домен, но на разные IP-адреса.

  • Первая A-запись: домен → IP сервера №1
  • Вторая A-запись: домен → IP сервера №2
  • Третья A-запись: домен → IP сервера №3

DNS-сервер при каждом обращении отдаёт список этих адресов, обычно меняя порядок, а операционная система или браузер посетителя чаще всего берёт первый адрес из списка. Так как порядок при каждом запросе разный, разные пользователи фактически подключаются к разным серверам.

А почта тоже так балансируется?

Для почты используется похожий, но отдельный механизм — несколько MX-записей с приоритетами, где почтовые серверы перебираются в порядке приоритета, а не по кругу случайным образом. Чистый round robin для почты почти не применяют, потому что письма важно доставлять предсказуемо, а не «куда повезёт». Поэтому связку A-записей для сайта и MX-записей для почты стоит настраивать раздельно, даже если оба сервиса живут на одном домене.

Клауд АйСи — цифровые сервисы для бизнеса в одном кабинете: создание сайтов под ключ, техподдержка, Умный онлайн-чат, проверка контрагентов и 1С в облаке.
Сайт под ключ — от 20 000 ₽.
Есть бесплатные тарифы на сервисы.

Какие тут есть слабые места?

У Round Robin DNS есть существенный недостаток: сама технология не проверяет, жив ли сервер. Если один из трёх серверов из примера выше упал или завис, DNS всё равно продолжит время от времени отдавать его адрес посетителям — просто потому что запись в зоне никуда не делась. Часть пользователей будет получать ошибку подключения, пока кто-то вручную не уберёт «упавший» IP из списка записей.

Ещё одна особенность — неравномерность распределения. Round robin честно чередует адреса по кругу, но не учитывает, что один сервер уже перегружен, а другой почти свободен: нагрузка при таком подходе распределяется поровну по количеству запросов, а не по реальной мощности серверов или сложности запросов. Для простых сценариев этого достаточно, но для серьёзных высоконагруженных проектов используют более умные решения — специализированные балансировщики нагрузки или облачные сервисы, которые проверяют состояние серверов в реальном времени и убирают из ротации те, что не отвечают.

Есть кэширование DNS — не помешает ли оно балансировке?

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

Чем это отличается от CDN?

Round Robin DNS и CDN (сеть доставки контента) решают немного разные задачи, хотя внешне похожи — оба используют DNS и несколько серверов. Round robin просто чередует адреса нескольких серверов, находящихся, как правило, в одном дата-центре, чтобы разгрузить каждый по отдельности. CDN же обычно распределяет пользователей по географическому принципу, отправляя запрос на ближайший к посетителю сервер, чтобы сократить задержку при загрузке контента, а не только снизить нагрузку. Часто оба механизма комбинируют: CDN подключают через DNS-запись CNAME на инфраструктуру провайдера, а сам провайдер CDN уже внутри своей сети применяет более сложную балансировку, чем простой round robin.

Кому подойдёт такой способ, а кому — нет?

Round Robin DNS хорошо подходит небольшим и средним проектам, где нужно быстро и без больших затрат распределить трафик между двумя-тремя серверами, а лёгкие сбои в виде временной недоступности части адресов не критичны для бизнеса. Это разумный первый шаг перед тем, как вкладываться в полноценные балансировщики нагрузки или облачную инфраструктуру с автоматическим мониторингом серверов.

Для интернет-магазинов, сервисов с высокими требованиями к доступности или проектов, где простой напрямую бьёт по выручке, стоит рассматривать более надёжные варианты — балансировщики с проверкой здоровья серверов, отказоустойчивые кластеры или готовую облачную инфраструктуру, где вопросы масштабирования и доступности берёт на себя провайдер. В «Клауд АйСи» такие задачи закрываются на уровне облачных серверов и хостинга: инфраструктуру можно наращивать по мере роста проекта, а настройку DNS-записей — как для сайта, так и для почты — сделать через понятную панель управления без необходимости самостоятельно разбираться во всех тонкостях балансировки.

Что в итоге стоит запомнить?

Round Robin DNS — простой и доступный способ распределить нагрузку сайта между несколькими серверами с помощью обычных A-записей, без сложного оборудования и специального программного обеспечения. У метода есть ограничения — он не отслеживает состояние серверов и не учитывает их реальную загрузку, поэтому для критичных к доступности проектов его чаще используют как часть более комплексной схемы, а не как единственное решение. Тем не менее для многих сайтов среднего масштаба такой подход остаётся рабочим и недорогим инструментом на этапе роста.

Сайт под ключ и сервисы — в Клауд АйСи

Закажите разработку сайта под ключ и подключите нужные сервисы — онлайн-чат, проверку контрагентов и 1С в облаке.

Частые вопросы

Можно ли настроить Round Robin DNS самостоятельно, без разработчиков?

Да, для этого достаточно доступа к панели управления DNS-записями домена: нужно добавить несколько A-записей с одинаковым именем домена, но разными IP-адресами серверов. Никакого специального программного обеспечения на сервере устанавливать не требуется.

Что будет, если один из серверов в схеме round robin выйдет из строя?

DNS продолжит время от времени отдавать адрес упавшего сервера, потому что сама технология не проверяет доступность серверов. Часть посетителей будет получать ошибку подключения, пока администратор вручную не удалит нерабочий IP из списка A-записей.

Нужно ли менять TTL при настройке балансировки через DNS?

Желательно уменьшить TTL по сравнению со значением для обычного статичного сайта: короткое время жизни записи позволяет быстрее обновлять список серверов у пользователей и промежуточных DNS-серверов и оперативнее реагировать на изменения в инфраструктуре.