我们使用 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 之间随机路由流量,而是会选择一个并且只使用一个。
+-----------------------------------+
| @@hostname |
+-----------------------------------+
| 10.2.2.3 |
+-----------------------------------+
如果我们10.2.2.3
从 DNS 中删除它,它是否会停止使用。如果我们将其重新添加,它将继续再次使用10.2.2.3
。
我们确实通过 PowerDNS(我们正在逐步淘汰)运行我们自己的解析器,但似乎没有发现任何故障,PowerDNS 的 DNS 缓存也已被清除。