DNS clients-per-query 参数详解

问题背景

通常内网DNS在生产中的角色如下图,生产机器上的DNS server配置的IP地址为内网DNS的地址,线上机器需要做域名查询的时候,比如访问www.baidu.com,先把dns请求到内网DNS,内网DNS逐级去查询www.baidu.com的地址,查询完毕之后,把结果返回给线上机器;问题出现的背景,线上有服务反馈偶发查询域名会有超时,查询机器的各项基础指标,发现没有出现cpu彪高,网络丢包等问题,DNS server日志查询发现那一个时间段,仍然能收到用户请求,但是有错误提示如下

errors-clinets-per-query

named.conf配置中相对应的参数:
named.conf配置截图

参数介绍

问题锁定在 clients-per-query 参数,和 max-clients-per-query 参数,来看一下这两个参数的意思:

同一时间请求一个域名

在同一时间请求相同域名的次数上有限制,这个参数就是 clients-per-query , 字面上的意思是一次请求的clients数量,这个参数默认是10,就是说默认只能10个client同一时间请求www.baidu.com,这时bind去查询,在查询结果没有返回之前,如果仍然有请求发来,这个时候,Bind就会drop这个请求,client DNS解析失败。如果Bind查询www.baidu.com返回了正确的结果,这是 clients-per-query 这个参数的限制就增加了5,就是说,这次容许15个client来同时查找相同域名,第16个被drop,这次查询成功之后,再增长5,直到增长到 max-clients-per-query,默认是100,就说是每次都能成功查询之后,同时容许100个clients来查询相同的记录;

解决方案

线上环境很容易出现,一个查询被大量查的情况,需要调大 clients-per-query,max-clients-per-query两个参数,具体参数值应该根据线上的情况设定,一般设置100到500,可以满足正常的查询请求,不建议把这两个参数设置成无限大,因为这个机制本身也是Bind保护自己的一个手段,假如大量的clients同时查询错误的域名,这些查询会占用Bind的处理时间。这也是clients-per-query如果查询成功之后,逐次递增设计的原则。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、简述DNS服务器原理,并搭建主-辅服务器。 1)、在浏览器中输入www.baidu.com 域名,操作系统会...
    牵挂包含一种欣赏阅读 3,715评论 0 0
  • DNS 是什么 DNS (Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上...
    interstellar多米诺阅读 7,871评论 0 6
  • DNS工作原理 DNS 查询的过程 DNS( Domain Name System)是“域名系统”的英文缩写,是一...
    ghbsunny阅读 12,955评论 0 0
  • 目录: 一些基本概念主机名DNS名称解析DNS 解析的后端存储名称解析总结 大规模域名解析的体系架构DNS 解析需...
    C86guli阅读 14,315评论 3 34
  • dnsmasq是什么我就不说了,请自行百度。 目前我需要使用的用途是:1.dhcp(分配一个或者多个内网ip地址)...
    dnaEMx阅读 16,506评论 0 6

友情链接更多精彩内容