DNS Round Robin: Чи дотримуються браузери однієї IP-адреси, доки він є в Інтернеті?


14

Як поводиться більшість браузерів, якщо вони отримують кілька D-записів з DNS-сервера? Чи дотримуєтесь однієї IP-адреси до тих пір, поки вона доступна (а інша використовуйте лише, якщо IP-адреса знижена)? Або вони весь час перемикаються без причини?

Якщо більшість поточних браузерів дотримуються однієї IP-адреси, DNS-RR мені вистачить як просте рішення про відмову.


1
Я не можу відповісти на ваше запитання безпосередньо, але зазначу вам, що вам доведеться мати справу з кешуванням як на браузері, так і на рівні ОС! Веселіться :)
SpacemanSpiff


1
@Iain - Awesome link
SpacemanSpiff

Скільки у вас машин для бекенда? Якщо з 2 машинами з активно-пасивною системою все в порядку, отримайте третю IP-адресу та використовуйте серцебиття, щоб перейти з неї між фізичними машинами. Крім того, я думаю, що ультрамодуль підтримує присвоєння пакетам на основі вихідного IP, що майже те саме, що і окремий клієнт. Ви, ймовірно, могли також щось зламати разом, встановивши для кожного бекенда унікальний файл cookie та встановивши проксі-сервер веб-сервера frontend для створення резервного файлу залежно від файлу cookie. (Можливо, mod_rewrite Apache може це зробити.)
jon

Не існує єдиного правила, яке стосується всіх браузерів, тому принаймні вам потрібно вказати, хто / хто вас цікавить.
John Gardeniers

Відповіді:


7

У кожного веб-переглядача є свій метод поводження з DNS-колом, я сьогодні провів деякий час, вивчаючи цю проблему, і продовжуватиму оновлювати свою відповідь, оскільки знайду докази виконання, які обмежуватимуть мої відповіді у браузерах, які викривають їх поведінку.

Гугл хром

Google Chrome (використовується v58) запитає всі записи хостів для адреси (A, AAAA, CNAME) і помістить їх у масив ( address_list ). Потім Chrome спробує відкрити сокет на кожній IP-адресі, щоб від першого до останнього, хром не намагатиметься зробити найшвидший чи найближчий IP-адресу, він вважає, що перший IP (наданий вашими версіями dns-резолюцій) є найкращим IP-адресою. У моїх тестах сервери bind і windows dns задають різний порядок IP-адрес за пошуком, даючи те, що, схоже, розділяє пропускну здатність 50/50 для кожного IP. Ця функціональність викрита вchrome://net-internals/#events&q=type:SOCKET%20is:active

Завиток (libcurl / 7.54.0)

У Curl також є ця функція --connect-timeoutвідключення, але вона набагато довша за замовчуванням у хромі, хром закінчується негайно, Curl цього не робить. Якщо ви використовуєте libcurl і хочете пережити екземпляр dns з круглим доступом, коли одна IP-адреса не працює, (працює в хромі, але не в коді), обов'язково вкажіть це значення нижче.

DEFAULT_CONNECT_TIMEOUT: 0 змусив мене подумати, що з завиткою це неможливо.

* After 149990ms connect time, move on!

І в обох браузерах IP не був липким , вони дотримувались TTL, вказаного в DNS, і після того, як ttl закінчився (хром підтримує це внутрішньо, curl запитує кожен запит), вибір ip виконується щоразу, як описано вище.

Що це означає? Для деяких систем DNS-RR нормально, але він не розроблений для відмови. Ви повинні сподіватися, що всі результати пошуку DNS є (джерелом істини) дійсними та доступними для обслуговування трафіку. Існує багато способів забезпечити доступність IP-адрес, наприклад, віртуальні плаваючі IP-адреси, трюки BGP / маршрутизації тощо. Використовуйте їх .

Усі тести, виконані в середовищі лише для IPv4, повернуться з результатами подвійного стека, коли буде доступна достатня інфраструктура для тестування.

Я гадаю, що ці зміни є побічним ефектом IPv6-Fallback RFC Happy Eyeballs

Оновлення Корисна думка, RR DNS може допомогти лише з врівноваженням навантаження, а не збоями програми, якщо один з ваших вузлів має 503, ви будете обслуговувати 40-60%, якщо ваш трафік 503. Зроблено припущення, що всі перераховані IP-адреси є дійсними робочими кінцевими точками, якщо вони доступні


2

редагувати: Редагування моєї відповіді з тих пір, як HiPerFreak навчав мене.

