HAProxy没有可用的服务器

我正尝试在CentOS 7中设置一个非常简单的HTTP负载均衡器和node.js后端。后端都是HTTP服务器。

如果我将后端设置为在端口80上侦听,并且HAProxy在端口80上侦听并在后端上使用端口80,则一切正常。 这是configuration文件在这样的configuration中的外观:

global log 127.0.0.1 local2 info chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 256 user haproxy group haproxy daemon defaults mode http log global option httplog timeout connect 10s timeout client 30s timeout server 30s frontend http-in bind :80 default_backend backend_servers option forwardfor backend backend_servers balance roundrobin server backend1 10.0.4.51:80 check # server backend2 10.0.4.52:80 check # server backend3 10.0.4.53:80 check # server backend4 10.0.4.54:80 check # server backend5 10.0.4.55:80 check # server backend6 10.0.4.56:80 check 

但是,如果我改变所有的端口说8124,HAProxy启动时显示以下错误:

 haproxy[3324]: backend backend_servers has no server available! 

这是新configuration的样子

 global log 127.0.0.1 local2 info chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 256 user haproxy group haproxy daemon defaults mode http log global option httplog timeout connect 10s timeout client 30s timeout server 30s frontend http-in bind :8124 default_backend backend_servers option forwardfor backend backend_servers balance roundrobin server backend1 10.0.4.51:8124 check # server backend2 10.0.4.52:8124 check # server backend3 10.0.4.53:8124 check # server backend4 10.0.4.54:8124 check # server backend5 10.0.4.55:8124 check # server backend6 10.0.4.56:8124 check 

当然,后端node.js程序现在正在监听端口8124。

防火墙在后端的端口8124处打开,并执行以下命令:

 wget http://10.0.4.51:8124/action 

负载平衡器完美工作,这表明负载平衡器确实可以访问后端。

在这种情况下,HAProxy似乎无法启动,因为我在使用netstat -an时看不到端口8124处于LISTEN状态。

这是我第一次使用HAProxy,所以我可能会错过一些非常微不足道的东西。

还有什么我应该检查?

我只是想出来了。

问题不在于HAProxy的configuration,而在SELinux中,在CentOS 7中启用并设置为强制执行模式。看起来SELinux的默认configuration只允许在端口80上使用HAProxy。

将SELinux设置为宽容模式,完全禁用它,或者让SELinux允许HAProxy使用其他端口来解决问题。

您可以使用semanage来允许使用端口的HAProxy:

 sudo semanage port -a -p tcp -t http_port_t 8124