Как ведет себя большинство браузеров, если они получают несколько A-записей с DNS-сервера? Придерживайтесь ли вы одного IP-адреса, пока он доступен (и используйте другой, только если IP-адрес не работает)? Или они переключаются все время без причины?
Если большинство нынешних браузеров придерживаются одного IP, DNS-RR будет достаточно для меня, как простое решение для восстановления после отказа.
Ответы:
У каждого браузера есть свой собственный метод обработки циклического DNS, я провел сегодня некоторое время, исследуя эту проблему, и буду продолжать обновлять свой ответ, когда найду подтверждение реализации, которое ограничит мои ответы браузерами, раскрывающими их поведение.
Гугл Хром
Google Chrome (используется v58) запросит все записи хоста для адреса (A, AAAA, CNAME) и поместит их в массив ( address_list ). Затем Chrome попытается открыть сокет на каждом IP-адресе в порядке от первого к последнему, Chrome не будет пытаться использовать самый быстрый или ближайший IP-адрес, он предполагает, что первый IP-адрес (предоставленный вашими исходящими средствами разрешения DNS) является лучшим IP-адресом. В моих тестах серверы bind и windows dns выделяли разные IP-адреса для каждого поиска, давая каждому 50-процентное разделение полосы пропускания. Эта функциональность выставлена в
chrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
У Curl также есть эта функция
--connect-timeout
переключения при отказе, но она намного длиннее, чем по умолчанию в Chrome, Chrome переключается сразу же, Curl - нет. Если вы используете libcurl и хотите выжить в циклическом экземпляре DNS, когда один IP-адрес не работает (работает в chrome, но не в коде), обязательно укажите это значение ниже.DEFAULT_CONNECT_TIMEOUT: 0 заставил меня думать, что это невозможно с curl.
* After 149990ms connect time, move on!
В обоих браузерах IP не был привязан , они следовали TTL, заданному в DNS, и после истечения времени ttl (Chrome поддерживает это внутренне, запросы curl запрашиваются при каждом запросе), выбор ip выполняется каждый раз, как описано выше.
Что это значит? DNS-RR подходит для некоторых систем, но он не предназначен для восстановления после отказа. Следует ожидать, что все результаты поиска DNS являются (источником правды) действительными и доступными для обслуживания трафика. Существует много способов обеспечения доступности IP-адресов, таких как виртуальные плавающие IP-адреса, приемы BGP / Routing и т. Д. Используйте их .
Все тесты, выполненные только в среде IPv4, будут возвращаться с результатами с двумя стеками, как только будет доступно достаточно инфраструктуры для тестирования.
Я предполагаю, что эти изменения являются побочным эффектом Happy Eyeballs IPv6-Fallback RFC
Обновление Полезно учитывать, что DNS RR может помочь только с балансировкой нагрузки, а не со сбоями приложений, если у одного из ваших узлов 503, вы будете обслуживать 40-60%, если ваш трафик 503. Предполагается, что все перечисленные IP-адреса являются действительными рабочими конечными точками, если они достижимы.
источник
редактировать: редактирование моего ответа, так как HiPerFreak обучил меня.
DNS-серверы вернут список всех записей A, которые он имеет для данного имени хоста. То, что входит в циклический перебор, заключается в том, что он вращается по порядку списка. Ссылка, размещенная на сайте, является отличным примером того, как веб-браузеры будут использовать этот список.
Round Robinning можно использовать для очень примитивной формы балансировки нагрузки, но это очень плохая замена для реальной балансировки нагрузки, так как если один из хостов в циклическом циклическом переключении выйдет из строя, DNS-сервер не будет мудрым и все равно поместите IP-адрес сбитого узла в список.
источник
Посмотрите на мой вопрос (и ответ): как браузеры обрабатывают несколько IP-адресов .
Коротко - круговой робин днс вообще не улучшает доступность. Браузер выбирает один IP и придерживается его, даже если он не отвечает. (Проверено с FF и хромом).
По истечении срока действия DNS-кэша браузера имя хоста разрешается снова, и процесс повторяется, независимо от того, ответил IP или нет.
Для базового HA вы можете использовать динамический DNS или различные подходы на основе IP.
РЕДАКТИРОВАТЬ: Это поведение будет иметь место, когда недоступный хост действует как «черная дыра». Если вместо этого хост принудительно отклоняет входящие соединения, браузер попытается использовать один IP-адрес, получит отказ и сразу же использует другой IP-адрес, и, таким образом, он достаточно хорошо переключится.
источник
Они переключают IP-адреса, это не отказоустойчивое решение.
Браузеры позволяют ОС разрешать имена, и, например, Linux всегда рандомизирует IP-адреса, попробуйте хост google.com несколько раз. IP будут приходить в случайном порядке.
источник
DNS возвращает все IP-адреса в списке, но они изменяют порядок списка, и этот порядок не является случайным или изменяется при сбое 1, но они всегда возвращают IP-адреса в той же последовательности по причинам балансировки нагрузки. Когда браузер получает список, я предполагаю, что он выбирает 1-й в списке, если он не известен как нерабочий.
источник