当前位置: 首页 > news >正文

CoreDNS实战(九)-性能压测

本文主要用于介绍如何编译安装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 queryperfqueryperf: 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 -hDNS 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 数据汇总

机器配置机器配置性能表现
虚拟机多插件配置+全量日志记录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面板的显示设置等;最好的方式是进行一段时间较长的压测,如三十分钟以上;

相关文章:

  • IDEA连接Redis注意事项
  • Arduino项目式编程教学第三章——红外遥控灯
  • CSS单位vmin、vmax
  • 【JMeter】BeanShell了解基础知识
  • C/C++---------------LeetCode第118. 杨辉三角
  • RT-Thread Studio文件消失不见或被排除构建
  • 【唐山海德教育】职称评审需要什么条件呢?
  • 2-- 简要介绍 Kubernetes
  • 【Python】zip
  • 【Openstack Train安装】五、Memcached/Etcd安装
  • 【工作生活】汽车电子嵌入式开发简介
  • python socket编程7 - 使用PyQt6 开发UI界面新增实现UDP server和client单机通讯的例子
  • 并发集合框架
  • jupyter notebook搭建
  • 封装ThreadLocal
  • httpie使用详解
  • Linux中的硬链接与软链接
  • PHP的Ev教程三(Periodic watcher)
  • PHP的类修饰符与访问修饰符
  • Python打包系统简单入门
  • Redis 懒删除(lazy free)简史
  • Redis 中的布隆过滤器
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 聊聊directory traversal attack
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信小程序填坑清单
  • 国内开源镜像站点
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $jQuery 重写Alert样式方法
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (14)Hive调优——合并小文件
  • (TOJ2804)Even? Odd?
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (算法)N皇后问题
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)Linux下编译安装log4cxx
  • (转)memcache、redis缓存
  • (转)创业家杂志:UCWEB天使第一步
  • ***原理与防范
  • .Net core 6.0 升8.0
  • .NET MVC 验证码
  • .NET导入Excel数据
  • .NET简谈设计模式之(单件模式)
  • .net连接MySQL的方法
  • .NET中GET与SET的用法
  • @ComponentScan比较
  • @EnableAsync和@Async开始异步任务支持
  • @拔赤:Web前端开发十日谈
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——