Pregunta DNS Round Robin: ¿Los navegadores se adhieren a una IP mientras esté en línea?


¿Cómo se comportan la mayoría de los navegadores si obtienen varios registros A del servidor DNS? ¿Se apega a una IP siempre que sea accesible (y solo use otra si la IP está inactiva)? ¿O cambian todo el tiempo sin ninguna razón?

Si la mayoría de los navegadores actuales se adhieren a una IP, DNS-RR sería suficiente para mí como una solución de conmutación por error simple.


12
2018-01-14 20:28


origen


No puedo responder a tu pregunta directamente, ¡pero te señalaré que debes lidiar con el almacenamiento en caché tanto en el navegador como en el nivel del sistema operativo! Que te diviertas :) - SpacemanSpiff
webmasters.stackexchange.com/questions/10927/… - Iain
@Iain - enlace impresionante - SpacemanSpiff
¿Cuántas máquinas tienes para un backend? Si 2 máquinas con activo-pasivo están bien, obtenga una tercera dirección IP y use el latido del corazón para conmutar por error entre las máquinas físicas. Alternativamente, creo que ultramonkey admite la asignación a backends basados ​​en IP de origen, que es casi Lo mismo que un solo cliente. Probablemente también podría piratear algo si cada backend configurara una cookie única y tuviera un servidor web frontend proxy para backends dependiendo de la cookie. (El mod_rewrite de Apache probablemente puede hacerlo.) - jon
No hay una sola regla que cubra todos los navegadores, por lo que, como mínimo, debe especificar en cuál / cuáles está interesado. - John Gardeniers


Respuestas:


Cada navegador tiene su propio método de manejo de DNS round-robin. Hoy pasé un tiempo investigando este problema y continuaré actualizando mi respuesta cuando encuentre pruebas de implementación que limitarán mis respuestas a los navegadores que exponen su comportamiento.

Google Chrome

Google Chrome (v58 utilizado) solicitará todas las entradas de host para una dirección (A, AAAA, CNAME) y las colocará en una matriz (address_list). Chrome luego intentará abrir un socket en cada dirección IP en orden de la primera a la última, Chrome no intentará la IP más rápida o más cercana, asume que la primera IP (dada por sus resolutores dns ascendentes) es la mejor IP. En mis pruebas, el enlace y los servidores dns de Windows proporcionan un orden diferente de IP por búsqueda, lo que parece una división 50/50 en ancho de banda para cada IP. Esta funcionalidad se expone en chrome://net-internals/#events&q=type:SOCKET%20is:active

Curl (libcurl / 7.54.0)

Curl también tiene esta función de falla, pero la --connect-timeout es mucho más largo que el predeterminado en Chrome, Chrome falla inmediatamente, Curl no. Si usa libcurl y desea sobrevivir a una instancia de DNS de round-robin en la que falla una IP (funciona en cromo pero no en código), asegúrese de especificar este valor más bajo.

DEFAULT_CONNECT_TIMEOUT: 0 me hizo pensar que esto no era posible con el rizo.

* After 149990ms connect time, move on!

En ambos navegadores, la IP no fue pegajoso, siguieron el TTL dado en el DNS y una vez que el ttl expiró (Chrome mantiene esto internamente, el curl pregunta en cada solicitud), la selección de IP se realiza cada vez como se describió anteriormente.

¿Qué significa esto? DNS-RR está bien para algunos sistemas, pero no está diseñado para la conmutación por error. Debería esperar que todos los resultados de la búsqueda de DNS sean (una fuente de verdad) válidos y disponibles para servir el tráfico. Hay muchas formas de garantizar la disponibilidad de IP, como IP virtuales flotantes, BGP / trucos de enrutamiento, etc. Usalos, usalos a ellos.

Todas las pruebas realizadas en un entorno solo IPv4, regresarán con resultados de pila doble una vez que haya suficiente infraestructura para probar.

Especulo que estos cambios son un efecto secundario del IPv6-Fallback RFC Happy Eyeballs

Actualizar Una consideración útil, RR DNS solo puede ayudar con el balanceo de carga, no con las fallas de la aplicación, si uno de sus nodos tiene un 503, servirá de 40 a 60% si su tráfico es de 503. Se supone que todas las IP enumeradas son puntos finales de trabajo válidos si accesible


5
2018-05-26 13:47





Edición: editando mi respuesta desde que HiPerFreak me enseñó.

