實現高 DNS QPS 吞吐量
我試圖找到 DNS Resolver VM 的最大 QPS(每秒查詢數)。
我們的基礎架構託管在 Azure 上,有一個 VM(基於綁定)充當解析器,查詢 Azure 本機 DNS(
168.63.129.16
)以及本地 DNS。我沒有在解析器上記憶體任何查詢,每個 A 記錄的 TTL 為 300 秒。我正在使用
dnsperf
&resperf
來觸發載入(僅 A 記錄)。現在,我正在準備 DNS 解析器以抵禦高達 100K QPS 的 DDOS 攻擊。我面臨著解析器和天藍色原生 DNS 解析器之間的查詢速率限制等問題。因此,當 QPS 增加時,解析器會將SERVFAIL
響應返回給客戶端。但是,我們沒有看到SERVFAIL
解析器和基於本地的 DNS 之間的任何響應。以 Azure DNS 為目標時,我可以看到的最大 QPS 約為 2100。我在網上搜尋了很多 Azure 是否有任何此類速率限制,但找不到任何相關內容。不知何故,我預感解析器 VM 遇到瓶頸,因為 2K QPS 對於 Azure 基礎架構的規模來說非常低。
一些事情(核心 sysctl 更改),我在最後進行了更改,改進了一點,但並不多。
綁定配置更改 ::
recursive-clients
從1000
->30000
UDP 緩衝區的值高於
26214400
停止緩衝區故障::
net.core.rmem_max
net.core.rmem_default
本地埠範圍從
32768 61000
到1024 61000
具有可用於 DNS 的最大埠::
net.ipv4.ip_local_port_range
雜項變化::
txqueuelen
從1000
->20000
ulimits
更改為 100000net.netfilter.nf_conntrack_max
更改為更高的值除了上述之外,我確實將 VM 大小從 (1 core, 2 GB RAM) -> (4 core, 8 GB RAM) 增加了。增加後,數據包錯誤消失(選中
netstat -s
)但沒有改善SERVFAIL
錯誤。我確實啟用
tcpdump
了檢查SERVFAIL
錯誤模式。如果發生故障,解析器會嘗試將查詢發送到 Azure DNS 5 次(每次 1 秒後),但它沒有收到來自 Azure DNS 的任何資訊,因此將SERVFAIL
響應發送回客戶端。pcap
將文件載入到Wireshark
後,我看到 Azure DNS 將響應發送回,resolver
但resolver
已將SERVFAIL
響應發送到客戶端。為什麼在得到響應之前連接就關閉了?電流保持幾秒鐘
net.netfilter.nf_conntrack_udp_timeout
不變,30
但在 5 秒後resolver
發送給客戶端。SERVFAIL
以下是::
tcpdump
期間的日誌ServFail
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 次嘗試後發送。如果您已經走到了這一步,我必須感謝您閱讀這個冗長的問題。我知道這問得太多了,但是如果您對我有一些提示,我將不勝感激,因為我無法了解瓶頸是什麼。
最初發佈在超級使用者這裡
所以,我會回答我的問題。
實際上,Azure 速率將每秒查詢數限制為
1000
每個 VM。它記錄在這裡。無論
sysctl
我做什麼調整,由於這個速率限制,我們仍然會遇到來自 Azure 的問題。