我在 Ubuntu 16.04 服务器上使用 haproxy 在两个 carbon-relay 进程之间平衡传入指标的负载时遇到了一些问题。Haproxy 仅与“listen”部分中的服务器列表中的第一个服务器建立 TCP 连接。此外,当我对两个 carbon-relay 端口执行 tcpdump 和 watch 时,只有连接的端口会从 haproxy 接收任何指标,但如果我在服务器条目中启用“check”参数,则运行状况检查会显示在 tcpdump 输出中。
如果我注释掉第一个服务器,或者反转它们的顺序,它就会连接到另一个服务器,而其他测试并没有表明碳中继过程存在任何问题,所以我很困惑为什么它只能连接到一个服务器。
我也尝试了 roundrobin、static-rr 和 leastconn 作为平衡选项。
这是 haproxy.cfg 和 carbon-relay.conf 的相关部分的要点,加上 netstat 输出以显示与一台服务器的监听端口和 tcp 连接。
https://gist.github.com/Calygos/b1442e0936adafb27fc80a76477235e9
答案1
假设您只有一个客户端(本地collectd
进程),HAProxy 就能按应有的方式运行。
它接收来自 的连接collectd
,并选择两个后端服务器中的一个。如果您有更多客户端,那么它将开始平衡两者的流量。
如果你想测试一下,请将balance
算法设置为roundrobin
并重新启动collectd
。Yuu 应该会看到这个新连接到达了另一个后端服务器。
或者,您可以启动第二个连接(使用collectd
,甚至是 telnet),它应该能找到通往第二台服务器的路径。