Los servidores DNS devolverán una lista de todos los registros A que tiene para un nombre de host determinado. Donde entra el round robin es que rota cómo se ordena la lista. El enlace que se publicó es un gran ejemplo de cómo los navegadores web utilizarán esa lista.

Round Robinning se puede usar para una forma muy primitiva de balanceo de carga, pero es un sustituto muy pobre para el balanceo de carga real, ya que si uno de los hosts en la rotación de round robin se desactiva, el servidor DNS no será más sabio y seguirá ponga la dirección IP del nodo caído en la lista.


2
2018-01-14 21:07



El servidor DNS siempre reparte TODAS las direcciones. El navegador es el que decide cuál se usa (como se discute muchas veces aquí y en otros lugares). Además, el sistema operativo pasa todas las direcciones IP al navegador. - HiPerFreak
@HiPerFreak La configuración que se ve a menudo (especialmente para una gran cantidad de A-Records) es que el DNS se reparte algunos direcciones (aunque no todas, generalmente para asegurarse de que encajen en un paquete UDP de 512 bytes y no incurrir en gastos generales innecesarios), generalmente en un orden cambiante. - the-wabbit
Estaba pensando en 2 o 3 IPs. - HiPerFreak
@HiPerFreak: solo quería decir que tiene razón en que un servidor DNS entrega todos los registros A cuando se le solicita un nombre si existen varios registros A para ese nombre. Tengo un servidor DNS y acabo de hacer una captura de paquetes con Wireshark mientras hago clic en el nombre del host para confirmar. Gracias - aprendí algo hoy! :) - Ryan Ries


Mira esto mi pregunta (y respuesta): Cómo los navegadores manejan múltiples IPs.

En breve - round robin dns no mejora la disponibilidad en absoluto. El navegador elige una dirección IP y se apega a ella, incluso si no responde. (Comprobado con FF y cromo).

Una vez que el caché dns del navegador caduca, el nombre de host se resuelve de nuevo y el proceso se repite, independientemente de si la IP respondió o no.

Para HA básica, puede usar DNS dinámico o varios enfoques basados ​​en IP.

EDITAR: Este comportamiento tendrá lugar cuando el host inaccesible actúe como un "agujero negro". Si, por el contrario, el host rechaza las conexiones entrantes, el navegador probará una ip, obtendrá rechazo y usará inmediatamente otra ip y, por lo tanto, se recuperará bastante bien.


2
2018-01-16 21:06



Tal vez esto cambió en los últimos años, pero puedo confirmar que en múltiples actualizaciones en Firefox, la IP realmente cambia, aunque no con demasiada frecuencia. Posiblemente esta respuesta está desactualizada? - Yeti
Mi investigación (de 2015) es que Chrome, Firefox y MSIE NO se comportan como lo describe Sandman4. MSIE es notablemente diferente, ya que requiere un tiempo de espera de TCP completo antes de intentar una conexión a la siguiente dirección que aparece en la lista si falla la primera. - symcbean


Cambian las direcciones IP, no es una solución de conmutación por error.

Los navegadores permiten que el sistema operativo realice la resolución de nombres y, por ejemplo, Linux siempre aleatoriza las direcciones IP, intente host google.com varias veces. Las direcciones IP vendrán en orden aleatorio.


0
2018-01-14 20:41



¿Por qué hacen esto al azar y sin razón? ¿No tendría sentido reutilizar una IP de saber trabajar, siempre y cuando esté en funcionamiento? - HiPerFreak
Es para equilibrar la carga. - Stone
@HiPerFreak Ver también: en.wikipedia.org/wiki/Round-robin_DNS - voretaq7
@HiPerFreak: la razón por la que no se adhiere a una IP conocida para trabajar es que la resolución de nombres no sabe si esa IP funciona ahora o si ha funcionado anteriormente. El navegador no se adhiere a una sola IP, porque la resolución del nombre le indica que use diferentes IP. :-) - Sean Reifschneider
@Sean: Como se explica en la respuesta del golpe, la resolución de nombres le da al navegador TODAS las direcciones IP y el navegador decide cuál usar. Y el navegador sabe qué IPs funcionaron y cuáles no. Así que esta no puede ser la razón. - HiPerFreak


El DNS devuelve todas las IP en una lista, pero cambian el orden de la lista y este orden no es aleatorio o cambia cuando 1 falla, pero siempre devuelven las IP en la misma secuencia por razones de equilibrio de carga. Cuando el navegador recibe la lista, supongo que escoge el primero en la lista si no se conoce como que no funciona.


0
2018-01-15 18:18