
我正在嘗試在 CentOS 7 中使用 node.js 後端設定一個非常簡單的 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 設定為寬容模式,完全停用它,或讓 SELinux 允許 HAProxy 使用其他連接埠解決了問題。
您可以使用 semanage 允許 HAProxy 使用該連接埠:
sudo semanage port -a -p tcp -t http_port_t 8124