我們使用 Route53 作為我們的私人 DNS,特別是多值應答路由策略,沒有用於轉儲/延遲負載平衡的運作狀況檢查。
這對我們來說效果很好,直到昨天我們才注意到奇怪的行為。
我們有一個 記錄集ro.mysql.foo.bar.com
,其中包含只讀 MySQL 副本的 IP。
如果你運行 DIG,它會反映這一點;
dig A ro.mysql.foo.bar.com
;; QUESTION SECTION:
;ro.mysql.foo.bar.com. IN A
;; ANSWER SECTION:
ro.mysql.foo.bar.com. 4 IN A 10.2.2.2
ro.mysql.foo.bar.com. 4 IN A 10.2.2.3
ro.mysql.foo.bar.com. 4 IN A 10.2.2.4
預期的行為是,當 mysql 命中時,ro.mysql.foo.bar.com
它會以啞/隨機負載平衡的方式隨機連接到 3 個主機之一。直到昨天為止,這一切都運作良好。
如果我跑
mysql -h ro.mysql.foo.bar.com -e "select @@hostname;"
我預計 的輸出會在、和@@hostname
之間變化10.2.2.2
10.2.2.3
10.2.2.4
相反,它不會在三個 IP 之間隨機路由流量,而是只使用一個 IP。
+-----------------------------------+
| @@hostname |
+-----------------------------------+
| 10.2.2.3 |
+-----------------------------------+
如果我們10.2.2.3
從 DNS 中刪除,它就會停止使用它。如果我們將其添加回來,它將再次繼續使用10.2.2.3
。
我們確實透過 PowerDNS 運行我們自己的解析器(我們正在逐步淘汰),但我們可以看到,那裡似乎沒有任何故障,PowerDNS 也清除了它的 DNS 快取。