5

バンクエンドサーバーが500を送信したときに、HAProxyからサーバーへのそれ以上のリクエストのケータリングを停止する方法はありますか?

サーバーがSIGINTのようなシグナルを受信すると、「500サーバー内部エラー」の処理を開始します。したがって、HAProxyがサーバーから500の応答を検出すると、サーバーへのそれ以上の要求を停止できますか?

サーバーセクションでデフォルトで有効になっているマクロ「on-error」があります。それを試しても結果は得られませんでした。例えば:

server nucleus_server1 127.0.0.1:12341 check on-error mark-down

。マクロon-mark-downはこれと一緒に機能していません。

何か案は?

4

2 に答える 2

8

HAProxy がこのサーバーから送信されるリターン コードに基づいてサーバーを DOWN としてマークする場合は、サーバー定義に「observe layer7」オプションを追加します。あなたの例では、次のようになります。

server nucleus_server1 127.0.0.1:12341 check on-error mark-down observe layer7 error-limit 1

これは、nucleus_server1 が任意のクライアント要求に対して 500 を返した場合、プールから削除されることを意味します。「error-limit」によって、このサーバーを「DOWN」としてマークするために返される必要がある 500 の数を構成できます。

内部 HAProxy チェックが成功した場合 (デフォルトで 2 回)、サーバーは再び「UP」とマークされます。

詳しくは、check、fall、raise、error-limit、HAProxy ドキュメントのオプションを参照してください。

于 2014-02-28T17:45:35.517 に答える
6

オプションを使用していhttpchkますか?2xx または 3xx 以外の応答では失敗し、HAProxy はそのマシンへのトラフィックの送信を停止します。

公式ドキュメントから:

# Relay HTTPS traffic to Apache instance and check service availability
# using HTTP request "OPTIONS * HTTP/1.1" on port 80.
backend https_relay
    mode tcp
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
    server apache1 192.168.1.1:443 check port 80

ただし、次のように簡単にすることができます。

    option httpchk GET /_health

where/_healthは適切なステータス コードを返します。

于 2013-03-27T21:03:43.833 に答える