Round robin DNS

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

DNS с циклическим перебором — это метод балансировки нагрузки или отказоустойчивости, за счет избыточного количества серверов, осуществляемый путем управления ответами DNS-сервера в соответствии с некоторой статистической моделью. Обычно применяется к интернет-серверам, таким как веб-серверы и FTP-серверы.

В простейшем случае циклический DNS работает, отвечая на запросы не только одним IP-адресом, но и списком из нескольких адресов серверов, предоставляющих одну и ту же услугу.   Порядок возврата IP-адресов из списка основан на циклическом алгоритме. С каждым ответом последовательность IP-адресов меняется. Обычно простые клиенты будут пытаться установить соединения с первым адресом в списке, поэтому разные клиенты будут получать адреса от разных серверов, которые будут распределять общую нагрузку между серверами.

Не существует стандартной процедуры определения того, какие адреса будут использоваться запрашивающим приложением — некоторые серверы пытаются изменить порядок списка, отдавая приоритет численно «более близким» сетям. Некоторые клиенты для настольных компьютеров пытаются получить альтернативные адреса после сбоя соединения в течение 30–45 секунд.

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

Хотя циклический DNS (RR DNS) легко реализовать, алгоритм имеет несколько проблемных недостатков, связанных с самим кэшем иерархических записей RR DNS, а также с кэшированием опубликованного адреса на стороне клиента и его повторным использованием, сочетание которых затруднено управлять RR DNS не зависит от доступности сервиса. Например, если служба по одному из адресов недоступна, RR DNS продолжит раздавать этот адрес, а клиенты продолжат попытки подключиться к нижестоящему серверу.

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

Существуют методы преодоления таких ограничений, например, модифицированные DNS-серверы (например, lbnamed) могут регулярно опрашивать зеркальные серверы, чтобы проверить их доступность и загрузку. Если сервер не отвечает должным образом, его можно временно удалить из пула DNS до тех пор, пока он не сообщит, что снова работает в рамках спецификации.