DNS-сервери повернуть список усіх записів A, який він має для заданого імені хоста. Там, де заходить кругла робіна, це те, що вона обертається, як упорядковано список. Розміщене посилання - чудовий приклад того, як веб-браузери використовуватимуть цей список.

Круглий Robinning може використовуватися для дуже примітивної форми врівноваження навантаження, але є дуже поганою заміною реального врівноваження навантаження, оскільки якщо один з вузлів обертання кругового обертання знизиться, DNS-сервер не стане мудрішим і все одно помістіть IP-адресу знищеного вузла в список.


DNS-сервер завжди роздає ВСІ адреси. Веб-переглядач вирішує, до якого звикнути (як багато разів тут і в інших місцях). Також ОС передає всі IP-адреси браузеру.
HiPerFreak

2
@HiPerFreak Часто зустрічається конфігурація (особливо для великої кількості A-Records) полягає в тому, що DNS передає деякі адреси (хоча і не всі, як правило, щоб переконатися, що вони вміщуються в UDP-пакет з 512 байт і не вимагають зайвих накладних витрат) , як правило, у мінливому порядку.
ваббіт

Я думав про 2 або 3 IP-адреси.
HiPerFreak

@HiPerFreak: Я просто хотів сказати, що ви маєте рацію в тому, що сервер DNS видає всі записи A, коли запитується на ім’я, якщо для цього імені існує кілька записів A. У мене DNS-сервер, і я просто зробив захоплення пакету за допомогою Wireshark, поки я пінг-імені хоста підтвердив. Дякую - я сьогодні щось дізнався! :)
Ryan Ries

2

Дивіться це моє запитання (і відповідь): Як браузери обробляють кілька IP-адрес .

Коротше - круглий dbin взагалі не покращує доступність. Браузер вибирає один IP-код і дотримується його, навіть якщо він не відповідає. (Перевірено за допомогою FF та хрому).

Як тільки закінчується кеш-пам’ять браузера, ім'я хоста знову вирішується, і процес повторюється, незалежно від того, відповів IP чи ні.

Для базового HA ви можете використовувати динамічний DNS або різні підходи на основі IP.

EDIT: Така поведінка буде мати місце, коли недоступний хост виступає "чорною дірою". Якщо натомість хост ctively відмовиться від вхідних з'єднань, браузер спробує один ip, отримає відмову та негайно використає інший ip, і, таким чином, він буде досить успішно провалений.


2
Можливо, це змінилося за останні роки, але я можу підтвердити, що при декількох оновленнях у Firefox IP-адреси насправді змінюються, хоча і не дуже часто. Можливо, ця відповідь застаріла?
Єті

Моє дослідження (з 2015 року) полягає в тому, що Chrome, Firefox та MSIE НЕ ведуть себе так, як це описує Sandman4. MSIE помітно відрізняється тим, що він вимагає повного тайм-ауту TCP, перш ніж намагатися з'єднатись із наступною адресою, вказаною, якщо перша не працює.
symcbean

0

Вони перемикають IP-адреси, це не є аварійним рішенням.

Браузери дозволяють ОС робити дозвіл назви, а для перевірки Linux завжди рандомізує IP-адреси, спробуйте розмістити хост google.com кілька разів. IP-адреси прийдуть у випадковому порядку.


Чому вони роблять це випадковим чином і без причини? Хіба не було б сенсу повторно використовувати IP з вмінням працювати, поки він працює і працює?
HiPerFreak

1
Це для балансування навантаження.
Камінь

@HiPerFreak Дивіться також: en.wikipedia.org/wiki/Round-robin_DNS
voretaq7

@HiPerFreak: Причина того, що він не дотримується відомого IP-адреси, полягає в тому, що роздільна здатність імені нічого не знає про те, чи працює цей IP зараз чи раніше. Веб-переглядач не дотримується єдиної IP-адреси, оскільки роздільна здатність імені говорить про використання різних IP-адрес. :-)
Шон Рейфшнайдер

@Sean: Як обговорюється у відповіді на удар, роздільна здатність імені дає браузеру ВСІ IP-адреси, і браузер вирішує, який з них використовувати. І браузер знає, які IP-адреси працювали, а які ні. Тому це не може бути причиною.
HiPerFreak

0

DNS повертає всі IP-адреси в списку, але вони змінюють порядок списку, і цей порядок не є випадковим або змінюється, коли 1 виходить з ладу, але вони завжди повертають IP-адреси в тій же послідовності з причин балансування навантаження. Коли браузер отримує список, я вважаю, що він вибирає перше в списку, якщо він не відомий як непрацюючий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.