美文网首页
CoreDNS篇7-性能压测

CoreDNS篇7-性能压测

作者: tinychen | 来源:发表于2022-02-27 00:42 被阅读0次

    本文主要用于介绍如何编译安装queryperf来对DNS服务器进行压测,以及CoreDNS常见的几种配置下的压测性能表现。

    1、queryperf

    1.1 编译安装

    queryperf是bind9出品的一款测试dns服务器性能的工具,目前在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 常用操作

    # 将编译好的二进制文件直接复制到系统的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
    
    

    在压测之前需要我们自己准备压测的测试数据,格式为域名 查询类型,如:

    tinychen.com A
    tiny777.com A
    tinychen.com MX
    tiny777.com MX
    tinychen777.com AAAA
    

    常用的操作命令有:

    # 对192.168.1.1进行压测,查询域名为文件query.domain.list的内容
    queryperf -s 192.168.1.1 -d query.domain.list
    
    # 对192.168.1.1的5353端口进行压测,查询域名为文件query.domain.list的内容
    queryperf -s 192.168.1.1 -p 5353 -d query.domain.list
    
    # 对192.168.1.1的5353端口进行压测,查询域名为文件query.domain.list的内容,压测压力为1000qps
    queryperf -s 192.168.1.1 -p 5353 -d query.domain.list -T 1000
    
    # 对192.168.1.1的5353端口进行压测,查询域名为文件query.domain.list的内容,压测压力为1000qps,每次查询超时时间为3s
    queryperf -s 192.168.1.1 -p 5353 -d query.domain.list -T 1000 -t 3
    

    2、压测数据

    2.1 机器硬件配置

    • 虚拟机为16核16G配置,宿主机为R730,配置是双路E5-2640 v4+82599万兆网卡

    • 物理机为R640,配置是双路银牌Silver 4114+128G内存+x710万兆万卡

    这里需要额外提一下,CoreDNS比较吃网卡和CPU,对于硬盘IO的要求并不算特别高(主要取决于写日志的量),对内存占用较低

    2.2 CoreDNS配置

    CoreDNS配置的复杂程度会直接影响具体实例的性能表现,简单来说就是启用的插件越多,性能表现越差;比较影响性能表现的插件主要是日志相关的插件,如log插件开启全量日志记录,我们测试启用的插件主要有:log、errors、bind、reload、ready、prometheus、loadbalance、cache、acl、secondary、transfer、hosts、forward、import、file、kubernetes

    2.3 数据汇总

    机器配置 CoreDNS配置 性能表现
    虚拟机 多插件配置+全量日志记录 30K qps
    物理机 多插件配置+全量日志记录 55K qps
    物理机 多插件配置+关闭log和error插件 70K qps
    物理机 最少插件配置 75K qps

    2.4 Q&A

    1. 虚拟机和物理机数据差距并不算特别大?

      首先要明确:CoreDNS并没有完全吃满物理机上面的所有硬件配置,因此在物理机这里的性能表现瓶颈处于CoreDNS本身,而虚拟机的性能表现瓶颈才是硬件配置;

      其次要知道:我们的虚拟机相互之间的影响比较严重,30K qps的性能表现是同宿主机上面的其他虚拟机基本处于摸鱼状态,由于宿主机资源超售严重,一旦其他虚拟机利用率过高,必然会影响性能表现;而使用物理机则不用担心这类问题;

    2. log插件对性能的影响?

      log插件对性能的影响确实较大,但是仅限于全量写入查询日志的时候,如果对普通的查询日志的需求低于性能需求,可以考虑只配置部分特殊类型日志,如只记录错误日志log denial error

      还有些同学可能会担心日志落盘速度慢是否会影响查询响应速度,实测在使用rsyslog记录日志的时候,所有查询请求均响应完之后一段时候内,rsyslog还在落盘相关日志,因此可以确定逻辑上并非是必须要等日志落盘结束后才响应请求;

    3. Prometheus插件采集到的数据和queryperf的数据不一致?

      如果压测的时间太短(几秒到几分钟不等),会导致高峰时间持续太短而Prometheus插件无法准确暴露数据,同时还要考虑Prometheus服务端的采集频率已经Grafana面板的显示设置等;最好的方式是进行一段时间较长的压测,如三十分钟以上;

    相关文章

      网友评论

          本文标题:CoreDNS篇7-性能压测

          本文链接:https://www.haomeiwen.com/subject/pevxrrtx.html