Comment résoudre les problèmes liés à une stratégie de routage pondéré dans Route 53 ?
Date de la dernière mise à jour : 22/05/2021
J'ai configuré une stratégie de routage pondéré dans Amazon Route 53. Mais lorsque je teste la résolution DNS, j'obtiens des résultats inattendus. Comment y remédier ?
Brève description
Supposons que vous ayez créé un enregistrement de type texte (TXT) nommé « weighted.awsexampledomain.com ». La durée de vie (TTL) de l'enregistrement est de 300 secondes et il présente des pondérations configurées comme suit :
Nom | Type | Durée de vie (TTL) | Valeurs | Pondération | Statut de vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Pondération = 0 | Vérification de l'état associée |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Pondération = 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
Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.
Testez votre stratégie de routage pondéré pour identifier le problème
Envoyez de multiples requêtes (plus de 10 000) 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 obtenue à l'aide de l'outil awk de l'interface AWS CLI :
$ 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 les résultats du 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 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 ces résultats ne sont pas ceux attendus en raison du cache du résolveur DNS récursif.
Problème : certains enregistrements pondérés ne sont pas renvoyés.
- Si vous associez des vérifications d'état à un jeu d'enregistrements de ressources, Route 53 ne répond avec l'enregistrement que si la vérification d'état associée aboutit. Assurez-vous que la vérification d'état associée à votre enregistrement pondéré a bien abouti. Pour plus d’informations, consultez Comment Amazon Route 53 détermine si une vérification d'état est saine.
- En l'absence de vérification d'état attachée, un jeu d'enregistrements de ressources associé à une stratégie est toujours considéré comme sain, et il est inclus dans les réponses possibles aux requêtes DNS. Les enregistrements qui échouent aux vérifications d'état ne sont pas renvoyés. Vérifiez la configuration de la vérification d'état et assurez-vous qu'elle est signalée comme saine.
- Si vous utilisez « Évaluer l'état de la cible » avec le jeu d'enregistrements de ressources, Route 53 s'appuie sur la vérification d'état signalée par la ressource de fin. Pour plus d'informations, consultez Pourquoi mon enregistrement d'alias pointe-t-il vers une instance d'Application Load Balancer marquée comme non saine lorsque j'utilise « Évaluer l'état de la cible » ?
Par exemple, lorsque certaines vérifications d'état échouent :
Nom | Type | Durée de vie (TTL) | Valeurs | Pondération | Statut de vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Pondération = 0 | Réussite de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Pondération = 20 | Réussite de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Échec de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Réussite de la vérification d'é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 pondération 50 » n'est pas renvoyé par Route 53, car sa vérification d'état échoue.
Problème : aucun de mes enregistrements pondérés n'est sain.
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. Mais rien ne permet de choisir un enregistrement plutôt qu'un autre. Route 53 considère donc 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 | Durée de vie (TTL) | Valeurs | Pondération | Statut de vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Pondération = 0 | Échec de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Pondération = 20 | Échec de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Échec de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Échec de la vérification d'é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 en fonction des proportions configurées. « Enregistrement avec pondération 0 » n'est pas renvoyé, car sa pondération est égale à 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 d'état fonctionnent de la même manière que lorsque tous les enregistrements présentent des pondérations différentes de zéro. Il existe néanmoins quelques exceptions :
- Initialement, Route 53 prend uniquement en compte les enregistrements sains présentant une pondération différente de zéro, le cas échéant.
- Si aucun des enregistrements présentant une pondération différente de zéro n'est sain, Route 53 se penche sur les enregistrements sains dont la pondération est égale à zéro.
Par exemple :
Nom | Type | Durée de vie (TTL) | Valeurs | Pondération | Statut de vérification de l'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 0 » | Pondération = 0 | Vérification d'état réussie |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 20 » | Pondération = 20 | Vérification d'état réussie |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec poids 50 » | Poids = 50 | Échec de la vérification d'état |
weighted.awsexampledomain.com. | TXT | 300 | « Enregistrement avec pondération 70 » | Poids = 70 | Échec de la vérification d'é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
10000 "Record with Weight 20"
Notez que Route 53 ne prend pas en compte l'enregistrement dont la pondération est égale à 0. À moins qu'aucun enregistrement pondéré ne soit sain, Route 53 ne renvoie pas les enregistrements dont la pondération est égale à 0.
Si vous définissez une pondération égale pour tous les enregistrements d'un groupe, le trafic est acheminé vers toutes les ressources saines avec la même probabilité. Si vous définissez « Pondération » sur zéro pour tous les enregistrements d'un groupe, le trafic est acheminé vers toutes les ressources saines avec la même probabilité.
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?