
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
ロード バランサからは完全に機能し、ロード バランサが実際にバックエンドにアクセスできることを示しています。
LISTEN
このような状況では、を使用した状態でポート 8124 が表示されないことから、HAProxy の起動に失敗したようですnetstat -an
。
HAProxy を使用するのは今回が初めてなので、本当に些細なことを見逃している可能性があります。
他に確認すべきことはありますか?
答え1
やっと分かりました。
問題は HAProxy の設定ではなく、CentOS 7 ではデフォルトで有効になっており、強制モードに設定されている SELinux にあります。SELinux のデフォルト設定では、ポート 80 でのみ HAProxy が許可されているようです。
SELinux を許可モードに設定するか、完全に無効にするか、あるいは SELinux が HAProxy に他のポートの使用を許可するようにすることで、問題は解決しました。
semanage を使用して、ポートを使用する HAProxy を許可できます。
sudo semanage port -a -p tcp -t http_port_t 8124