Wie verhalten sich die meisten Browser, wenn sie vom DNS-Server mehrere A-Einträge erhalten? Halten Sie sich an eine IP-Adresse, solange diese erreichbar ist (und verwenden Sie eine andere nur, wenn die IP-Adresse nicht verfügbar ist)? Oder wechseln sie die ganze Zeit ohne Grund?
Wenn sich die meisten aktuellen Browser an eine IP-Adresse halten, reicht DNS-RR für mich als einfache Failover-Lösung aus.
domain-name-system
failover
high-availability
round-robin
HiPerFreak
quelle
quelle
Antworten:
Jeder Browser hat seine eigene Methode zur Behandlung von Round-Robin-DNS. Ich habe heute einige Zeit damit verbracht, dieses Problem zu untersuchen, und werde meine Antwort weiterhin aktualisieren, sobald ich einen Implementierungsnachweis finde, der meine Antworten auf Browser beschränkt, die ihr Verhalten offenlegen.
Google Chrome
Google Chrome (v58 verwendet) fordert alle Hosteinträge für eine Adresse (A, AAAA, CNAME) an und fügt sie in ein Array ( address_list ) ein. Chrome versucht dann, einen Socket für jede IP-Adresse zu öffnen, um von der ersten zur letzten zu gelangen. Chrome versucht nicht, die schnellste oder nächstgelegene IP-Adresse zu ermitteln, sondern geht davon aus, dass die erste (von Ihren DNS-Resolvern im Upstream angegebene) die beste IP-Adresse ist. In meinen Tests geben Bind- und Windows-DNS-Server eine unterschiedliche Reihenfolge von IPs pro Lookup an, wobei die Bandbreite für jede IP 50/50 aufgeteilt zu sein scheint. Diese Funktionalität ist in verfügbar
chrome://net-internals/#events&q=type:SOCKET%20is:active
Locke (libcurl / 7.54.0)
Curl hat auch diese Failover-Funktion, aber die
--connect-timeout
ist viel länger als die Standardeinstellung in Chrome. Chrome führt ein sofortiges Failover durch, Curl nicht. Wenn Sie libcurl verwenden und eine Round-Robin-DNS-Instanz überleben möchten, bei der eine IP-Adresse ausfällt (funktioniert in Chrome, aber nicht im Code), müssen Sie diesen Wert niedriger angeben.DEFAULT_CONNECT_TIMEOUT: 0 ließ mich glauben, dass dies mit Curl nicht möglich war.
* After 149990ms connect time, move on!
Auf beiden Browsern war die IP nicht klebrig , sie die TTL gegeben in DNS und sobald das ttl gefolgt abgelaufen (Chrom hält diese intern, Locke auf jede Anforderung fragt), wird die IP - Auswahl jedes Mal durchgeführt , wie oben beschrieben.
Was bedeutet das? DNS-RR ist für einige Systeme in Ordnung, jedoch nicht für Failover vorgesehen. Sie sollten davon ausgehen, dass alle Ergebnisse der DNS-Suche (eine Quelle der Wahrheit) gültig und für den Datenverkehr verfügbar sind. Es gibt viele Möglichkeiten, um die Verfügbarkeit von IP sicherzustellen, z. B. virtuelle Float-IPs, BGP / Routing-Tricks usw. Verwenden Sie diese .
Alle Tests, die nur in einer IPv4-Umgebung durchgeführt werden, werden mit Dual-Stack-Ergebnissen zurückgegeben, sobald genügend Infrastruktur zum Testen verfügbar ist.
Ich spekuliere, dass diese Änderungen ein Nebeneffekt der IPv6-Fallback RFC Happy Eyeballs sind
Update Ein nützlicher Gesichtspunkt ist, dass RR DNS nur beim Lastenausgleich und nicht bei Anwendungsfehlern helfen kann. Wenn einer Ihrer Knoten über einen 503 verfügt, werden Sie 40-60% bedienen, wenn der Datenverkehr 503 beträgt. Es wird davon ausgegangen, dass alle aufgeführten IPs gültige Arbeitsendpunkte sind, sofern diese erreichbar sind
quelle
edit: Bearbeiten meiner Antwort seit HiPerFreak mich geschult hat.
DNS-Server geben eine Liste aller A-Einträge für einen bestimmten Hostnamen zurück. Beim Round Robin dreht sich, wie die Liste sortiert ist. Der Link, der gepostet wurde, ist ein großartiges Beispiel dafür, wie Webbrowser diese Liste verwenden.
Round Robinning kann für eine sehr einfache Form des Lastenausgleichs verwendet werden, ist jedoch ein sehr schlechter Ersatz für den tatsächlichen Lastenausgleich, da der DNS-Server, wenn einer der Hosts in der Round-Robin-Rotation ausfällt, nicht klüger ist und es auch weiterhin tut Tragen Sie die IP-Adresse des heruntergefahrenen Knotens in die Liste ein.
quelle
Siehe hierzu meine Frage (und Antwort): Wie Browser mit mehreren IPs umgehen .
Short-Round-Robin-DNS verbessert die Verfügbarkeit überhaupt nicht. Der Browser wählt eine IP und bleibt dabei, auch wenn er nicht antwortet. (Geprüft mit FF und Chrom).
Sobald der DNS-Cache des Browsers abgelaufen ist, wird der Hostname erneut aufgelöst und der Vorgang wiederholt, unabhängig davon, ob die IP-Adresse beantwortet wurde oder nicht.
Für grundlegende HA können Sie dynamisches DNS oder verschiedene IP-basierte Ansätze verwenden.
BEARBEITEN: Dieses Verhalten tritt auf, wenn ein unzugänglicher Host als "Schwarzes Loch" fungiert. Wenn der Host eingehende Verbindungen ablehnt, versucht der Browser eine IP-Adresse, lehnt diese ab und verwendet sofort eine andere IP-Adresse.
quelle
Sie tauschen die IPs, es ist keine Failover-Lösung.
Mit den Browsern kann das Betriebssystem die Namensauflösung vornehmen, und Linux sortiert die IP-Adressen beispielsweise immer nach dem Zufallsprinzip. Versuchen Sie mehrmals, google.com zu hosten . Die IPs werden in zufälliger Reihenfolge geliefert.
quelle
Der DNS gibt alle IP-Adressen in einer Liste zurück, ändert jedoch die Reihenfolge der Liste. Diese Reihenfolge ist nicht zufällig oder ändert sich, wenn 1 ausfällt. Aus Gründen des Lastenausgleichs werden die IP-Adressen jedoch immer in der gleichen Reihenfolge zurückgegeben. Wenn der Browser die Liste erhält, nimmt er vermutlich den ersten Platz in der Liste ein, wenn er nicht als nicht funktionierend bekannt ist.
quelle