- 最新动态
- 功能总览
- 产品介绍
- 快速入门
- 用户指南
- 最佳实践
- API参考
- SDK参考
- 场景代码示例
-
常见问题
-
产品咨询类
- 云解析服务是否计费?
- 支持创建多少个域名/记录集/反向解析?
- 华为云DNS对用户提供域名服务的DNS服务器地址是什么?
- 华为云云解析服务提供的内网DNS地址是多少?
- 公网解析与内网解析有什么区别?
- 是否同时支持IPv4和IPv6解析?
- 是否支持显性/隐性URL转发功能?
- 是否支持动态域名解析?
- 是否支持泛解析?
- 什么是TTL值?
- 云解析服务最高支持几级域名?
- 域名解析的顺序是什么?
- DNS解析线路的优先级顺序是什么?
- SOA记录中的Email格式为什么变化了?
- 什么是CAA?
- MX优先级有什么意义?
- 云解析服务是否支持端口解析?
- 如何配置NSCD服务实现缓存加速并提高DNS可用性?
- 怎样提高自建DNS的响应时效?
- 如何使用Serving Stale提高自建DNS的解析成功率?
- 如何配置Nginx解析域名?
- 是否支持通过EDNS获取客户端真实IP地址实现精准调度?
- 域名解析不生效
- 网站无法访问
- 公网域名解析
- 内网域名解析
- 反向解析
- 域名转移
- 邮箱解析
-
产品咨询类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
如何配置NSCD服务实现缓存加速并提高DNS可用性?
VPC内每台ECS机器每秒最高DNS峰值为2000次,单机每秒请求DNS峰值超过阈值后,将面临限速风险,无法保证可用性SLA。
为了缓解此类情况,建议您从如下两个方面考虑:
- 扩容ECS数量,使得DNS查询请求能够负载分摊到更多的ECS,从而降低每个ECS的DNS查询请求量。
- ECS主机开启NSCD(Name Service Cache Daemon)服务进行缓存加速。
说明:
NSCD服务开启情况下,会导致变更解析记录的生效时间更长。
本文主要介绍通过开启NSCD服务进行缓存加速,降低ECS的DNS查询请求数。
什么是NSCD?
NSCD(Name Service Cache Daemon)是一个系统缓存服务,用户缓存名称服务信息,例如passwd、group、hosts、services以及netgroup等,它可以提高系统查询缓存命中率,从而减少对名称服务的查询次数和流量消耗,进而加快服务响应速度。
NSCD常用Linux指令
指令 |
说明 |
---|---|
yum install -y nscd |
安装nscd。 |
systemctl start nscd |
启动nscd。 |
systemctl stop nscd |
停止nscd。 |
systemctl restart nscd |
重新启动nscd。 |
systemctl status nscd |
查询nscd的运营状态。 |
nscd -g |
输出生效后的各个参数选项配置情况和缓存命中率统计。 |
nscd -i |
使指定的缓存失效,可以指定passwd、group、hosts、services、netgroup等,例如:nscd -i hosts。 |
cat /etc/nscd.conf |
查询当前nscd配置详情。 |
vi /etc/nscd.conf |
修改nscd配置参数。 |
安装NSCD
NSCD一般在Linux操作系统中默认安装的,如果不确定当前ECS是否已经安装了NSCD,可以执行以下指令检测NSCD运行状态:
systemctl status nscd#检查nscd的运行状态
如果检测结果如下,则说明没有安装nscd。
执行以下指令安装NSCD:
yum install -y nscd
再执行指令查看NSCD的运行状态,此时NSCD已经安装但是处于未启动状态。
开启NSCD
执行以下指令开启nscd服务:
systemctl start nscd
此时再执行执行查看NSCD已经处于运行状态。
- CentOS/RedHat操作系统安装nscd指令:yum install -y nscd
- Debian/Ubuntu操作系统安装nscd指令:apt-get install -y nscd
NSCD的默认配置文件路径在/etc/nscd.conf,可以通过执行如下指令查看NSCD配置:
cat /etc/nscd.conf
具体参数请参考表2
参数 |
说明 |
---|---|
reload-count |
跟缓存主动刷新有关,此配置参数决定了请求成功缓存主动去查询并更新缓存的次数。 |
paranoia |
偏执模式,如果开启则NSCD会周期性的重启。 |
restart-interval |
如果paranoia开启,此参数表示重启间隔时间。 |
enable-cache |
开启缓存服务。 |
positive-time-to-live |
请求成功响应缓存的生存时间。 |
negative-time-to-live |
请求失败响应缓存的生存时间,建议设置为0,以免失败的缓存影响业务请求。 |
check-files |
定期检查/etc/passwd、/etc/group、/etc/hosts等缓存文件的修改时间,如果文件从上次检查之后做过更改,则缓存失效。 |
persistent |
开启时,NSCD在重启之后会保留之前的缓存内容,如果paranoia开启,建议开启此功能。 |
shared |
用于服务NSCD数据库的内存映射与客户端共享,默认:yes。 如果想利用nscd -g指令查询缓存命中率,则shared需要设置为no。 |
max-db-size |
NSCD缓存数据库的最大大小,单位为Byte。 |
- positive-time-to-live无实际意义,TTL值以DNS查询请求返回的TTL为准。
- shared参数值设置为no时,才能通过执行nscd -g查询缓存命中率。
NSCD缓存效果监测
NSCD关闭时拨测
- 在ECS上执行如下命令对53端口UDP报文进行抓包:
tcpdump -i any udp and port 53
- 在NSCD的状态为关闭情况下,在ECS上执行多次如下指令,连续拨测三次。
ping -c 1 -n www.huaweicloud.com#对域名www.huaweicloud.com发一次ping指令。
- 查看相应的抓包情况,能够发现53端口3次DNS请求查询,并且每次DNS请求查询都返回域名解析记录,证明DNS请求查询记录并未被缓存,ECS每次都要通过53端口发送DNS请求查询。
NSCD开启时拨测
- 执行启动指令将NSCD服务开启,并通过状态查询指令确定NSCD为开启状态。
- 在NSCD的状态为开启情况下,在ECS上执行如下指令,连续拨测6次。同时需要对ECS的53端口进行抓包。
ping -c 1 -n www.huaweicloud.com
- 查看相应的抓包情况,能够发现53端口只抓到1次DNS请求查询,证明DNS请求查询命中NSCD缓存,没有通过53端口发送DNS请求查询。
- 您在抓包的过程中会发现即使ping指令已经执行完毕,但是每隔一段时间tcpdump依旧可以查到相关域名DNS查询请求报文,这是由于NSCD的主动刷新机制导致的,属于正常现象。可以通过将reload-count参数设置为0关闭主动刷新机制。
- 您也可以通过执行以下指令来查询缓存命中信息,在一段时间内多次执行ping指令后然后查看缓存命中情况。
nscd -g#输出生效后的各个参数选项配置情况和缓存命中率统计等。