我遇到了一个间歇性问题,我不确定从哪里开始尝试解决它。
在我们的开发环境中,负载均衡器上有两个可见的 IP 地址,一个用于前端,另一个用于多台后端服务机器。前端配置为采用通配符 DNS 名称来支持通用“门户”。
dev.example.com A 10.1.1.1
*.dev.example.com CNAME dev.example.com
后端服务器都是同一空间内的特定名称:
core.dev.example.com A 10.1.1.2
cms.dev.example.com CNAME core.dev.example.com
search.dev.example.com CNAME core.dev.example.com
问题就在这里。开发人员或程序定期尝试访问 cms.dev.example.com,会得到指向前端而不是后端负载均衡器的结果:
cms.dev.example.com is an alias to core.dev.example.com
core.dev.example.com is an alias to dev.example.com (WRONG!)
dev.example.com 10.1.1.1
所有开发人员都在使用 Mac OS X 机器,但我也发现该问题出现在使用本地云主机 DNS 解析器的 Ubuntu 机器上。
有时开发人员使用 VPN,将 DNS 定向到其自己的解析器,有时他在本地网络上使用 NAT 路由器分配的 DNS 解析器。
有时清除 Mac OS X DNS 缓存,登录 VPN,然后退出 VPN,问题就会消失。
原始权威服务器位于 zerigo 上,直接挖掘其名称服务器似乎总能给出正确答案。这些记录的已发布 DNS 缓存时间为 15 分钟,但该问题已断断续续出现约一周。
有什么故障排除建议吗?
答案1
嗯......当您将通配符 CNAME 指令替换为以下内容时会发生什么:
*.dev.example.com. A 10.1.1.1
答案2
不要将 CNAME 与通配符混合,尤其是当您的某个 CNAME 可能与通配符名称匹配时。
在这些条件下,通配符、CNAME 和 DNS 缓存的混合似乎会产生不一致的结果。
我通过删除所有 CNAME 并将其替换为 A 记录解决了间歇性解析问题。虽然不是很 DRY,但不再有不一致的查找。