HAProxy 无法为远程计算机上的代理绑定套接字

HAProxy 无法为远程计算机上的代理绑定套接字

我正在使用 HAProxy 在我的两个 tomcat 后端服务器上对传入请求进行负载平衡。在配置文件中,当我指定 HAProxy 监听安装了 HAProxy 的同一台机器时,一切都很正常,它开始像魔法一样工作。我需要 HAProxy 监听另一台机器上的虚拟 IP(这样我就可以安装另一个 LB 作为故障转移),但是当我配置 HAProxy 这样做时,我在启动 HAProxy 时收到此错误:

无法绑定代理 http_proxy 的套接字。正在中止。

这是我的配置文件:

global
    maxconn 4096 # Total Max Connections. This is dependent on ulimit
    daemon
    nbproc 4 
defaults
    mode http
    clitimeout 60000
    srvtimeout 30000
    contimeout 4000
    option httpclose # Disable Keepalive

listen http_proxy 10.0.5.99:80 #the virtual IP I want to listen to
    mode http
    stats enable
    stats auth xxx:xxx
    balance source # Load Balancing algorithm
    option httpchk
    option forwardfor # This sets X-Forwarded-For
    ## Define your servers to balance
    server web1 10.0.5.102:8080 weight 1 maxconn 512 check
    server web2 10.0.5.103:8080 weight 1 maxconn 512 check

我正在使用安装在一些虚拟机上的 CentOS 5.1。必须说的是,我完全停止了远程机器上的 iptables 服务,但问题仍然存在。我猜想远程机器上的某些东西正在干扰 haproxy。有什么想法吗?

答案1

net.ipv4.ip_nonlocal_bind=1您还可以通过添加/etc/sysctl.conf并运行来允许进程绑定到非本地(即不存在的 IP)sysctl -p。但是 sysadmin1138 是有效的:您可能需要查看如何构建故障转移。

答案2

当执行故障转移配置(如您所说)时,我发现最好让集群机制处理 IP 地址的移动,而不是以某种方式在 HAProxy 中执行此操作。您配置虚拟 IP 地址以在节点之间移动,然后将其配置为让服务 (HAproxy) 遵循该虚拟 IP。然后,您将 HAProxy 配置为仅侦听虚拟 IP。这有效,因为它是聚类软件在 HAproxy 进程移动时启动和停止它,您不能从正常服务中执行此操作。

答案3

您收到此错误是因为 haproxy 尝试侦听不存在的 IP 地址。似乎您在 VIP 分配给机器之前启动了 haproxy 进程。

一个解决方案是监听所有接口。然后,您可以根据需要0.0.0.0限制对 VIP 的访问。iptables

另一个选项是监听 VIP,但您需要确保在启动 haproxy 时 VIP 存在。这可以通过让集群软件(例如 keepalived)在获取 VIP 时为您启动 haproxy 来实现。

答案4

请参阅上面有关设置的答案net.ipv4.ip_nonlocal_bind=1

如果这不起作用,请检查您是否已经有现有服务在您尝试绑定的端口上监听sudo lsof -i :80

相关内容