DNS балансировка, балансировка нагрузки DNS

Популярным решением при росте проекта и нехватке ресурсов используемого сервера является горизонтальное масштабирование — дублирование проекта на другом сервере и распределение запросов при помощи задания нескольких А-записей DNS.

 

Схему иногда называют Round robin DNS пул — она подразумевает существование проекта на двух серверах, например, на серверах с IP адресами: 91.226.81.76 и 91.226.81.77

 

 

Балансировка нагрузки за счет записей DNS

 

После дублирования проекта задается вторая запись DNS

site.ru     A     91.226.81.76

site.ru     A     91.226.81.77

 

Запросу к сайту при этом будут распределяться равномерно, создаваемая нагрузка уменьшится вдвое.

 

DNS балансировка, балансировка нагрузки DNS
 

Данный способ является самым простым решением при необходимости балансировки и не требует каких-либо настроек как при использовании HAProxy или Nginx.

 

Использование Round robin DNS пулов имеет свои минусы:

 

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

 

 

Практически все перечисленные проблемы (помимо синхронизации) можно решить применяя в качестве DNS сервера пакет GDNSD, из коробки предлагающий:

  • geoIP — функционал, используемый для отслеживания источников запросов
  • проверка статуса сервера при помощи отправки UDP TCP запросов с определенной периодичностью

 

Для использования GDNSD нужен маленький TTL чтобы поддерживать динамичность — негативное последствие при этом — увеличение трафика на DNS сервера поскольку запросы пользователей происходят чаще.