DNS Round Robin: czy przeglądarki trzymają się jednego adresu IP, dopóki jest on online?

14

Jak zachowuje się większość przeglądarek, jeśli pobierają wiele rekordów A z serwera DNS? Czy trzymać się jednego adresu IP, o ile jest on osiągalny (i używać innego, jeśli adres IP jest obniżony)? A może zmieniają się cały czas bez powodu?

Jeśli większość obecnych przeglądarek trzyma się jednego adresu IP, wystarczy mi DNS-RR jako proste rozwiązanie przełączania awaryjnego.

HiPerFreak
źródło
1
Nie mogę bezpośrednio odpowiedzieć na twoje pytanie, ale zwrócę uwagę, że musisz radzić sobie z buforowaniem zarówno na poziomie przeglądarki, jak i systemu operacyjnego! Baw się dobrze :)
SpacemanSpiff
1
@Iain - Awesome link
SpacemanSpiff
Ile masz maszyn do obsługi zaplecza? Jeśli 2 maszyny z aktywną pasywną są w porządku, uzyskaj trzeci adres IP i użyj pulsu, aby przełączyć go na tryb awaryjny między komputerami fizycznymi. Alternatywnie myślę, że ultramonkey obsługuje przypisywanie do backendów na podstawie źródłowego adresu IP, który jest prawie taki sam jak pojedynczy klient. Prawdopodobnie możesz również zhakować coś razem, ustawiając dla każdego backendu unikalny plik cookie i posiadając serwer proxy frontendu do backendów w zależności od pliku cookie. (Mod_rewrite Apache'a prawdopodobnie to potrafi.)
jon
Nie ma jednej reguły obejmującej wszystkie przeglądarki, więc musisz przynajmniej określić, która z nich Cię interesuje.
John Gardeniers

Odpowiedzi:

7

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-timeoutjest 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

Jacob Evans
źródło
2

edycja: Edycja mojej odpowiedzi, odkąd HiPerFreak mnie szkolił.

Serwery DNS zwrócą listę wszystkich rekordów A dla danej nazwy hosta. Tam, gdzie pojawia się round robin, jest to, że obraca się w kolejności uporządkowania listy. Link, który został opublikowany, jest doskonałym przykładem tego, jak przeglądarki internetowe wykorzystają tę listę.

Round Robinning może być używany do bardzo prymitywnej formy równoważenia obciążenia, ale jest bardzo słabym zamiennikiem prawdziwego równoważenia obciążenia, ponieważ jeśli jeden z hostów w rotacji okrągłego robota ulegnie awarii, serwer DNS nie będzie mądrzejszy i nadal będzie umieść adres IP uszkodzonego węzła na liście.

Ryan Ries
źródło
Serwer DNS zawsze rozdaje WSZYSTKIE adresy. Przeglądarka decyduje, który z nich zostanie wykorzystany (jak wielokrotnie dyskutowano tutaj i gdzie indziej). Ponadto system operacyjny przekazuje wszystkie adresy IP do przeglądarki.
HiPerFreak,
2
@HiPerFreak Często spotykaną konfiguracją (szczególnie dla dużej liczby rekordów A) jest to, że DNS rozdaje niektóre adresy (choć nie wszystkie, zwykle w celu upewnienia się, że mieszczą się one w pakiecie UDP o wielkości 512 bajtów i nie powodują niepotrzebnego obciążenia) , zwykle w zmieniającej się kolejności.
the-wabbit
Myślałem o 2 lub 3 IP.
HiPerFreak,
@ HiPerFreak: Chciałem tylko powiedzieć, że masz rację, że serwer DNS rozdaje wszystkie rekordy A, gdy jest pytany o nazwę, jeśli istnieje wiele rekordów A dla tej nazwy. Mam serwer DNS i właśnie zrobiłem przechwytywanie pakietów za pomocą Wireshark podczas pingowania nazwy hosta w celu potwierdzenia. Dziękuję - nauczyłem się dziś czegoś! :)
Ryan Ries
2

Zobacz moje pytanie (i odpowiedź): w jaki sposób przeglądarki obsługują wiele adresów IP .

W skrócie - okrągłe robin dns wcale nie poprawia dostępności. Przeglądarka wybiera jeden adres IP i przylega do niego, nawet jeśli nie odpowiada. (Sprawdzone za pomocą FF i chrome).

Po wygaśnięciu pamięci podręcznej dns przeglądarki nazwa hosta została rozwiązana ponownie, a proces powtórzony, niezależnie od tego, czy adres IP odpowiedział, czy nie.

W przypadku podstawowego HA możesz użyć dynamicznego DNS lub różnych metod opartych na IP.

EDYCJA: To zachowanie nastąpi, gdy niedostępny host działa jak „czarna dziura”. Jeśli zamiast tego host aktywnie odrzuca połączenia przychodzące, przeglądarka spróbuje użyć jednego adresu IP, otrzyma odmowę i natychmiast użyje innego adresu IP, dzięki czemu całkiem dobrze przejdzie w tryb failover.

Sandman4
źródło
2
Być może zmieniło się to w ostatnich latach, ale mogę potwierdzić, że po wielu odświeżeniach w Firefoksie IP faktycznie się zmienia, choć niezbyt często. Być może ta odpowiedź jest nieaktualna?
Yeti
Moje badania (od 2015 r.) Pokazują, że Chrome, Firefox i MSIE NIE zachowują się tak, jak opisuje to Sandman4. MSIE wyróżnia się tym, że wymaga pełnego przekroczenia limitu czasu TCP przed próbą nawiązania połączenia z następnym adresem wymienionym w przypadku awarii pierwszego.
symcbean
0

Zmieniają adresy IP, nie jest to rozwiązanie awaryjne.

Przeglądarki pozwalają systemowi operacyjnemu na rozpoznawanie nazw, a na przykład Linux zawsze losowo losuje adresy IP, spróbuj hosta google.com kilka razy. Adresy IP będą nadawane w kolejności losowej.

Kamień
źródło
Dlaczego robią to losowo i bez powodu? Czy nie ma sensu ponownie wykorzystywać znanego adresu IP, o ile działa?
HiPerFreak
1
Służy do równoważenia obciążenia.
Kamień
@HiPerFreak Zobacz także: en.wikipedia.org/wiki/Round-robin_DNS
voretaq7
@HiPerFreak: Powodem, dla którego nie przylega do znanego adresu IP, jest to, że rozpoznawanie nazw nie wie nic o tym, czy to IP działa teraz, czy ma w przeszłości. Przeglądarka nie trzyma się pojedynczego adresu IP, ponieważ rozpoznawanie nazw mówi mu, aby używał różnych adresów IP. :-)
Sean Reifschneider
@Sean: Jak omówiono w odpowiedzi blow, rozpoznawanie nazw daje przeglądarce WSZYSTKIE adresy IP i przeglądarka decyduje, którego użyć. Przeglądarka wie, które adresy IP działały, a które nie. To nie może być powód.
HiPerFreak
0

DNS zwracają wszystkie adresy IP na liście, ale zmieniają kolejność na liście i ta kolejność nie jest losowa ani zmieniają się, gdy 1 nie powiedzie się, ale zawsze zwracają adresy IP w tej samej kolejności ze względu na równoważenie obciążenia. Gdy przeglądarka otrzyma listę, przypuszczam, że wybiera pierwszą na liście, jeśli nie jest znana jako niedziałająca.

Laurent
źródło