Każda przeglądarka ma własną metodę obsługi DNS typu round-robin. Spędziłem dziś trochę czasu na badaniu tego problemu i będę nadal aktualizować swoją odpowiedź, gdy znajdę dowód implementacji, który ograniczy moje odpowiedzi do przeglądarek, które ujawniają ich zachowanie.
Google Chrome
Google Chrome (używany v58) zażąda wszystkich wpisów hosta dla adresu (A, AAAA, CNAME) i umieści je w tablicy ( lista adresów ). Chrome podejmie następnie próbę otwarcia gniazda dla każdego adresu IP w kolejności od pierwszego do ostatniego, chrome nie spróbuje wykonać najszybszego lub najbliższego adresu IP, zakłada, że pierwszy adres IP (podany przez nadrzędne dns) jest najlepszym adresem IP. W moich testach serwery bind i Windows dns podają inną kolejność adresów IP na wyszukiwanie, co daje podział na przepustowość 50/50 dla każdego adresu IP. Ta funkcja jest dostępna wchrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
Curl ma również tę funkcję przełączania awaryjnego, ale --connect-timeout
jest znacznie dłuższy niż domyślny w chrome, chrome natychmiast się przełącza, Curl nie. Jeśli używasz libcurl i chcesz przetrwać instancję dns typu round-robin, w której zawodzi jeden adres IP (działa w chrome, ale nie w kodzie), pamiętaj, aby podać tę wartość niższą.
DEFAULT_CONNECT_TIMEOUT: 0 sprawiło, że pomyślałem, że to niemożliwe z curl.
* After 149990ms connect time, move on!
W obu przeglądarkach adres IP nie był lepki , postępowały zgodnie z TTL podanym w DNS i kiedy wygasł ttl (chrome utrzymuje to wewnętrznie, curl pyta przy każdym żądaniu), wybór ip jest wykonywany za każdym razem, jak opisano powyżej.
Co to znaczy? DNS-RR jest odpowiedni dla niektórych systemów, ale nie jest przeznaczony do przełączania awaryjnego. Należy oczekiwać, że wszystkie wyniki wyszukiwania DNS są (źródło prawdy) prawidłowe i dostępne do obsługi ruchu. Istnieje wiele sposobów zapewnienia dostępności adresów IP, takich jak wirtualne adresy IP, sztuczki BGP / sztuczki routingu itp. Używaj ich .
Wszystkie testy przeprowadzone w środowisku tylko IPv4 powrócą z wynikami podwójnego stosu, gdy dostępna będzie wystarczająca infrastruktura do przetestowania.
Spekuluję, że te zmiany są efektem ubocznym Happy Eyeballs IPv6-Fallback RFC
Aktualizacja
Przydatna uwaga, RR DNS może jedynie pomagać w równoważeniu obciążenia, a nie awarie aplikacji, jeśli jeden z twoich węzłów ma 503, będziesz obsługiwać 40-60%, jeśli twój ruch 503s. Przyjęto założenie, że wszystkie wymienione adresy IP są prawidłowymi działającymi punktami końcowymi, jeśli są osiągalne