dns出现故障怎么办(DNS故障分析优化)
1 、DNS解析失败
1.1 报connection timed out; no servers could be reached错误
root@15b099c121e2:/# nslookup time.geekbang.org ;; connection timed out; no servers could be reached1.2 对网络进行排查 ,或者是使用 nslookup -debug www.baidu.com 。结果发现网络是征程连接的 ,但是访问baidu这个网址取通过本机环回口取访问的 ,所以导致连接失败 。
root@15b099c121e2:/# ping 114.114.114.114 PING 114.114.114.114 (114.114.114.114): 56 data bytes 64 bytes from 114.114.114.114: icmp_seq=0 ttl=127 time=29.275 ms 64 bytes from 114.114.114.114: icmp_seq=1 ttl=127 time=27.183 ms ^C--- 114.114.114.114 ping statistics root@15b099c121e2:/# nslookup -debug www.baidu.com ;; Connection to 127.0.0.1#53(127.0.0.1) for www.baidu.com failed: connection refused. ;; Connection to ::1#53(::1) for www.baidu.com failed: address not available.1.3 查看Dns配置文件 ,发现内容为空 。所以我们需要配置DNS服务
/# cat /etc/resolv.conf root@15b099c121e2:/# echo "nameserver 114.114.114.114 " > /etc/resolv.conf root@15b099c121e2:/# nslookup www.baidu.com Server: 114.114.114.114 Address: 114.114.114.114#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 14.215.177.39 Name: www.a.shifen.com Address: 14.215.177.382 、DNS解析不稳定
2.1 用time nslookup mp.csdn.net为例 ,来查看时延 ,可以看到real这一栏的时延有15S之久
harbo@harbo-virtual-machine:~$ time nslookup mp.csdn.net Server: 114.114.114.114 Address: 114.114.114.114#53 Non-authoritative answer: Name: mp.csdn.net Address: 101.201.178.55 real 0m15.099s user 0m0.000s sys 0m0.013s2.2 如果多测试一下 ,会出现哪些现象呢,可能也会出现解析失败的现象
/# time nslookup mp.csdn.net ;; connection timed out; no servers could be reached real 0m15.011s user 0m0.006s sys 0m0.006s2.3 对于上述出现的结果 ,可能会出现多种原因:
2.3.1 DNS服务器本身有问题 ,响应慢并且不稳定
2.3.2 客户端到DNS服务器的网络延迟比较大
2.3.3 DNS请求或者响应包 ,在某些情况下请求包被丢弃
2.4 根据不同的延时 ,我们可以更换不同的DNS ,使用ping命令进行观测
arbo@harbo-virtual-machine:~$ ping mp.csdn.net PING mp.csdn.net (101.201.178.55) 56(84) bytes of data. 64 bytes from 101.201.178.55 (101.201.178.55): icmp_seq=1 ttl=128 time=38.4 ms 64 bytes from 101.201.178.55 (101.201.178.55): icmp_seq=2 ttl=128 time=34.5 ms2.5 针对DNS解析时间过长的问题,可以为目标进行DNS缓存 ,使用dnsmasq
#该命令是在容器上执行 /# /etc/init.d/dnsmasq start * Starting DNS forwarder and DHCP server dnsmasq [ OK ]2.6 修改/etc/resolv.conf,将DNS服务器改为DNSmasq的监听地址 ,本次用的是本机地址 114.114.114.114,然后多次执行nslookup命令
root@a7e78e494a4d:/# time nslookup mp.csdn.net Server: 114.114.114.114 Address: 114.114.114.114#53 Non-authoritative answer: Name: mp.csdn.net Address: 101.201.178.55 real 0m0.115s user 0m0.011s sys 0m0.026s2.7 可以看到执行多次以后 ,DNS解析都比较快 。
2 、DNS优化解决方法
2.1 对DNS解析结果进行缓存 ,但是要注意 ,缓存过期以后 ,需要重新获取新纪录 ,有经验的小伙伴可以写一个脚本 ,定期进行获取新记录 。
2.2 对DNS解析的结果进行预取 ,这是浏览器等 Web 应用中最常用的方法 ,也就是说 ,不等用户点击页面上的超链接 ,浏览器就会在后台自动解析域名 ,并把结果缓存起来 。
2.3 使用HTTPDNS取代常规的DNS解析 ,特别是如今域名劫持普遍存在,使用 HTTP 协议绕过链路中的 DNS 服务器 ,就可以避免域名劫持的问题
2.4 基于 DNS 的全局负载均衡(GSLB) 。这不仅为服务提供了负载均衡和高可用的功能 ,还可以根据用户的位置,返回距离最近的 IP 地址 。
本文整理自极客时间 倪朋飞:《Linux性能优化实战》
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!