DNS可能造成Zabbix Server无法连接到Zabbix Agent终端问题
好久没有更新了,最近Kaijia做科研项目计算又租用了一台支持IPv6的服务器。按照往常Kaijia会在架设完服务器之后设置好Zabbix Agent,后期就使用Zabbix服务监控服务器的稳定性,一般情况下设置完成后服务器就能稳定运行了,Kaijia也很少收到服务器宕机的通知。
但是这次Kaijia遇到了一个奇怪的情况,Zabbix监控间断发出“Zabbix agent on * is unreachable for 5 minutes”提醒,基本上一小时内能有四五次。一开始Kaijia认为此问题是网络连接不稳定造成的(毕竟新的服务器与Zabbix所在的监控服务器物理距离挺远的),于是观察了网络,也没有发现异常。保险起见Kaijia还利用附近一台Zabbix监控一直非常稳定的节点架设了Zabbix Proxy,但仍然没有有效问题。
排除了网络连接的可能性,Kaijia开始考虑其他的可能性。根据官方提供的文档,Zabbix有两种监控模式:被动监控和主动监控。被动监控由Zabbix Server向Zabbix Agent发送请求获取服务器运行情况数据,而主动监控则由Zabbix Agent定时向Zabbix Server发送服务器运行状态信息。主动监控通过密钥与Zabbix Server配对,而被动监控则通过判断请求来源的IP地址是否与配置文件zabbix_agentd.conf中设置的许可IP(或域名)相同返回或拒绝请求。Kaijia的Zabbix Agent都配置使用被动监控模式,因此很快就想到问题可能是由DNS造成的。
Kaijia检查了服务器的resolv.conf文件,发现在服务器指定的三个DNS中果真是以一个不是特别稳定(应该是机房的IPv6技术还在测试造成的)的IPv6服务器为第一选项的:
1 2 3 4 5 |
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 2001:4860:4860::8844 nameserver 8.8.8.8 nameserver 8.8.4.4 |
被动监控模式下Zabbix Agent每收到请求时都会验证IP是否被允许,如配置文件设置成了域名则每次验证都会请求DNS解析(没有缓存),而此DNS设置造成了Zabbix Server请求数据Zabbix Agent验证时无法有效判断Zabbix Server的IP是否被允许,从而造成了无法向Zabbix Server返回数据的情况。
在Kaijia的例子中,只需要设置优先使用IPv4的DNS就可以解决问题。Kaijia修改了/etc/network/interfaces文件中的iface eth0 inet6 static段,将:
1 |
dns-nameservers 2001:4860:4860::8844 2001:4860:4860::8888 8.8.8.8 8.8.4.4 |
改为:
1 |
dns-nameservers 8.8.8.8 8.8.4.4 2001:4860:4860::8844 2001:4860:4860::8888 |
重启后问题就可以解决了。如果只有IPv4的情况下DNS还不稳定那么就需要考虑换用其他的公共DNS了,国内比如114DNS或阿里DNS等,国外则可以考虑Google Public DNS或Level3 Public DNS等。
评论