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.
domain-name-system
failover
high-availability
round-robin
HiPerFreak
źródło
źródło
Odpowiedzi:
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 w
chrome://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
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło