web-dev-qa-db-ja.com

HaProxyの提供-503サービスを利用できません

2つのTomcatサーバーの負荷分散を実行するために、以下の構成を使用しています。そして、SSL/TLSブリッジング/再暗号化を実行するようにHAProxyを構成しました。

#-------------------------------------------- ------------------------- 
#可能なWebアプリケーションの設定例。 
#フル構成オプションをオンラインで参照してください。
#
#http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
# 
#-------------------------------------------- ------------------------- 
 
#-------------- -------------------------------------------------- -  - -
# 全体設定
# -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
グローバル
    #これらのメッセージが/var/log/haproxy.logに記録されるようにするには、
#する必要があります:
#
#1)ネットワークログイベントを受け入れるようにsyslogを設定します。これは、
#のSYSLOGD_OPTIONSに「-r」オプションを追加することで行われます。
#/etc/sysconfig/syslog
#
#2)local2イベントを設定します/var/log/haproxy.log
#ファイルに移動します。次のような行を
に追加できます#/etc/sysconfig/syslog
#
#local2。* /var/log/haproxy.log
# 
ログ127.0.0.1 local2 debug 
 
 chroot /var/lib/haproxy
 pidfile /var/run/haproxy.pid
 maxconn 4000 
ユーザーhaproxy 
グループhaproxy 
デーモン
 
#統計を有効にするunixソケット
統計ソケット/ var/lib/haproxy/stats 
 ssl-server-verify none 
 
#---------------------------- ----------------------------------------- 
#一般的なデフォルトすべての「listen」セクションと「backend」セクションは、
#ブロックで指定されていない場合に使用します
#-------------------- ------------------------------------------------- 
デフォルト
モードhttp 
ロググローバル
オプションhttplog 
オプションdontlognull 
オプションhttp-server-close 
オプションforwardfor 127.0.0.0/8
オプションを除くredispatch 
再試行3 
タイムアウトhttp-request 10s 
タイムアウトキュー1m 
タイムアウト接続10s 
タイムアウトクライアント1m 
タイムアウトサーバー1m 
タイムアウトhttp-keep-alive 10s 
タイムアウトチェック10s 
 maxconn 3000 
 
#------------------------------- -------------------------------------- 
#にプロキシするメインフロントエンドバックエンド
#------------------------------------------- -------------------------- 
 frontend ft_main 
 default_backend bk_main 
 bind 192.168.192.175: 443 ssl crt /home/testuser/Software/Apache-Tomcat-7.0.32/keystore/haproxy-cert.pem no-sslv3 
 mode http 
 
#---- -------------------------------------------------- --------------- [._ ___。]#さまざまなバックエンド間のラウンドロビンバランシング
#--------------------------------- ------------------------------------ 
 backend bk_main 
 balance roundrobin 
再試行3 
 server srv01 192.168.192.173:8443 weight 1 maxconn 100 check no-sslv3 ssl verify none 
 server srv01 192.168.192.174:8443 weight 1 maxconn 100 check no-sslv3 ssl verify none 
 

サービスを開始すると、次のエラーが発生します

 syslogd @ localhostからのメッセージ、8月17日17:06:12 ... 
 haproxy [2593]:バックエンドbk_mainに使用可能なサーバーがありません!

