HAProxy 没有可用的服务器

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

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

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

新配置如下

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 似乎启动失败,因为LISTEN我使用时无法在状态下看到端口 8124 netstat -an

这是我第一次使用 HAProxy,所以我可能错过了一些非常简单的东西。

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

答案1

我刚刚明白了。

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

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

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

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

相关内容