最近线上偶尔报一些超时的异常报警,刚开始没有当回事,以为是网络不稳定造成的。有一天早上吃完早餐也觉得太久没有去浏览线上一些异常信息了,于是就一个个浏览了下,有些超时异常上下文经常带着“xxx.com: Temporary failure in name resolution”。这个异常是DNS解析异常,这个时候果断找运维帮忙排查下问题。
运维通过tcpdump抓包,发现是有的DNS请求没有收到响应,超时5秒后,再次发送DNS请求才成功收到响应。
DNS解析缓存在规定时间内失效,解析就有这种并发解析超时问题。 经查阅资料,我们发现CentOS 6 以后DNS解析器对于ipv4和ipv6的解析是可以并行的,一旦DNS解析器对于ipv4和ipv6使用同一个socket接口,而IP地址又是一样的,在同时发出ipv4和ipv6解析请求后,只会收到一个ipv4的解析响应,这是因为在存在防火墙等机制的网络环境中,同样源目的ip,同样源目的port,同样的第4层协议的连接会被防火墙看成是同一个会话,因此会存在返回包被丢弃现象,此时socket将一处于“等待”模式,等待ipv6的解析响应,故导致解析缓慢。(如果开启ipv6和ipv4解析,并且域名支持ipv6,优先选择ipv6)
一. 在RHEL5/CentOS5/Ubuntu 10.04等linux下,dns的解析请求过程如下: