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

ロード バランサからは完全に機能し、ロード バランサが実際にバックエンドにアクセスできることを示しています。

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

関連情報