そして、私は/var/log/haproxy.logで以下のログを観察しています

 Aug 17 16:52:07 localhost haproxy [2495]:backend bk_main has no server available!
 Aug 17 16:52:25 localhost haproxy [2496]:120.117.50.250:52088 [17 /Aug/2015:16:52:25.084] ft_main〜bk_main/556/-1/-1/-1/556 503 212--SC-- 1/1/0/0/0 0/0 "GET/test /healcheck.jsp HTTP/1.1 "
 Aug 17 16:52:26 localhost haproxy [2496]:120.117.50.250:52089 [17/Aug/2015:16:52:25.336] ft_main〜bk_main/1044/-1/-1/-1/1044 503 212--SC-- 0/0/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" 
 8月17日16: 52:27 localhost haproxy [2496]:120.117.50.250:52090 [17/Aug/2015:16:52:27.371] ft_main〜bk_main/268/-1/-1/-1/268 503 212--SC-- 1/1/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" 
 Aug 17 16:52:28 localhost haproxy [2496]:120.117.50.250:52091 [17/Aug/2015:16:52:27.623] ft_main〜bk_main/671/-1/-1/-1/671 503 212--SC-- 0/0/0/0/0 0/0 "GET/test/healcheck.jsp HTTP/1.1 "
 8月17日16:52:29 localhost haproxy [2496]:120.117.50.250:52092 [17/Aug/2015:16:52:29.395] ft_main〜bk_main/273 /- 1/-1/-1/273 503 212--SC-- 1/1/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" 
 Aug 17 16:52: 30 localhost haproxy [2496]:120.117.50.250:52093 [17/Aug/2015:16:52:29.646] ft_main〜bk_main/701/-1/-1/-1/701 503 212--SC-- 0/0/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" 
 Aug 17 16:52:51 localhost haproxy [2496]:120.117.50.250:52094 [17/Aug/2015:16:52:51.268] ft_main〜bk_main/274/-1/-1/-1/274 503 212--SC-- 1/1/0/0/0 0/0 "GET/test/healcheck。 jsp HTTP/1.1 "
 Aug 17 16:57:15 localhost haproxy [2496]:192.168.192.168:54329 [17/Aug/2015:16:57:15.560] ft_main/1:SSL handshake failure 
 8月17日17:00:34 localhost haproxy [2538]:プロキシft_mainを開始しました。
 8月17日17:00:34 localhost haproxy [2538]:プロキシbk_mainを開始しました。
 8月17日:00:34 localhost haproxy [2538]:サーバーbk_main/srv01がダウンしています。理由:レイヤー6の無効な応答、情報:「SSLハンドシェイクの失敗」、チェック期間:30ms。残り0台のアクティブサーバーと0台のバックアップサーバーがあります。 0セッションがアクティブ、0リキュー、0キューが残っています。
 Aug 17 17:00:34 localhost haproxy [2538]:backend bk_main has no server no available!
 Aug 17 17:06:12 localhost haproxy [2593]:Proxy ft_main started。
 Aug 17 17:06:12 localhost haproxy [2593]:Proxy bk_main started。
 Aug 17 17:06:12 localhost haproxy [2593]:Server bk_main/srv01がダウンしています。理由:レイヤー6の無効な応答、情報:「SSLハンドシェイクの失敗」、チェック期間:25ミリ秒。残り0台のアクティブサーバーと0台のバックアップサーバーがあります。 0セッションがアクティブ、0リキュー、0キューが残っています。
 Aug 17 17:06:12 localhost haproxy [2593]:backend bk_main has no server no available!
 

上記のフラグにある「SC」フラグに基づいて、サーバー接続の確立に失敗したことを理解しています。ハンドシェイクの問題ですか?自己署名証明書を使用しています。そしてサーバーディレクティブで「何も検証しない」と述べたので、何が問題になるのでしょうか?

6
Narendra

もちろん、自分でバックエンドへの接続を試してください:

openssl s_client -connect 192.168.192.173:8443

これにより、考えられる原因のほとんどを取り除くことができます。

S_clientは機能するがhaproxyが機能しない場合はどうなりますか? SELinux強制(たとえば、デフォルト設定のCentOS 7)でこれが正確に発生し、haproxyが任意のバックエンドポートに接続することを明示的に許可する必要があります。

setsebool -P haproxy_connect_any 1
1
kubanczyk

/ etc/hostsファイルを確認し、インスタンス名がプロキシしているものと同じでないことを確認してください。通常、サーバーのホスト名を127.0.0.1に設定します

0
Mike Curry