首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现较高的DNS QPS吞吐量

实现较高的DNS QPS吞吐量
EN

Server Fault用户
提问于 2022-04-03 13:58:56
回答 1查看 406关注 0票数 0

我正在试图找到DNS Resolver VM的最大QPS (每秒查询)。

我们的基础设施托管在Azure上,有一个VM (基于绑定的)作为解析器来查询Azure本机DNS (168.63.129.16)以及-prem。我不会在解析器上缓存任何查询&每个A记录都有300秒的TTL。

我使用dnsperf & resperf来触发加载(只有A记录)。现在,我正在准备DNS解析器,以抵御高达100 K QPS的DDOS攻击。我面临一些问题,比如在我的解析器和azure本机DNS解析器之间消除查询比率。因此,当QPS增加时,解析器将SERVFAIL响应返回给客户端。然而,我们没有看到解析器和基于prem的DNS之间的任何SERVFAIL响应.

最大QPS,我可以看到,当目标Azure DNS是大约2100。我已经在网上搜索了很多,如果有这样的速率限制,由Azure,但找不到任何相关。不知怎么的,我预感到解析器VM遇到了瓶颈,因为对于Azure基础设施的规模,2KQPS非常低。

有几件事(内核sysctl改变了),我在最后做了一些改进,但没有多少改进。

绑定Config更改::

  • recursive-clients来自1000 -> 30000

UDP缓冲区的值高于26214400,以停止缓冲区故障:

  • net.core.rmem_max
  • net.core.rmem_default

本地端口范围从32768 610001024 61000,最大端口可用于DNS:

  • net.ipv4.ip_local_port_range

杂项变动:

  • txqueuelen来自1000 -> 20000
  • ulimits改为100000
  • net.netfilter.nf_conntrack_max更改为更高的值

除了上面的内容之外,我还从(1核,2 GB内存) -> (4核,8 GB内存)增加了VM大小。增加后,数据包错误消失(检查netstat -s),但没有改善SERVFAIL错误。

我确实使tcpdump能够检查SERVFAIL错误的模式。如果出现故障,解析器尝试向Azure DNS发送5次查询(每次在1秒后),但它没有从Azure中听到任何消息,因此将SERVFAIL响应发送回客户端。将pcap文件加载到Wireshark后,我看到Azure将响应发送回resolver,但resolver已经将SERVFAIL响应发送给客户端。

为什么在得到响应之前就关闭了连接?当前的net.netfilter.nf_conntrack_udp_timeout不受30秒的影响,但resolver在5秒后将SERVFAIL发送给客户端。

下面是tcpdumpServFail期间的日志:

代码语言:javascript
复制
reading from file dns4.pcap, link-type EN10MB (Ethernet)
10.0.0.10.57710 > 10.0.0.11.domain: [udp sum ok] 1612+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.44513 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0x8cfd!] 52637+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ar: . OPT UDPsize=4096 DO (77)
10.0.0.11.32378 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0x3950!] 20672+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ar: . OPT UDPsize=512 DO (77)
10.0.0.11.59973 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0xe2e5!] 15199+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. ar: . OPT UDPsize=512 DO (77)
10.0.0.11.29976 > 168.63.129.16.domain: [bad udp cksum 0xbec2 -> 0x051b!] 47104+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.43442 > 168.63.129.16.domain: [bad udp cksum 0xbec2 -> 0xe791!] 41199+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.domain > 10.0.0.10.57710: [bad udp cksum 0x2a89 -> 0x5e30!] 1612 ServFail q: A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. 0/0/0 (66)

正如您从底线中看到的,ServFail是在5次尝试后发送的。

如果你已经走了这么远,我必须感谢你阅读了这个冗长的问题。我知道这是一个太多的要求,但如果你有一些提示给我,因为我无法理解什么是瓶颈,我很感激。

最初发布在超级用户这里

EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-04-05 12:28:58

所以我会回答我的问题。

事实上,Azure速率将每秒的查询限制为每个VM的1000

这是记录在案的这里。无论我做什么sysctl调优,由于这个速率限制,我们仍然有来自Azure的问题。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1097702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档