域名解析缓存的必要性

在部署服务的时候,很多程序需要使用域名解析的功能,一般配置/etc/resovl.conf去指定DNS服务器的IP,但是如果程序发起的请求量较大,那么服务器就容易被DNS服务器禁止访问(至于为什么会被禁止,你懂得),同事每次去外网请求DNS解析的话,时延也特别大,乃至发生请求超时的情况,这个是,我们就要配置一个透明的DNS解析缓存服务器,达到的效果如下:

  1. 优化DNS响应速度 通过缓存DNS的请求结果,后续相同的DNS请求不需要在访问公网的DNS请求便可获得结果,减少了网络访问的延时。
  2. 减少DNS服务器对公网的依赖 在缓存周期内,相同的DNS请求不再发生到外网的网络通信行为,可以减少短暂的外部网络不可用导致的影响
NSCD安装配置方法

NSCD(Name server caching Daemon 名称服务缓存进程)不需要对应用程序或者解析器做任何修改,/etc/resovl.conf 也不需要做任何变化,对于系统部署的影响最小。因此NSCD成为linux环境最为广泛的域名缓存软件,本次使用该软件作为域名缓存服务,在CentOS6.6上,安装NSCD的方法比较简单,使用yum安装即可,命令如下:

[root@localhost ~]# yum -y install nscd
[root@localhost ~]# ls /etc/nscd.conf
/etc/nscd.conf #nscd的配置文件

我们看看配置文件,我们主要关心下面这几段,yum安装好后在63行-70行:

 63         enable-cache            hosts           yes
64 positive-time-to-live hosts 3600
65 negative-time-to-live hosts 20
66 suggested-size hosts 211
67 check-files hosts yes
68 persistent hosts yes
69 shared hosts yes
70 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的缓存大小,以字节为单位

启动服务

[root@localhost store]# /etc/init.d/nscd start
验证域名缓存
[root@localhost store]# nscd -g
'''''
hosts cache: yes cache is enabled
yes cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
520 used data pool size
3600 seconds time to live for positive entries
20 seconds time to live for negative entries
0 cache hits on positive entries
0 cache hits on negative entries
0 cache misses on positive entries
0 cache misses on negative entries
0% cache hit rate
0 current number of cached values
0 maximum number of cached values
0 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes [root@localhost ~]# wget -SO /dev/null http://www.baidu.com/ #换不同的域名多wget几次,就发现这数值上去了。 [root@localhost store]# nscd -g
'''''
hosts cache: yes cache is enabled
yes cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
520 used data pool size
3600 seconds time to live for positive entries
20 seconds time to live for negative entries
0 cache hits on positive entries
0 cache hits on negative entries
15 cache misses on positive entries
0 cache misses on negative entries
0% cache hit rate
3 current number of cached values
5 maximum number of cached values
0 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes
[root@localhost ~]# nscd -i hosts # 清空hosts当前缓存条目的

DNS(二)之构建域名解析缓存的更多相关文章

  1. Linux网络学习笔记(二):域名解析(DNS)——以 CoreDNS 为例

    个人笔记,观点不一定正确. 适合对 Kubernetes 有一定了解的同学. 前言 最近一直在学习 Kubernetes,但是手头没有个自有域名,要测试 ingress 就比较麻烦,每次都是手动改 h ...

  2. linux之DNS主域,从域,缓存服务器的架设

    DNS主域,从域,缓存服务器的架设 DNS域名系统 组织域 顶级域  域名解析过程迭代递归 DNS(Domain Name System ) 在Internet中使用IP地址来确定计算机的地址. 为了 ...

  3. 使用Guava cache构建本地缓存

    前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...

  4. 用Linkedhashmap的LRU特性及SoftReference软引用构建二级缓存

    LRU: least recently used(近期最少使用算法).LinkedHashMap构造函数可以指定其迭代顺序:LinkedHashMap(int initialCapacity, flo ...

  5. 转:Java SoftReference 使用构建对象缓存

    本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用   在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说, ...

  6. 分布式数据存储 之 Redis(二) —— spring中的缓存抽象

    分布式数据存储 之 Redis(二) -- spring中的缓存抽象 一.spring boot 中的 StringRedisTemplate 1.StringRedisTemplate Demo 第 ...

  7. C# 动态构建表达式树(二)——构建 Select 和 GroupBy 的表达式

    C# 动态构建表达式树(二)--构建 Select 和 GroupBy 的表达式 前言 在上篇中写了表达式的基本使用,为 Where 方法动态构建了表达式.在这篇中会写如何为 Select 和 Gro ...

  8. dig与dns基本理论——解析和缓存

    DNS(Domain Name System,域名系统)也许是我们在网络中最常用到的服务,它把容易记住的域名,如 www.google.com 翻译成人类不易记住的IP地址,如 173.194.127 ...

  9. DNS(域名系统)域名解析设置

    DNS(Domain Name System,域名系统), 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最 ...

随机推荐

  1. ajax post(copy part)

    srcpage var q=new XMLHttpRequest(); var data='usr=weidiao&pwd=haha'; data=encodeURI(data); var u ...

  2. 从scrapy使用经历说开来

    关于scrapy这个Python框架,萌萌的官网这么介绍: An open source and collaborative framework for extracting the data you ...

  3. 【CSS3】 线性渐变

    参考地址:http://www.w3cplus.com/css3/new-css3-linear-gradient.html background-image: linear-gradient(to ...

  4. SharePoint配置搜索服务和指定搜索范围

    转载:http://constforce.blog.163.com/blog/static/163881235201201211843334/ 一.配置SharePoint Foundation搜索 ...

  5. 使用D3绘制图表(7)--饼状图

    这次是绘制饼状图,也是这一次使用D3绘制图表的最后一篇,大家可以从其他地方深入学习D3绘制图表,也可以直接查看D3的API进行学习,本次绘制饼状图的数据跟之前的卸载数组里面的不一样,这一次是使用d3的 ...

  6. userAgent收集

    UserAgent AppleWebKit,Gecko,Trident,Presto http://www.httpuseragent.org/list/ 谷歌:360? Mozilla/5.0 (W ...

  7. mysql-异常Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

    这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 网上摘抄的问题解决方案:http:// ...

  8. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  9. 系统间通信(8)——通信管理与RMI 上篇

    1.概述 在概述了数据描述格式的基本知识.IO通信模型的基本知识后.我们终于可以进入这个系列博文的重点:系统间通信管理.在这个章节我将通过对RMI的详细介绍,引出一个重要的系统间通信的管理规范RPC, ...

  10. 【USACO 1.3】Ski Course Design

    n个点(n<=1000)大小范围[0,100],改变一些点的值,使得极差不超过17,代价为改变值的平方. 枚举修改后的最低高度low,维护最小代价. /* TASK: skidesign LAN ...