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ügbarchrome://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