slan's blog

严于律己,宽以待人,阿弥陀佛

间歇性DNS解析异常处理

date: 2022-04-17 15:53:23

故障现象:服务器内访问外部接口间歇性失败

现象是no such host, 报dns解析失败则是dns问题,从抓包看223.5.5.5的dns能返回正常,但是100的内网dns返回不正常:

分析应该是:内网dns有异常,导致没有返回正常的结果,那么怎么快速解决呢?

首先dns默认是按顺序请求的,所以将公网dns放到首位就好了,但是这个故障现场,明显不是按顺序请求的,而且随机使用的dns。查看resolve.conf的手册:options启用rotate参数会轮询使用dns服务器:

rotate       Sets RES_ROTATE in _res.options, 
            which causes round-robin selection of name servers from among those listed.  
            This has the effect of spreading the query load among all listed servers, 
            rather than having all clients try the first listed server first every time.

去掉这个参数之后,问题解决。

tips: 服务器上dns建议开启nscd服务,缓存dns记录,否则每次对外请求会都会增加一个dns请求的时延,导致性能下降。

总结

resolve.conf 中options 开启rotate参数,会让dns请求轮询走dns服务器列表。