DNS 数据结果返回慢分析

背景

有用户报障, 启动服务时候发现十分慢,感觉是 DNS 服务器问题第一时间给我感觉 DNS 没问题,但也分析一下

DNS 架构

当前使用 skydns 作为 DNS 解析服务器 (老旧系统遗留问题)DNS 数据存储至 3 台 ETCD 服务器集群中skydns 只解析 vpaas.org 域,其他域解析则转发至其他服务器

DNS 现象

在普通 VM 执行 dns 查询并没有发现有什么问题但客户电脑上执行 dns 解析的确有点慢参考下图每次 DNS 解析都需要 4 ~ 5 秒的返回时间

DNS 数据结果返回慢分析

tcpdump 抓包分析

由于容器没有 tcpdump 命令直接到 dns 服务器上执行抓包操作参考抓包命令 (10.189.56.67) 客户端地址,请求 DNS 解析


tcpdump -i any host 10.189.56.67 and port 53  -w /tmp/dns.pcap 

分析结果

参考下面命令,分析 dns.pcap ,每个请求时间返回针对第一次的 DNS 请求


# tshark -r dns.pcap -Y "dns.qry.name contains cfg-zk-1" -o tcp.calculate_timestamps:true 
>   -T fields -e frame.number -e frame.time_delta_displayed 
>   -e ip.src -e ip.dst -e dns.flags.response -e dns.qry.name -e dns.a
Running as user "root" and group "root". This could be dangerous.
54      0.000000000     10.189.56.67    10.199.197.222  0       cfg-zk-1.vip.com.vmock.t13208.vpaas.org
55      0.000358000     10.199.197.222  10.189.56.67    0       cfg-zk-1.vip.com.vmock.t13208.vpaas.org
67      2.000226000     10.199.197.222  10.189.56.67    0       cfg-zk-1.vip.com.vmock.t13208.vpaas.org
82      2.000243000     10.199.197.222  10.189.56.67    1       cfg-zk-1.vip.com.vmock.t13208.vpaas.org
87      1.001264000     10.189.56.67    10.199.197.222  0       cfg-zk-1.vip.com.t13208.vpaas.org
88      0.001542000     10.199.197.222  10.189.56.67    1       cfg-zk-1.vip.com.t13208.vpaas.org
89      0.001735000     10.189.56.67    10.199.197.222  0       cfg-zk-1.vip.com
90      0.002192000     10.199.197.222  10.189.56.67    1       cfg-zk-1.vip.com
91      0.000471000     10.189.56.67    10.199.197.222  0       cfg-zk-1.vip.com
92      0.001538000     10.199.197.222  10.189.56.67    1       cfg-zk-1.vip.com
93      0.000316000     10.189.56.67    10.199.197.222  0       cfg-zk-1.vip.com
94      0.001164000     10.199.197.222  10.189.56.67    1       cfg-zk-1.vip.com

针对第二次的 DNS 请求


# tshark -r dns.pcap -Y "dns.qry.name contains cfg-zk-2" -o tcp.calculate_timestamps:true   -T fields -e frame.number -e frame.time_delta_displayed   -e ip.src -e ip.dst -e dns.flags.response -e dns.qry.name -e dns.a
Running as user "root" and group "root". This could be dangerous.
95      0.000000000     10.189.56.67    10.199.197.222  0       cfg-zk-2.vip.com.vmock.t13208.vpaas.org
96      0.000708000     10.199.197.222  10.189.56.67    0       cfg-zk-2.vip.com.vmock.t13208.vpaas.org
104     2.000231000     10.199.197.222  10.189.56.67    0       cfg-zk-2.vip.com.vmock.t13208.vpaas.org
122     2.000298000     10.199.197.222  10.189.56.67    1       cfg-zk-2.vip.com.vmock.t13208.vpaas.org
123     0.000683000     10.189.56.67    10.199.197.222  0       cfg-zk-2.vip.com.t13208.vpaas.org
124     0.002016000     10.199.197.222  10.189.56.67    1       cfg-zk-2.vip.com.t13208.vpaas.org
125     0.001814000     10.189.56.67    10.199.197.222  0       cfg-zk-2.vip.com
126     0.001868000     10.199.197.222  10.189.56.67    1       cfg-zk-2.vip.com
127     0.000545000     10.189.56.67    10.199.197.222  0       cfg-zk-2.vip.com
128     0.002011000     10.199.197.222  10.189.56.67    1       cfg-zk-2.vip.com
129     0.000368000     10.189.56.67    10.199.197.222  0       cfg-zk-2.vip.com
130     0.001419000     10.199.197.222  10.189.56.67    1       cfg-zk-2.vip.com

分析说明

上面两次分析, 都请参考第二列(时间)第一次用时为 5 秒,第二次用时为 4 秒, 跟之前客户端时间返回匹配当用户请求域名 cfg-zk-2.vip.com 时syndns 收到请求, 会先 查询 ETCD 获取 cfg-zk-2.vip.com.vmock.t13208.vpaas.org 请求 耗时 2 秒当无法获取数据,则查询 ETCD 请求 cfg-zk-2.vip.com.t13208.vpaas.org 解析,耗时 2 秒当第二次数据返回失败,才转发请求到其他 DNS 服务器并返回数据至用户因此总耗时十分长

改进

skydns 对非本地域 (vpaas.org) DNS 请求不友好如果遇到非本地域请求,则会浪费耗时因为需要修改 DNS 架构可以用 bind 或 pdns-recursor 监听本地 53 端口, 并指定 vpaas.org 转发至 skydns 服务器解析bind, pdns-recursor 可以支持多域名分别处理,QPS 可以达到 10W/S 直接推荐

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...