HAProxy 没有可用的服务器

Pan*_*ama 7 haproxy

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

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

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
Run Code Online (Sandbox Code Playgroud)

但是,如果我将所有端口更改为 8124,HAProxy 在启动时会显示以下错误:

haproxy[3324]: backend backend_servers has no server available!
Run Code Online (Sandbox Code Playgroud)

这是新配置的样子

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
Run Code Online (Sandbox Code Playgroud)

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

防火墙在后端打开8124端口,命令如下:

wget http://10.0.4.51:8124/action
Run Code Online (Sandbox Code Playgroud)

从负载均衡器完美运行,这表明负载均衡器确实可以访问后端。

在这种情况下,HAProxy 似乎无法启动,因为我在LISTEN使用netstat -an.

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

还有什么我应该检查的吗?

Pan*_*ama 5

我刚刚想通了。

问题不在于 HAProxy 的配置,而在于 SELinux,它在 CentOS 7 上默认启用并设置为强制模式。 SELinux 的默认配置似乎仅允许在端口 80 上使用 HAProxy。

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

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

sudo semanage port -a -p tcp -t http_port_t 8124
Run Code Online (Sandbox Code Playgroud)