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

我正在使用HAProxy负载平衡我的两个tomcat后端服务器上的传入请求。 在configuration文件中,当我指定HAProxy来听安装HAProxy的同一台机器时,一切正常,并开始像魅力一样工作。 我需要HAProxy听另一台机器上的虚拟IP(这样我可以安装另一个LB作为故障转移),但是当我configurationHAProxy这样做时,启动HAProxy时出现此错误:

无法为代理http_proxy绑定套接字。 中止。

这里是我的configuration文件:

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。 有任何想法吗?

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

当你像你说的那样做一个故障转移configuration的时候,我发现最好让群集机制处理IP地址的移动,而不是在HAProxy中做某种事情。 您将虚拟IP地址configuration为在节点之间移动,然后将其configuration为使服务(HAproxy)跟随该虚拟IP。 然后,您将HAProxyconfiguration为只侦听虚拟IP。 这是可行的,因为它是集群软件启动和停止HAproxy过程,因为它移动,你不从正常的服务。

您正在收到错误,因为haproxy试图侦听不存在的IP地址。 看来你是开始之前,VIP分配到机器haproxy进程。

一个解决scheme是在所有接口0.0.0.0上侦听。 然后,您可以根据需要使用iptables限制对VIP的访问。

另一种select是在VIP上收听,但是在启动haproxy时需要确保VIP存在。 这可以通过让集群软件(如keepalived)在获取VIP时为您启动haproxy来完成。

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

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