DNS Round Robin: les navigateurs restent-ils sur une seule IP tant qu'ils sont en ligne?

14

Comment la plupart des navigateurs se comportent-ils s'ils obtiennent plusieurs enregistrements A du serveur DNS? Est-ce que le bâton à une adresse IP tant qu'il est accessible (et n'utilisez une autre que si l'adresse IP est en panne)? Ou changent-ils tout le temps sans raison?

Si la plupart des navigateurs actuels restent sur une seule IP, DNS-RR me suffira comme simple solution de basculement.

HiPerFreak
la source
1
Je ne peux pas répondre directement à votre question, mais je vous ferai remarquer que vous devez gérer la mise en cache au niveau du navigateur et du système d'exploitation! Amusez-vous :)
SpacemanSpiff
1
@Iain - Lien génial
SpacemanSpiff
Combien de machines avez-vous pour un backend? Si 2 machines avec actif-passif sont correctes, obtenez une troisième adresse IP et utilisez Heartbeat pour la basculer entre les machines physiques. Alternativement, je pense que ultramonkey prend en charge l'attribution aux backends en fonction de l'IP source, qui est presque la même chose qu'un seul client. Vous pourriez probablement aussi pirater quelque chose ensemble en faisant en sorte que chaque backend définisse un cookie unique, et en ayant un proxy de serveur web frontal pour les backends en fonction du cookie. (Le mod_rewrite d'Apache peut probablement le faire.)
jon
Il n'y a pas de règle unique couvrant tous les navigateurs, vous devez donc au moins spécifier celui ou ceux qui vous intéressent.
John Gardeniers

Réponses:

7

Chaque navigateur a sa propre méthode de gestion des DNS à tour de rôle, j'ai passé du temps aujourd'hui à rechercher ce problème et continuerai à mettre à jour ma réponse car je trouverai une preuve d'implémentation qui limitera mes réponses aux navigateurs qui exposent leur comportement.

Google Chrome

Google Chrome (v58 utilisé) demandera toutes les entrées d'hôte pour une adresse (A, AAAA, CNAME) et les placera dans un tableau ( liste_adresses ). Chrome tentera ensuite d'ouvrir un socket sur chaque adresse IP dans l'ordre du premier au dernier, chrome n'essaiera pas l'IP la plus rapide ou la plus proche, il suppose que la première IP (donnée par vos résolveurs DNS en amont) est la meilleure IP. Dans mes tests, les serveurs bind et windows dns donnent un ordre IP différent par recherche, ce qui donne ce qui semble être une répartition de la bande passante 50/50 pour chaque IP. Cette fonctionnalité est exposée danschrome://net-internals/#events&q=type:SOCKET%20is:active

Curl (libcurl / 7.54.0)

Curl a également cette fonction de basculement, mais le --connect-timeoutest beaucoup plus long que la valeur par défaut dans chrome, le chrome bascule immédiatement, Curl non. Si vous utilisez libcurl et que vous souhaitez survivre à une instance DNS circulaire où une adresse IP échoue, (fonctionne dans Chrome mais pas dans le code), assurez-vous de spécifier cette valeur plus bas.

DEFAULT_CONNECT_TIMEOUT: 0 m'a fait penser que ce n'était pas possible avec curl.

* After 149990ms connect time, move on!

Sur les deux navigateurs , l'IP n'était pas collante , ils ont suivi le TTL donné dans DNS et une fois que ttl a expiré (Chrome le maintient en interne, curl demande à chaque demande), la sélection de l'IP est effectuée à chaque fois comme décrit ci-dessus.

Qu'est-ce que ça veut dire? DNS-RR est correct pour certains systèmes, mais il n'est pas conçu pour le basculement. Vous devez vous attendre à ce que tous les résultats de la recherche DNS soient (une source de vérité) valides et disponibles pour servir le trafic. Il existe de nombreuses façons de garantir la disponibilité des adresses IP, telles que les adresses IP flottantes virtuelles, les astuces BGP / routage, etc. Utilisez-les .

Tous les tests effectués dans un environnement IPv4 uniquement, reviendront avec des résultats à double pile une fois qu'une infrastructure suffisante sera disponible pour les tests.

Je suppose que ces changements sont un effet secondaire des globes oculaires Happy IPv6-Fallback RFC

Mise à jour Une considération utile, RR DNS ne peut aider à l'équilibrage de charge, pas aux échecs d'application, si l'un de vos nœuds a un 503, vous servirez 40-60% si votre trafic 503. L'hypothèse est faite que toutes les adresses IP répertoriées sont des points de terminaison de travail valides si elles sont accessibles

Jacob Evans
la source
2

edit: Modification de ma réponse depuis que HiPerFreak m'a instruit.

