证监会:加强对拟上市公司投资的离职系统员工监管
06-17
一、简介 NSCD(Name Service Cache Daemon)是一个系统缓存服务,用于缓存常见的名称服务信息,如用户、组、主机名和服务。它可以提高系统的性能,减少对名称服务的频繁查询和网络流量,从而加快系统的响应速度。
NSCD 在许多 Linux 发行版中默认安装,可以使用 systemctl status nscd 命令检查其运行状态。如果需要启动、停止或重新启动 NSCD,可以使用 systemctl start nscd、systemctl stop nscd 或 systemctl restart nscd 命令。
如果在/etc/Hosts中指定了IP解析域名,在实际请求过程中发现没有生效,那么就需要考虑系统中是否存在nscd进程。开启nscd的hosts缓存服务后,会首先搜索nscd缓存表。
如果在缓存表中没有找到并且/etc/hosts中也不存在,那么就会正常发起dns查询。 2. 安装一些发行版。
nscd 是系统内置的(GNB Lib C 库)。如果不是内置或者使用的是最小安装系统,可以直接从软件源安装。
Distro 安装命令 CentOS/RedHatyum install -y nscd Debian/Ubuntuapt-get install -y nscd Arch/Manjaro pacman -Sy glibc Gentoo USE="nscd"emerge --ask glibc Gentoo 必须加上 nscd 的 USE 标记,否则 nscd 包默认不携带。3、nscd.conf参数含义说明。
默认配置文件路径位于/etc/nscd.conf 中。使用grep和sed过滤掉空行和注释后,可以看到默认的配置。
这里,注释掉了每一行的含义: Code Language: shell copy $ grep -vE '^$|^#' /etc/nscd.conf|sed -nr 's/^\s*//gpdebug-level 0paranoia noenable-cache passwd yespositive-time-to-live passwd negative-time-to-live passwd 20suggested-size passwd check-files passwd yespersistent passwd yesshared passwd yesmax-db-size passwd auto-propagate passwd yesenable-cache group yespositive-time-生存组 负生存时间组 60 建议大小组 检查文件组 yespersistent 组 yesshared 组 yesmax-db-size 组自动传播组yesenable-cache 主机 yespositive-time-to-live 主机 yes-time-to-live 主机 负-time-to-live 主机 20suggested-size 主机 check-files 主机 yespersistent 主机 yesshared 主机 yesmax-db-size 主机启用缓存服务 yespositive-time-to-live 服务0 负生存时间服务 20 建议大小服务 检查文件服务 yes 持久服务 yes 共享服务 yes 最大数据库大小服务启用缓存网络组 yes 正生存时间网络组 0 负生存时间网络组 20 建议大小网络组检查文件网络组是持久网络组是共享网络group yesmax-db-size netgroup 这些参数的详细说明可以通过man nscd.conf查看。下面是一些常用参数的解释: 参数说明 debug-level 调试级别,0 表示不输出任何信息 paranoia paranoid 模式,启用 paranoid 模式会导致 nscd 周期性重启。
enable-cache 启用缓存。 Positive-time-to-liveTTL 缓存时间,默认 s。
负生存时间 如果名称服务找不到条目,??则会将其添加到缓存中并标记为“不存在”。此选项设置从缓存中删除不存在的条目后的时间。
密码和主机缓存默认为20秒,组缓存默认为60秒。 suggest-size 设置用于存储缓存项的哈希的大小。
由于这是一个散列,正常应该大于预期缓存的最大条目数,并且应该是素数。默认为条目。
check-files 定期检查 /etc/passwd、/etc/group 或 /etc/hosts(分别用于 passwd、组和主机缓存)的修改时间,如果自上次检查后文件已更改,则使缓存无效。 persist 保留缓存内容,以便在 nscd 重新启动时可以提供服务。
设置偏执模式时很有用。共享 用于服务 nscd 数据库的内存映射与客户端共享,以便客户端可以直接在其中搜索,而不必在每次执行查找时通过套接字询问守护进程。
max-db-size 用于配置 nscd 缓存数据库的最大大小,单位为 Byte。auto-propagate会自动将缓存数据的变化广播给其他进程,以保证缓存数据的一致性。
等待请求的线程数。 logfile 日志文件路径。
server-user是运行用户,即使用哪个用户来运行nscd服务。 4. nscd 命令选项说明 1. -d, --debug 在当前终端下以调试模式运行,可以看到输出的调试日志。
nscd 进程将在当前终端中运行。如果后台已经有nscd服务,可以使用systemctl stop nscd来暂停它。
2. -f, --config-file=NAME 指定nscd的配置文件路径: 代码语言:shell copy nscd -f /etc/nscd.conf 3、 -F, --foreground 在前台运行,不会输出信息被打印到屏幕上。代码语言:shell copy nscd -F。
当然,如果你想后台运行,也可以使用 nohup & 或 screen 来实现,但是 nscd 默认已经被 systemd 控制了,所以不需要做任何额外的事情。这里我们只是展示一下各个参数的作用。
4. -g, --statistics 输出当前配置统计信息,生效后输出各参数选项的配置和缓存命中率统计信息。代码语言:shell copy nscd -g 我这里只配置了hosts缓存: 代码语言:shell copy $ grep -vE '^$|^#' /etc/nscd.conf|sed -nr 's/^\s*/ / gp'debug-level 4paranoia nologfile /var/log/nscd.logenable-cache 主机 yespositive-time-to-live 主机 negative-time-to-live 主机建议大小的主机 check-files 主机 nopersistent 主机 yesshared 主机 yesmax-db - sizehosts 可以看到输出信息参数值全部正确:5、-i、--invalidate=TABLE使指定的缓存失效,后面可以是:passwd、group、hosts、services、netgroup。
例如,要使hosts缓存失效: 代码语言:shell copy nscd -i ports6, -K, --shutdown 终止nscd进程。该选项不会影响systemd管理的nscd服务进程。
代码语言:shell copy nscd -K7, -t, --nthreads=NUMBER 指定要运行的线程数。代码语言:shell copy nscd -t <线程数> 通过/etc/nscd.conf配置文件中的threads选项指定。
5、实际使用:以缓存主机为例。其他表缓存参数没有区别。
/etc/nscd.conf 配置如下: 代码语言:shell copy debug-level 4paranoia nologfile /var/log/nscd.logenable-cache 主机 yespositive-time -to-live 主机 negative-time-to-live 主机建议- sizehosts check-fileshostsnoperstatichostsyessharedhostsyesmax-db-sizehosts 重启nscd服务: 代码语言:shell copy systemctl restart nscd.service 首先验证缓存是否可以命中。对于第一个 ping,nscd 没有相关的缓存条目,因此将其添加到缓存中。
第二次 ping 时,从缓存中获取结果。 1. check-files 在上面的配置中,check-files是关闭的,即当我们修改hosts文件时,不会触发缓存更新。
域名缓存到nscd后,尝试修改/etc/hosts,再次访问域名。发现/etc/hosts不会被访问。
这时我们启用配置文件的check-files选项,重启nscd服务,并清除hosts。缓存: 代码语言: shell copy $cat /etc/nscd.confdebug-level 4paranoia nologfile /var/log/nscd.logenable-cache 主机 yespositive-time-to-live 主机 negative-time-to-live 主机建议大小的主机check-fileshosts yespersistenthosts yessharedhosts yes$ systemctl restart nscd$ nscd -ihosts 再次尝试查看 /etc/hosts 是否会被访问:结果符合预期。
以qq.com为例,nscd进程会监控/etc/hosts。当修改被触发时,旧的缓存条目将被清除。
下次访问时会找到缓存的qq.com域名。然后先去/etc/hosts找到地址并添加到缓存中。
2、dig和nslookup这两个命令处理逻辑不会读取/etc/hosts,也不会去nscd缓存。相反,他们会直接将 dns 查询发送到 /etc/resolv.conf 中配置的 NS。
但实际访问域名时,会使用nscd缓存。缓存不会搜索/etc/hosts。
如果没有找到/etc/hosts,则会正常发起dns查询。使用getent命令来测试域名实际会首先解析到系统中的哪个地址: 代码语言:shell copy getent
它是另一个IP,如果指定/etc/hosts则没有任何作用。这时就必须考虑nscd缓存和check-files的启用状态。
3、抓包验证:首先通过nscd -ihosts清除缓存条目,然后使用getent或者其他命令访问域名触发DNS解析获取A记录(如下图的三个IP) );此时修改/etc/hosts,由于nscd.conf的check-files开启,检测到/etc/hosts文件的变化后,清除qq.com的缓存条目;此时,我们使用 ping 命令再次触发解析,nscd 没有 qq.com 缓存(前面已经清除了 qq.com 的缓存条目),读取 /etc/hosts 文件,匹配... 1.内网地址,nscd将内网地址添加到缓存中;此时第二次执行getent,将nscd缓存匹配到qq.com..1.,就不会再发起A记录的dns查询请求了。从下图中可以看到整个过程。
6.总结 NSCD的主要功能是缓存名称服务查询的结果,可以加快名称服务查询的速度。查询结果不必每次都从网络或本地DB(/var/cache/nscd)获取,因此在一定程度上是可以利用的。
减少网络和本地数据库的负载。由于此功能,如果缓存的查询结果过时或不准确,则可能会导致应用程序出现错误或安全问题。
此外,如果 nscd 服务失败,可能会导致名称服务查询失败或变慢。同时,nscd可以缓存多种名称服务数据库,包括hosts、passwd、group、services、netgroup等。
对于每个数据库,nscd可以配置其缓存大小、生存时间等参数,以满足不同的需求。总之,nscd是一个优秀的名称服务缓存守护进程,可以提高系统的名称服务性能。
但在实际应用中,需要注意配置参数,避免出现缓存不一致等问题。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-21
06-21
06-18
06-17
06-17
06-17
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用