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.
Réponses:
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 dans
chrome://net-internals/#events&q=type:SOCKET%20is:active
Curl (libcurl / 7.54.0)
Curl a également cette fonction de basculement, mais le
--connect-timeout
est 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
la source
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.
la source
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.
la source
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.
la source
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.
la source