Comment résoudre les problèmes de résolution DNS avec ma stratégie de routage pondéré dans Route 53 ?
Date de la dernière mise à jour : 24/06/2020
J'ai configuré une stratégie de routage pondéré dans Amazon Route 53. Toutefois, lorsque je teste la résolution DNS, j’obtiens des résultats inattendus. Comment puis-je résoudre ce problème ?
Brève description
Supposons que vous avez créé un enregistrement TXT avec le nom « weighted.awsexampledomain.com ». L'enregistrement a une durée de vie (TTL) de 300 secondes et des pondérations configurées comme suit :
Nom | Type | TTL | Valeurs | Poids | Statut de la vérification de l'état |
---|---|---|---|---|---|
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Poids = 0 | Vérification de l'état associée |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Poids = 20 | Vérification de l'état associée |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Vérification de l'état associée |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Vérification de l'état associée |
Cette configuration est référencée dans les exemples suivants.
Solution
Testez votre stratégie de routage pondéré pour identifier le problème
Envoyez plusieurs (plus de 10 000) requêtes pour tester votre stratégie de routage pondéré. Testez la résolution DNS à partir de plusieurs emplacements ou interrogez directement les serveurs de noms faisant autorité pour comprendre la stratégie. Utilisez les scripts suivants pour envoyer plusieurs requêtes DNS pour votre nom de domaine.
Envoyez des requêtes DNS à l'aide du résolveur récursif :
#!/bin/bash
for i in {1..10000}
do
domain=$(dig <domain-name> <type> @RecursiveResolver_IP +short)
echo -e "$domain" >> RecursiveResolver_results.txt
done
Envoyez des requêtes DNS directement aux serveurs de noms faisant autorité :
#!/bin/bash
for i in {1..10000}
do
domain=$(dig <domain-name> <type> @AuthoritativeNameserver_IP +short)
echo -e "$domain" >> AuthoritativeNameServer_results.txt
done
Exemple de sortie à l'aide de l' outil awk:
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @172.16.173.64 +short); echo -e "$domain" >> RecursiveResolver_results.txt; done
$ awk ' " " ' RecursiveResolver_results.txt | sort | uniq -c
1344 "Record with Weight 20"
3780 "Record with Weight 50"
4876 "Record with Weight 70"
Utilisez vos résultats de test pour résoudre votre problème spécifique
Problème : Les ressources de point de terminaison des enregistrements pondérés ne reçoivent pas le ratio de trafic attendu.
Route 53 envoie le trafic vers une ressource en fonction de la pondération que vous attribuez à l'enregistrement par rapport à la pondération totale de tous les enregistrements. Les réponses DNS sont mises en cache par des résolveurs DNS intermédiaires pendant la durée de vie de l'enregistrement TTL. Les clients sont dirigés vers uniquement des points de terminaison spécifiques pendant la durée en raison de la réponse mise en cache.
Par exemple, si vous interrogez sur le résolveur DNS de mise en cache 192 168.1.2 :
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @192.168.1.2 +short); echo -e "$domain" >> CachingResolver_results.txt; done
$ awk ' " " ' CachingResolver_results.txt | sort | uniq -c
3561 "Record with Weight 20"
1256 "Record with Weight 50"
5183 "Record with Weight 70"
Notez que les résultats ci-dessus ne sont pas comme prévu en raison du cache du résolveur DNS récursif.
Problème : Certains de mes enregistrements pondérés ne sont pas renvoyés.
- Si vous associez des vérifications de l'état à un jeu d'enregistrements de ressources, Route 53 répond avec l'enregistrement uniquement si la vérification de l'état associée aboutit. Assurez-vous que la vérification de l'état associée à votre enregistrement pondéré est réussie. Pour plus d’informations, consultez Comment Amazon Route 53 détermine si une vérification d'état est saine.
- Si un RRSet d'une stratégie n'a pas de vérification de l'état attachée, il est toujours considéré comme sain et est inclus dans les réponses possibles aux requêtes DNS. Les enregistrements qui échouent aux vérifications de l'état ne sont pas renvoyés. Vérifiez la configuration de la vérification de l'état et assurez-vous qu'elle est signalée comme saine.
- Si vous utilisez « Évaluer l’état cible » avec le jeu d'enregistrements de ressources, Route 53 s'appuie sur la vérification de l'état signalée par la ressource de fin. Pour plus d'informations, consultez Pourquoi mon enregistrement d'alias pointe-t-il vers un Application Load Balancer marqué comme défectueux lorsque j'utilise « Évaluer l’état cible » ?
Par exemple, lorsque certaines vérifications de l'état échouent :
Nom | Type | TTL | Valeurs | Poids | Statut de la vérification de l'état |
---|---|---|---|---|---|
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Poids = 0 | Réussite de la vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Poids = 20 | Réussite de la vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Échec de vérification de l’état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Réussite de la vérification de l'état |
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @192.168.1.2 +short); echo -e "$domain" >> HealthCheck_results.txt; done
$ awk ' " " ' HealthCheck_results.txt | sort | uniq -c
3602 "Record with Weight 20"
6398 "Record with Weight 70"
Notez que l'enregistrement avec un poids 50 n'est pas renvoyé par Route 53, car sa vérification de l'état échoue.
Problème : Tous mes enregistrements pondérés ne sont pas sains.
Même si aucun des enregistrements d'un groupe d'enregistrements n'est sain, Route 53 doit toujours fournir une réponse aux requêtes DNS. Cependant, il n'y a pas de base pour choisir un enregistrement plutôt qu'un autre. Dans ce cas, Route 53 considère que tous les enregistrements du groupe sont sains. Un enregistrement est sélectionné en fonction de la stratégie de routage et des valeurs que vous spécifiez pour chaque enregistrement.
Par exemple :
Nom | Type | TTL | Valeurs | Poids | Statut de la vérification de l'état |
---|---|---|---|---|---|
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Poids = 0 | Échec de vérification de l’état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Poids = 20 | Échec de vérification de l’état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Échec de vérification de l’état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Échec de vérification de l’état |
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @205.251.194.16 +short); echo -e "$domain" >> All_UnHealthy_results.txt; done
$ awk ' " " ' All_UnHealthy_results.txt | sort | uniq -c
1446 "Record with Weight 20"
3554 "Record with Weight 50"
5000 "Record with Weight 70"
Notez que Route 53 a considéré que tous les enregistrements sont sains (Fail Open). Route 53 a répondu aux demandes DNS selon les proportions configurées. « Enregistrement avec poids 0 » n'est pas renvoyé, car son poids est égal à zéro.
Remarque : si vous définissez des pondérations différentes de zéro pour certains enregistrements et des pondérations égales à zéro pour d'autres, les vérifications de l'état fonctionnent de la même manière que lorsque tous les enregistrements ont des pondérations différentes de zéro. Il existe quelques exceptions :
- Initialement, Route 53 prend uniquement en compte les enregistrements pondérés non zéro sains, le cas échéant.
- Si tous les enregistrements autres que zéro ne sont pas sains, Route 53 considère les enregistrements pondérés zéro sains.
Si vous définissez « Poids » égal à tous les enregistrements d'un groupe, le trafic est acheminé vers toutes les ressources saines avec une probabilité égale. Si vous définissez « Poids » sur zéro pour tous les enregistrements d'un groupe, le trafic est acheminé vers toutes les ressources saines avec une probabilité égale.
Informations connexes
Cet article vous a-t-il été utile ?
Cette page peut-elle être améliorée ?
Vous avez besoin d'aide ?