Les serveurs DNS renvoient une liste de tous les enregistrements A qu'il possède pour un nom d'hôte donné. Là où le tournoi à la ronde entre en jeu, c'est qu'il change la façon dont la liste est ordonnée. Le lien qui a été publié est un excellent exemple de la façon dont les navigateurs Web utiliseront cette liste.

Le Round Robinning peut être utilisé pour une forme très primitive d'équilibrage de charge, mais est un très mauvais substitut à l'équilibrage de charge réel, car si l'un des hôtes de la rotation à tour de rôle tombe en panne, le serveur DNS ne sera pas plus sage et restera mettez l'adresse IP du nœud abattu dans la liste.

Ryan Ries
la source
Le serveur DNS distribue toujours TOUTES les adresses. Le navigateur est celui qui décide lequel est utilisé (comme discuté plusieurs fois ici et ailleurs). En outre, le système d'exploitation transmet toutes les adresses IP au navigateur.
HiPerFreak
2
@HiPerFreak La configuration souvent vue (en particulier pour un grand nombre d'enregistrements A) est que le DNS distribue certaines adresses (bien que pas toutes, généralement pour s'assurer qu'elles tiennent dans un paquet UDP de 512 octets et n'encourent pas de surcharge inutile) , généralement dans un ordre variable.
the-wabbit
Je pensais à 2 ou 3 IP.
HiPerFreak
@HiPerFreak: Je voulais juste dire que vous avez raison en ce sens qu'un serveur DNS distribue tous les enregistrements A lorsqu'il est demandé un nom s'il existe plusieurs enregistrements A pour ce nom. J'ai un serveur DNS et viens de faire une capture de paquets avec Wireshark pendant que je testais le nom d'hôte pour confirmer. Merci - j'ai appris quelque chose aujourd'hui! :)
Ryan Ries
2

Voir ceci ma question (et réponse): Comment les navigateurs gèrent plusieurs IP .

Le DNS à tour de rôle court n'améliore pas du tout la disponibilité. Le navigateur choisit une IP et s'y tient, même s'il ne répond pas. (Vérifié avec FF et chrome).

Une fois le cache DNS du navigateur expiré, le nom d'hôte est à nouveau résolu et le processus se répète, que IP ait répondu ou non.

Pour HA de base, vous pouvez utiliser un DNS dynamique ou diverses approches basées sur IP.

EDIT: ce comportement se produit lorsqu'un hôte inaccessible agit comme un «trou noir». Si, au lieu de cela, l'hôte refuse de manière active les connexions entrantes, le navigateur essaiera une IP, obtiendra refus et utilisera immédiatement une autre IP et ainsi il basculera plutôt bien.

Sandman4
la source
2
Peut-être que cela a changé ces dernières années, mais je peux confirmer que lors de plusieurs rafraîchissements dans Firefox, l'IP change en fait, mais pas trop souvent. Peut-être que cette réponse est dépassée?
Yeti
Ma recherche (à partir de 2015) est que Chrome, Firefox et MSIE NE se comportent PAS comme Sandman4 le décrit. MSIE est particulièrement différent en ce qu'il nécessite un délai d'expiration TCP complet avant de tenter une connexion à l'adresse suivante répertoriée si la première échoue.
symcbean
0

Ils commutent les IP, ce n'est pas une solution de basculement.

Les navigateurs permettent au système d'exploitation de résoudre le nom et, par exemple, Linux randomise toujours les adresses IP, essayez d' héberger google.com plusieurs fois. Les IP viendront dans un ordre aléatoire.

Pierre
la source
Pourquoi font-ils cela au hasard et sans raison? Ne serait-il pas logique de réutiliser une adresse IP de savoir-faire tant qu'elle est opérationnelle?
HiPerFreak
1
C'est pour l'équilibrage de charge.
Stone
@HiPerFreak Voir aussi: en.wikipedia.org/wiki/Round-robin_DNS
voretaq7
@HiPerFreak: La raison pour laquelle il ne s'en tient pas à une adresse IP connue est que la résolution de nom ne sait pas si cette adresse IP fonctionne maintenant ou par le passé. Le navigateur ne s'en tient pas à une seule IP, car la résolution de nom lui dit d'utiliser différentes IP. :-)
Sean Reifschneider
@Sean: Comme discuté dans la réponse de coup, la résolution de nom donne au navigateur TOUTES les IP et le navigateur décide, lequel utiliser. Et le navigateur sait quelles adresses IP ont fonctionné ou non. Ce n'est donc pas la raison.
HiPerFreak
0

Les DNS renvoient toutes les IP dans une liste mais ils changent l'ordre de la liste et cet ordre n'est pas aléatoire ou change quand 1 échoue mais ils retournent toujours les IP dans la même séquence pour des raisons d'équilibrage de charge. Lorsque le navigateur reçoit la liste, je suppose qu'il sélectionne le 1er de la liste s'il n'est pas connu comme non fonctionnel.

laurent
la source