我知道这一定是我缺乏理解,但这就是问题所在。
我们最近将 DNS 服务器从 192.168.1.1 更改为 .2,因此我访问了所有 8 个 linux 服务器并更改了 /etc/resolv.conf 以反映更改。请注意,它们都是静态的,不涉及 DHCP。
进行更改后,我可以立即使用 nslookup 和 dig 测试结果,一切看起来都不错。我做了 /etc/init.d/networking restart - 重新启动网络子系统 - 并在每台服务器上重新启动 apache 和 postfix,只是为了确定。
几天后,我收到一份报告,说明我们的网站不再发送电子邮件。仔细阅读日志,我发现 mod_php 进程无法解析 dns 条目以发送邮件。在敲了大约 30 分钟后,我重新启动了服务器,一切都恢复了正常。
第二天在另一台服务器上(使用 CentOS 而不是我们正常的 Ubuntu),我收到一份报告,指出电子邮件没有通过,并且确实查看日志表明 Postfix 无法解析名称。重新启动,它几乎立即交付所有排队的邮件。
那么我在这里错过了什么?我没有正确理解这个过程的哪一部分?
你可能被 nscd 咬了:http: //linux.die.net/man/8/nscd
干杯
大多数应用程序在启动时(使用 )初始化解析器一次,
res_init
之后再也不会这样做。对于像 ping 这样的短期应用程序来说这不是问题,但对于长期运行的守护程序来说更严重。Apache 进程(运行 mod_php)可能就是这种情况。重新启动 Apache 就足够了。
resolv.conf 指示解析器在哪里查找名称。在大多数情况下,这将是 libc 解析器,但可能还有其他情况,例如 vPostMaster,它使用 Python DNS 解析器库进行 SPF 查找。
因此,可能是解析器正在为长时间运行的进程缓存 resolv.conf 信息,但听起来你重新启动了 postfix,这应该导致它开始使用新的 resolv.conf 文件。
检查您的 /etc/nsswitch.conf 以查看它是否指定了“主机”发生的任何特殊情况。例如,我笔记本电脑上的默认 Fedora 11 行是:
主机:文件 mdns4_minimal [NOTFOUND=return] dns
所以在这种情况下,它使用 mdns 以及 /etc/hosts 和 DNS。在这种情况下,如果没有发现 DNS 更改,我想知道是否是导致它的 mdns。
肖恩
可能正在进行一些缓存。我们遇到了类似的问题,
sendmail
只是重新启动服务修复了它。有时,只需重新启动服务器并清除系统中任何位置的所有这些缓存,都比花费所有时间识别哪个服务缓存时间过长更容易。另一方面,当它再次发生并且您知道要重新启动哪个服务时,它可能会成为一项投资。