为什么必须重新引导linux服务器才能正确处理resolv.conf中的更改?


8

我知道这一定是我缺乏理解,但这是问题所在。

我们最近将DNS服务器从192.168.1.1更改为.2,因此我遍历了所有8台linux服务器,并更改了/etc/resolv.conf以反映更改。请注意,它们都是静态的,不涉及DHCP。

进行更改后,我可以立即使用nslookup和dig测试结果,一切看起来都不错。我确实进行了/etc/init.d/networking重新启动-以重新启动网络子系统-并在每台服务器上重新启动了apache和postfix。

几天后,我收到一份报告,指出我们的网站不再发送电子邮件。仔细查看日志,我发现mod_php进程无法解析dns条目来发送邮件。在头上敲了大约30分钟之后,我重新启动了服务器,一切恢复正常。

第二天,在另一台服务器上(使用CentOS而不是普通的Ubuntu),我收到了一份报告,指出电子邮件没有通过,并且足够肯定地查看日志表明Postfix无法解析名称。重新启动后,它几乎立即传送了所有排队的邮件。

那我在这里想念什么?我未能正确理解此过程的哪一部分?

Answers:


11

您可能被nscd咬了:http : //linux.die.net/man/8/nscd

干杯


谢谢!这很可能给我带来了问题。我什至不知道本地dns缓存是普通linux系统的一部分。
灰色,

你真的测试过吗?杰森的假设是可能的,但不确定。
bortzmeyer

@bortzmeyer-是的,我同意。您自己的答案与我所给的答案相同(最近确实有两个相关问题)。与nscd相比,它更有可能被缓存为res_init()状态。
Alnitak

8

大多数应用程序在启动时(使用res_init)会初始化解析器一次,以后再也不会执行。对于像ping这样的短寿命应用程序来说,这不是问题,但对于长时间运行的守护程序而言,则更为严重。

在这种情况下,可能是Apache进程(运行mod_php)。重新启动Apache就足够了。


3

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。

肖恩


1

可能正在进行一些缓存。我们也遇到类似的问题,sendmail只是重新启动服务即可解决它。

有时,重新启动服务器并清除系统中任何位置的所有这些缓存比花所有时间识别哪个服务缓存时间长要容易。另一方面,当它再次发生并且您知道要重新启动哪个服务时,可能证明是一项投资。


我同意,重新启动是最简单的方法,但是如果服务器很重要,则很难找到重新启动的时间。谢谢你的帮助!
灰色,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.