返回介绍

最佳实践 2:构建域名解析缓存

发布于 2025-04-20 17:44:38 字数 2647 浏览 0 评论 0 收藏 0

域名解析缓存的必要性

在部署服务器时,很多应用程序需要调用域名解析服务,一般通过配置/etc/resolv.conf 来指定 DNS 服务器的 IP。但如果程序发起的请求量较大,那么服务器就容易被这些 DNS 服务器禁止访问;同时每次都去访问外部 DNS 服务器,会导致延时增大,遇到网络问题时,还会发生解析不成功的情况。在这种情况下,需要配置一个透明的 DNS 解析缓存服务,以达到如下的效果。

- 优化 DNS 响应速度。通过缓存 DNS 的请求结果,后续相同的 DNS 请求不再通过访问任何外部网络服务器来获得结果,减少了网络访问的延时。

- 减少 DNS 对外部网络的依赖。在缓存周期内,相同的 DNS 请求不再发生网络通信行为,可以减少短暂的外部网络不可用导致的影响。

NSCD 安装配置方法

NSCD(Name Service Caching Daemon,名称服务缓存进程)不需要对应用程序或者解析器做任何修改,/etc/resovl.conf 也不需要做任何变化,对于系统部署的影响最小。因此,NSCD 成为 Linux 环境中得到最广泛的使用的域名缓存软件。本实践使用该软件构建域名缓存服务。在 CentOS 6.6 上,安装 NSCD 的方法比较简单,使用如下命令:

yum -y install nscd

NSCD 的配置文件是/etc/nscd.conf,核心的配置代码段如下:

     enable-cache          hosts          yes
     positive-time-to-live     hosts          3600
     negative-time-to-live     hosts          20
     suggested-size          hosts          211
     check-files          hosts          yes
     persistent          hosts          yes
     shared               hosts          yes
     max-db-size          hosts          33554432

其中:

- enable-cache 指定对 DNS 解析进行缓存。

- positive-time-to-live 是指对解析成功的 DNS 结果进行缓存的时间。

- negative-time-to-live 是指对解析失败的 DNS 结果进行缓存的时间。例如网络故障导致的 DNS 解析失败或者请求的 DNS 条目没有配置等。

- suggested-size 是 NSCD 内部的哈希表的大小,如果缓存条目数量远大于默认的 211(如 10 倍以上,则修改此值)。

- check-files 是指是否检查/etc/hosts 文件的变化。

- persistent 是指是否在重启 NSCD 进程时保留已缓存的条目。

- shared 是指是否允许客户端直接查询 NSCD 的内存镜像以获得结果。

- max-db-size 是指 DNS 的缓存大小,以字节为单位。

域名解析缓存验证

在部署了 NSCD 后,可以使用如下命令检查结果:

wget http://www.xufeng.info/index.html

同时结合 tcpdump 抓包,可以发现连续的多次该请求,只是在第一次时产生了网络 DNS 请求,后续的 wget 命令,直接使用了 NSCD 的缓存结果,没有产生网络 DNS 请求。

另外,可以使用如下命令确认 NSCD 的缓存效果:

nscd -g
hosts cache:
             23  cache hits on positive entries #缓存命中的次数
              0  cache hits on negative entries
             13  cache misses on positive entries #缓存未命中的次数
              0  cache misses on negative entries
             63% cache hit rate #缓存命中率
             12  current number of cached values #当前缓存的条目
             13  maximum number of cached values

通过观察发现,cache hits on positive entries 这个字段的值不断增加,由此可以确认域名解析缓存是生效的。

在 Windows 系统中,每次 DNS 请求后,系统会按照响应结果进行缓存,使用如下命令可以看到当前系统中缓存的条目:

ipconfig /displaydns
edu.csdn.net
 ----------------------------------------
 记录名称. . . . . . . : edu.csdn.net 
 记录类型. . . . . . . : 1 #1 为 A 记录,5 为 CNAME 别名等
 生存时间. . . . . . . : 123 #在此时间内,本缓存记录有效
 数据长度. . . . . . . : 4
 部分. . . . . . . . . : 答案
 A (主机) 记录  . . . . : 101.201.171.118 #对应的解析结果

使用如下命令可以清理本机的 DNS 缓存:

ipconfig /flushdns

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。