文档中心>私有域解析 Private DNS>实践教程>配置 NSCD 服务实现缓存加速,提高 DNS 可用性

配置 NSCD 服务实现缓存加速,提高 DNS 可用性

最近更新时间:2024-11-19 10:08:52

我的收藏
VPC 内每台 CVM 机器每秒最高 DNS 峰值5000次,单机每秒请求 DNS 峰值超过阈值后,将面临限速风险,可用性 SLA 将无法保证。为了缓解此类情况,建议您从如下两个方面考虑:
扩容 CVM 数量,使得 DNS 查询请求能负载分摊到更多 CVM,从而降低每个 CVM 的 DNS 查询请求量;
CVM 主机开启 NSCD(Name Service Cache Daemon)服务进行缓存加速;
说明:
NSCD 服务开启情况下,会导致变更解析记录的生效时间更长。
本文主要介绍通过开启 NSCD 服务进行缓存加速,降低 CVM 的 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

1. nscd 一般在 Linux 操作系统中默认安装的,如果不确定当前 CVM 是否已经安装了 nscd,可以执行以下命令进行检测:
systemctl status nscd #检查nscd的运行状态。
2. 如果检测结果如下,则说明没有安装 nscd。



3. 执行以下命令进行安装:
yum install -y nscd
4. 再执行命令查看 nscd 的运行状态,此时 nscd 已经安装但是处于未启动状态。




开启 NSCD 服务

1. 执行以下指令开启 nscd 服务:
systemctl start nscd
2. 再执行命令查看nscd的运行状态,nscd 已经处于运行状态。



说明:
CentOS/RedHat 操作系统安装 nscd 指令:yum install -y nscd。
Debian/Ubuntu 操作系统安装 nscd 指令:apt-get install -y nscd。
3. nscd 的默认配置文件路径在/etc/nscd.conf,可以通过执行如下指令查看 nscd 配置:
cat /etc/nscd.conf
关键配置参数说明
配置参数
说明
debug-level
-
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 关闭时拨测
1. 在 CVM 上执行如下命令对53端口 UDP 报文进行抓包:
tcpdump -i any udp and port 53
2. 然后在 nscd 的状态为关闭情况下,在 CVM 上执行多次如下指令,连续拨测三次。
ping -c 1 -n www.qq.com #对域名 www.qq.com 发一次 ping 指令
3. 查看相对应的抓包情况,能够发现53端口3次 DNS 请求查询,并且每次 DNS 请求查询都返回域名解析记录,证明 DNS 请求查询记录并未被缓存,CVM 每次都要通过53端口发送 DNS 请求查询。
NSCD 开启时拨测
1. 执行启动指令将 NSCD 服务开启,并通过状态查询指令确定 NSCD 为开启状态。
2. 在 NSCD 的状态为开启情况下,在 CVM 上执行如下指令,连续拨测6次。同时需要对 CVM 的53端口进行抓包。
ping -c 1 -n www.qq.com
3. 查看相对应的抓包情况,能够发现53端口只抓到1次 DNS 请求查询,证明 DNS 请求查询命中 NSCD 缓存,没有通过53端口发送 DNS 请求查询。
注意:
您在抓包的过程中会发现即使 ping 指令已经执行完毕,但是每隔一段时间 tcpdump 依旧可以查到相关域名 DNS 查询请求报文,这是由于 nscd 的主动刷新机制导致的,属于正常现象。可以通过将 reload-count 参数设置为0关闭主动刷新机制。
您也可以通过执行以下指令来查询缓存命中信息,在一段时间内多次执行 ping 指令后然后查看缓存命中情况。
nscd -g #输出生效后的各个参数选项配置情况和缓存命中率统计等。

如果遇到产品相关问题,您可咨询 在线客服寻求帮助。