【假高可用】花了三天时间研究了一个奇怪的网络问题
问题
一位同事配置了一个sentry的内部域名,使用内部的DNS系统注册,结果导致开启某些网络助手,全都打不开这个网站,无论配置什么规则都没用。
关闭某些网络助手,立即又能打开。
分析
抓取网络助手的日志进行分析后发现:
- 关闭网络助手,访问网站,得到一个IP 10.10.10.1
- 打开网络助手,访问网站,等待一小会以后网站就再也打不开了,此时得到的IP竟然是 10.10.10.2
询问同事为什么DNS解析会有两个IP,同事说这两个IP当中,如果挂掉其中一个实例,会漂移到另一个实例。
再次追问同事是否使用了 HA-Proxy,KeepAlived,同事说不是的,注册 DNS 的时候注册了这两个,以达到上述漂移的效果。
再次追问同事,这两个是不是虚IP(VIP),同事说不是的。那按理说这么使用,应该是 DNS 负载均衡之类的,另一个节点应该也是可以访问的。
试验
在网络助手上配置 Host规则,指定 10.10.10.1,浏览器稳定打开,指定 10.10.10.2,浏览器稳定打不开。
这是不正常的现象,要实现高可用,必须用 HA-Proxy,KeepAlived 等或者类似的,并结合虚IP或者负载均衡等技术,如果一个域名有两个DNS 解析结果,节点都应该可用。
结论
根据网络助手的日志,浏览器会根据DNS的多个IP发起连接,哪个能连用哪个,并缓存。
但是如果网络助手进行了DNS劫持,则容易导致网络助手连接到那个失效的节点上,从而导致连接上以后缓存失效,再又连接不上,缓存失效又如此反复。
进一步分析,假如真的是高可用,备用的IP能够突然活过来,那么除了浏览器以外的普通应用程序,例如 Java 的HttpClient或者相关库,是否能够挑选出那个正确的IP呢,还是连接异常呢?
最终结论,应该抓紧修复这个假的高可用,将DNS解析到一个稳定的网关节点上,可以是负载均衡节点等,使得DNS总是解析到这个IP上,避免让软件自己去挑选或者随机失败。

浙公网安备 33010602011771号