如何疑難排解 Route 53 中的加權路由政策的問題?
在 Amazon Route 53 中測試加權路由政策的 DNS 解析時,我得到意想不到的結果。
簡短描述
假設您建立了名稱為「weighted.awsexampledomain.com」的文字 (TXT) 記錄。記錄的存留時間 (TTL) 為 300 秒,且加權設定如下:
名稱 | 類型 | TTL | 價值 | 權重 | 運作狀態檢查狀態 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 0 的記錄」 | 加權 =0 | 運作狀態檢查相關聯 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 20 的記錄」 | 加權=20 | 運作狀態檢查相關聯 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 50 的記錄」 | 加權=50 | 運作狀態檢查相關聯 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 70 的記錄」 | 加權=70 | 運作狀態檢查相關聯 |
下列範例會參考此組態。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確定您使用的是最新的 AWS CLI 版本。
測試您的加權路由政策以識別問題
傳送多個 (超過 10,000 個) 查詢以測試您的加權路由政策。從多個位置測試 DNS 解析,或直接查詢授權名稱伺服器以瞭解政策。請使用下列指令碼,針對您的域名稱傳送多個 DNS 查詢。
使用遞迴解析程式傳送 DNS 查詢:
#!/bin/bash for i in {1..10000} do domain=$(dig <domain-name> <type> @RecursiveResolver_IP +short) echo -e "$domain" >> RecursiveResolver_results.txt done
將 DNS 查詢直接傳送至授權名稱伺服器:
#!/bin/bash for i in {1..10000} do domain=$(dig <domain-name> <type> @AuthoritativeNameserver_IP +short) echo -e "$domain" >> AuthoritativeNameServer_results.txt done
使用 AWS CLI 中的 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"
使用測試結果疑難排解您的特定問題
問題: 加權記錄的端點資源未收到預期的流量比率。
Route 53 根據分配給記錄的加權將流量傳送到資源,作為所有記錄總加權的比例。中繼 DNS 解析器快取 DNS 回應記錄 TTL 的持續時間。由於快取的回應,用戶端會在持續時間內僅導向至特定端點。
範例
您可以針對緩存 DNS 解析器 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"
請注意,因為遞迴 DNS 解析器上的快取,導致上述結果不如預期。
問題: 部分加權記錄不會傳回。
- 如果您將運作狀態檢查與資源記錄集產生關聯,則 Route 53 只會在關聯的健全狀況檢查成功時才會回應該記錄。如需詳細資訊,請參閱 Amazon Route 53 如何判斷運作狀態檢查是否正常。
- 如果政策中的 RRSet 沒有附加的運作狀態檢查,則一律會被視為正常。它也包含在 DNS 查詢的可能回應中。不會傳回運作狀態檢查失敗的記錄。檢查運作狀態檢查組態,並確定已報告為正常。
- 如果您在資源記錄集中使用「評估目標運作狀態」,則 Route 53 會依賴最終資源報告的運作狀態檢查。如需詳細資訊,請參閱當我使用「評估目標運作狀態」時,為什麼我的別名記錄指向 Application Load Balancer 標示為不正常?
範例
有些運作狀態檢查失敗:
名稱 | 類型 | TTL | 價值 | 權重 | 運作狀態檢查狀態 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 0 的記錄」 | 加權 =0 | 運作狀態檢查成功 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 20 的記錄」 | 加權=20 | 運作狀態檢查成功 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 50 的記錄」 | 加權=50 | 運作狀態檢查失敗 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 70 的記錄」 | 加權=70 | 運作狀態檢查成功 |
$ 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"
在此範例中,Route 53 不會傳回「加權為 50 的記錄」,因為其運作狀態檢查失敗。
問題: 所有加權記錄都不正常。
即使一組記錄中沒有正常的記錄,Route 53 仍必須提供對 DNS 查詢的回應。但是,選擇一個記錄而不是另一條記錄沒有基礎。在這種情況下,Route 53 認為該組中的所有記錄都是正常的。系統會根據路由政策和您為每筆記錄指定的值來選取一條記錄。
範例
名稱 | 類型 | TTL | 價值 | 權重 | 運作狀態檢查狀態 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 0 的記錄」 | 加權 =0 | 運作狀態檢查失敗 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 20 的記錄」 | 加權=20 | 運作狀態檢查失敗 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 50 的記錄」 | 加權=50 | 運作狀態檢查失敗 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 70 的記錄」 | 加權=70 | 運作狀態檢查失敗 |
$ 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"
在此範例中,Route 53 會將所有記錄視為正常 (開啟失敗)。路由 53 根據設定的比例回應 DNS 請求。不會傳回「加權 0」的記錄,因為其加權為零。
注意: 如果您將非零加權設為某些記錄,並將其他記錄設定為零加權,則運作狀態檢查的運作方式與所有記錄的加權都相同。但是,也有一些例外情況:
- Route 53 最初只考慮正常的非零加權記錄(若有)。
- 如所有非零記錄都不正常,則 Route 53 會考慮正常的零加權記錄。
範例
名稱 | 類型 | TTL | 價值 | 權重 | 運作狀態檢查狀態 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 0 的記錄」 | 加權 =0 | 運作狀態檢查合格 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 20 的記錄」 | 加權=20 | 運作狀態檢查合格 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 50 的記錄」 | 加權=50 | 運作狀態檢查失敗 |
weighted.awsexampledomain.com. | TXT | 300 | 「加權為 70 的記錄」 | 加權=70 | 運作狀態檢查失敗 |
$ 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"
在此範例中,Route 53 不考慮加權為 0 的記錄。除非所有加權記錄都不正常,否則 Route 53 不會傳回零加權記錄。
如果您為群組中的所有記錄設定相等加權,則流量會以相同的可能性路由至所有正常的資源。如果將群組中所有記錄的「加權」設定為零,則流量會以相同的可能性路由至所有正常的資源。
相關資訊

相關內容
- 已提問 7 個月前lg...
- 已提問 2 年前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前