我在 AWS 中的架构如下:
有 2 个相同的 zabbix 代理(基于 zabbix/zabbix-agent:centos-4.0.11),每个代理在不同的 EC2 实例上运行。Zabbix 服务器在第三个实例上运行(也使用 4.0 版本与 docker 化),它们都在同一个 VPC 中。
这个想法是有一个网络负载均衡器,它监听两个代理运行的端口 (10050),并在目标组上注册上述 2 个实例。然后,这个 NLB 的 DNS 将作为接口提供给 Zabbix 主机配置。目标是让多个 zabbix 主机针对同一个 NLB,并根据流量负载将它们的请求路由到不同的代理。每个主机中都有一个 zabbix 代理项,它调用在两个 zabbix 代理 conf 文件中的每一个中定义的 UserParameter(python 脚本)。
我的问题如下:zabbix_get(以及根据主机conf中设置的间隔自动进行的等效调用)偶尔超时。有一次我得到了成功的回应
{“响应”:“成功”,“信息”:“已处理:4;失败:0;总计:4;花费的秒数:0.000106”}
(使用的 python 脚本非常快,只需要 1 秒),其他时候我会得到如下响应:
zabbix_get [4515]:执行操作超时。
这种情况一个接一个地发生。所以一个成功,下一个超时,然后下一个成功,依此类推。
我曾尝试测试与 telnet 的连接,并且它一直有效。我什至尝试使用一个简单的 tcp echo 容器,它也一直运行良好。
任何关于可能出错的想法将不胜感激:)
编辑:只是想注意,这种行为不仅发生在我自定义的 UserParameter 定义的脚本中,还发生在内置代理调用中,例如agent.version
oragent.ping
或net.tcp.port[<serverIp>, 10051]
等
EDIT2:在tcpdump src <serverIp>
代理实例内部运行时,似乎发生了类似的流量,响应成功且超时
所以显然我需要为我的内部 nlb 启用跨 AZ 负载平衡。这就是为什么它每隔一个请求就会超时,因为我的所有实例都在一个可用区域中。