¿Cómo se comportan la mayoría de los navegadores si obtienen múltiples registros A del servidor DNS? ¿Se adhiere a una IP siempre que sea accesible (y solo use otra si la IP está inactiva)? ¿O cambian todo el tiempo sin razón?
Si la mayoría de los navegadores actuales se adhieren a una IP, DNS-RR sería suficiente para mí como una simple solución de conmutación por error.
domain-name-system
failover
high-availability
round-robin
HiPerFreak
fuente
fuente
Respuestas:
Cada navegador tiene su propio método de manejo de DNS round-robin, hoy he pasado algún tiempo investigando este problema y continuaré actualizando mi respuesta a medida que 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 ( dirección_lista ). Chrome intentará abrir un socket en cada dirección IP en orden de principio a fin, Chrome no intentará la IP más rápida o más cercana, se supone que la primera IP (dada por sus solucionadores de dns ascendentes) es la mejor IP. En mis pruebas, los servidores bind y windows dns dan un orden diferente de IP por búsqueda, dando lo que parece una división 50/50 en ancho de banda para cada IP. Esta funcionalidad está expuesta en
chrome://net-internals/#events&q=type:SOCKET%20is:active
Rizo (libcurl / 7.54.0)
Curl también tiene esta función de conmutación por error, pero
--connect-timeout
es mucho más larga que la predeterminada en Chrome, Chrome falla inmediatamente, Curl no. Si usa libcurl y desea sobrevivir a una instancia dns round-robin donde falla una IP (funciona en Chrome 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 curl.
* After 149990ms connect time, move on!
En ambos navegadores , la IP no era pegajosa , siguieron el TTL dado en DNS y una vez que ttl expiró (Chrome mantiene esto internamente, curl pregunta en cada solicitud), la selección de ip se realiza cada vez como se describe anteriormente.
¿Qué significa esto? DNS-RR está bien para algunos sistemas, pero no está diseñado para la conmutación por error. Debe esperar que todos los resultados de la búsqueda de DNS sean (una fuente de verdad) válidos y disponibles para atender el tráfico. Hay muchas formas de garantizar la disponibilidad de IP, como IP flotantes virtuales, trucos BGP / enrutamiento, etc. Úselos .
Todas las pruebas realizadas en un entorno solo de IPv4, regresarán con resultados de doble pila una vez que haya suficiente infraestructura disponible para probar.
Especulo que estos cambios son un efecto secundario de los globos oculares felices IPv6-Fallback RFC
Actualización Una consideración útil, RR DNS solo puede ayudar con el equilibrio de carga, no con fallas de la aplicación, si uno de sus nodos tiene un 503, servirá 40-60% si su tráfico es 503. Se supone que todas las IP enumeradas son puntos finales de trabajo válidos si se puede alcanzar
fuente
editar: Editando mi respuesta desde que HiPerFreak me educó.
Los servidores DNS devolverán una lista de todos los registros A que tiene para un nombre de host dado. Donde entra el round robin es que gira cómo se ordena la lista. El enlace que se publicó es un gran ejemplo de cómo los navegadores web harán uso de esa lista.
Round Robinning se puede usar para una forma muy primitiva de equilibrio de carga, pero es un sustituto muy pobre para el equilibrio de carga real, ya que si uno de los hosts en la rotación round robin se cae, el servidor DNS no será más sabio y seguirá siendo ponga la dirección IP del nodo caído en la lista.
fuente
Vea esta mi pregunta (y respuesta): Cómo los navegadores manejan múltiples IP .
En breve, round robin dns no mejora la disponibilidad en absoluto. El navegador elige una IP y se adhiere a ella, incluso si no responde. (Comprobado con FF y cromo).
Una vez que caduca la memoria caché del navegador, el nombre de host se resuelve nuevamente y el proceso se repite, independientemente de si 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, en cambio, el host rechaza las conexiones entrantes, el navegador intentará una ip, se negará e inmediatamente usará otra ip y, por lo tanto, fallará bastante bien.
fuente
Cambian las IP, no es una solución de conmutación por error.
Los navegadores permiten que el sistema operativo haga la resolución de nombres y, por ejemplo, Linux siempre aleatoriza las direcciones IP, pruebe host google.com varias veces. Las IP vendrán en orden aleatorio.
fuente
El DNS devuelve toda la IP en una lista, pero cambia el orden de la lista y este orden no es aleatorio o cambia cuando 1 falla, pero siempre devuelve las IP en la misma secuencia por razones de equilibrio de carga. Cuando el navegador recibe la lista, supongo que elige el primero de la lista si no se conoce como no funcional.
fuente