我正在尝试在 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