本文主要用于介紹如何編譯安裝queryperf來對DNS服務(wù)器進行壓測,以及CoreDNS常見的幾種配置下的壓測性能表現(xiàn)。
1、queryperf
1.1 編譯安裝
queryperf是bind9出品的一款測試dns服務(wù)器性能的工具,目前在9.12.4版本的bind源碼中還存在,再往后的新版本就沒看到有queryperf了。
[root@coredns1 home]# wget https://ftp.isc.org/isc/bind9/9.12.4/bind-9.12.4.tar.gz
[root@coredns1 home]# tar -zxvf bind-9.12.4.tar.gz
[root@coredns1 home]# cd bind-9.12.4/contrib/queryperf
[root@coredns1 queryperf]# ./configure
[root@coredns1 queryperf]# make
[root@coredns1 queryperf]# file queryperf
queryperf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
1.2 常用操作
# 將編譯好的二進制文件直接復(fù)制到系統(tǒng)的bin目錄中即可全局操作
[root@coredns1 queryperf]# cp queryperf /usr/local/bin/
[root@coredns1 home]# queryperf -h
DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $
Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]
[-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]
[-i interval] [-r arraysize] [-u unit] [-H histfile]
[-T qps] [-e] [-D] [-R] [-c] [-v] [-h]
-d specifies the input data file (default: stdin)
-s sets the server to query (default: 127.0.0.1)
-p sets the port on which to query the server (default: 53)
-q specifies the maximum number of queries outstanding (default: 20)
-t specifies the timeout for query completion in seconds (default: 5)
-n causes configuration changes to be ignored
-l specifies how a limit for how long to run tests in seconds (no default)
-1 run through input only once (default: multiple iff limit given)
-b set input/output buffer size in kilobytes (default: 32 k)
-i specifies interval of intermediate outputs in seconds (default: 0=none)
-f specify address family of DNS transport, inet or inet6 (default: any)
-r set RTT statistics array size (default: 50000)
-u set RTT statistics time unit in usec (default: 100)
-H specifies RTT histogram data file (default: none)
-T specify the target qps (default: 0=unspecified)
-e enable EDNS 0
-D set the DNSSEC OK bit (implies EDNS)
-R disable recursion
-c print the number of packets with each rcode
-v verbose: report the RCODE of each response on stdout
-h print this usage
在壓測之前需要我們自己準(zhǔn)備壓測的測試數(shù)據(jù),格式為域名 查詢類型,如:
tinychen.com A
tiny777.com A
tinychen.com MX
tiny777.com MX
tinychen777.com AAAA
常用的操作命令有:
# 對192.168.1.1進行壓測,查詢域名為文件query.domain.list的內(nèi)容
queryperf -s 192.168.1.1 -d query.domain.list
# 對192.168.1.1的5353端口進行壓測,查詢域名為文件query.domain.list的內(nèi)容
queryperf -s 192.168.1.1 -p 5353 -d query.domain.list
# 對192.168.1.1的5353端口進行壓測,查詢域名為文件query.domain.list的內(nèi)容,壓測壓力為1000qps
queryperf -s 192.168.1.1 -p 5353 -d query.domain.list -T 1000
# 對192.168.1.1的5353端口進行壓測,查詢域名為文件query.domain.list的內(nèi)容,壓測壓力為1000qps,每次查詢超時時間為3s
queryperf -s 192.168.1.1 -p 5353 -d query.domain.list -T 1000 -t 3
2、壓測數(shù)據(jù)
2.1 機器硬件配置
虛擬機為16核16G配置,宿主機為R730,配置是
雙路E5-2640 v4+82599萬兆網(wǎng)卡物理機為R640,配置是
雙路銀牌Silver 4114+128G內(nèi)存+x710萬兆萬卡
這里需要額外提一下,CoreDNS比較吃網(wǎng)卡和CPU,對于硬盤IO的要求并不算特別高(主要取決于寫日志的量),對內(nèi)存占用較低
2.2 CoreDNS配置
CoreDNS配置的復(fù)雜程度會直接影響具體實例的性能表現(xiàn),簡單來說就是啟用的插件越多,性能表現(xiàn)越差;比較影響性能表現(xiàn)的插件主要是日志相關(guān)的插件,如log插件開啟全量日志記錄,我們測試啟用的插件主要有:log、errors、bind、reload、ready、prometheus、loadbalance、cache、acl、secondary、transfer、hosts、forward、import、file、kubernetes。
2.3 數(shù)據(jù)匯總
| 機器配置 | CoreDNS配置 | 性能表現(xiàn) |
|---|---|---|
| 虛擬機 | 多插件配置+全量日志記錄 | 30K qps |
| 物理機 | 多插件配置+全量日志記錄 | 55K qps |
| 物理機 | 多插件配置+關(guān)閉log和error插件 | 70K qps |
| 物理機 | 最少插件配置 | 75K qps |
2.4 Q&A
-
虛擬機和物理機數(shù)據(jù)差距并不算特別大?
首先要明確:CoreDNS并沒有完全吃滿物理機上面的所有硬件配置,因此在物理機這里的性能表現(xiàn)瓶頸處于CoreDNS本身,而虛擬機的性能表現(xiàn)瓶頸才是硬件配置;
其次要知道:我們的虛擬機相互之間的影響比較嚴(yán)重,30K qps的性能表現(xiàn)是同宿主機上面的其他虛擬機基本處于摸魚狀態(tài),由于宿主機資源超售嚴(yán)重,一旦其他虛擬機利用率過高,必然會影響性能表現(xiàn);而使用物理機則不用擔(dān)心這類問題;
-
log插件對性能的影響?
log插件對性能的影響確實較大,但是僅限于全量寫入查詢?nèi)罩镜臅r候,如果對普通的查詢?nèi)罩镜男枨蟮陀谛阅苄枨螅梢钥紤]只配置部分特殊類型日志,如只記錄錯誤日志
log denial error;還有些同學(xué)可能會擔(dān)心日志落盤速度慢是否會影響查詢響應(yīng)速度,實測在使用rsyslog記錄日志的時候,所有查詢請求均響應(yīng)完之后一段時候內(nèi),rsyslog還在落盤相關(guān)日志,因此可以確定邏輯上并非是必須要等日志落盤結(jié)束后才響應(yīng)請求;
-
Prometheus插件采集到的數(shù)據(jù)和queryperf的數(shù)據(jù)不一致?
如果壓測的時間太短(幾秒到幾分鐘不等),會導(dǎo)致高峰時間持續(xù)太短而Prometheus插件無法準(zhǔn)確暴露數(shù)據(jù),同時還要考慮Prometheus服務(wù)端的采集頻率已經(jīng)Grafana面板的顯示設(shè)置等;最好的方式是進行一段時間較長的壓測,如三十分鐘以上;