Linux应用- 使用nscd作为本地dns缓存

1- 背景

公司使用阿里云主机,且首选DNS使用的也是阿里云的。但是有一个face++的业务总是会报UnKnownHostException。抓包查了一波发现虽然阿里DNS有时候会ServFail,但是这些都是请求的域名后面加了localdomain导致的,所以理论上业务不应该出现UnKnownHostException。业务端改了超时时间也增加了retry的次数,但是还是会报UnKnownHostException。感觉是请求太频繁导致的,所以,在云主机本地都启用了nscd。

2- 安装配置

  • 安装很简单
yum install -y nscd
systemctl enable nscd
systemctl start nscd
  • 有需要的话还可以配置一下nscd, /etc/nscd.conf
#设置日志文件
logfile debug-file-name
 
#设置debug记录的级别,默认是0
debug-level value
 
#程序启动时,等待进去请求的处理线程数,至少5个
threads number
 
#最大线程数,默认32
max-threads number
 
#nscd程序以哪个用户运行,如果设置了该选项,nscd将作为该用户运行,
#而不是作为root。如果每个用户都使用一个单独的缓存(-S参数),将忽略该选项。
server-user user
 
#哪个用户可以请求统计用户
stat-user user
 
#在一个缓存项被删除之前允许使用的次数,默认是5
reload-count unlimited | number
 
#是否启用偏执模式,启用会导致nscd周期性重启,默认是no
paranoia <yes|no>
 
#如果启用偏执模式,设置的定期重启nscd的时间间隔,默认是3600秒
restart-interval time
 
#开启或者关闭服务缓存,默认是no
enable-cache service <yes|no>
 
#为成功请求的元素设置缓存TTL,单位是秒,值越大缓存命中率越高,
#降低平均响应时间,但会增加缓存的一致性问题
positive-time-to-live service value
 
#为失败查询元素设置缓存TTL,单位是秒,应保持小值,减小缓存一致性问题
negative-time-to-live service value
 
#内部的散列表大小,value应该保持一个素数以达到优化效果。默认值是211
suggested-size service value
 
#启用或者禁用检查文件是否属于指定的服务,这些文件是/etc/passwd、/etc/group、
#/etc/hosts、/etc/services、/etc/netgroup等
check-files service <yes|no>
 
#设置缓存在服务器重启后,仍旧能提供缓存服务,在使用偏执模式时有用,默认是no
persistent service <yes|no>
 
#为客户端共享nscd数据库在内存中做的映射,使客户端可以直接搜索,
#而不用每次都查询守护进行,默认是no
shared service <yes|no>
 
#该数据库的最大大小,单位是bytes,默认是33554432
max-db-size service bytes
 
#此选项仅使用于passwd和group服务
auto-propagate service <yes|no>

3 其他命令

nscd -g                //查看命中数
nscd -i hosts          //清除缓存

你可能感兴趣的:(Linux应用)