取り急ぎのメモの cloudpack の かっぱ (@inokara) です。
はじめに
HAProxy でバックエンドのヘルスチェックは option httpchk
で定義しますが、option httpchk
を設定して行われるヘルスチェックはステータスコードのみのチェックとなります…ということで。
option httpchk
HAProxy においてバックエンドの Web サーバーをヘルスチェックする際には以下のように設定することでチェックすることが可能です。
option httpchk
但し、上記の設定の場合には…
By default, “option httpchk” considers that response statuses 2xx and 3xx
are valid, and that others are invalid.
上記のようにバックエンドの Web サーバーをチェックしてステータスコードが 2xx か 3xx が返ってくることで正常と判断しています。これでも十分と言えば十分なのですが、Web サーバーは生きているけど DB 障害等でアプリケーションは死んでいるという場合にはこのチェックでは正常に死活をチェック出来ない可能性があります。これを解決する為に任意の URL にアクセスしたらアプリケーションの稼働状態を任意の文字列で表現(例えば ok 等を表示する)することで Web サーバーは生きていてもアプリケーションが稼働しないことを外部から監視することが可能になります。
この任意の URL に出力される文字列を HAProxy のヘルスチェックとして利用する為に http-check expect を利用します。
http-check expect
設定
http-check expect は以下のように定義することが出来ます。下記のようにステータスコードとレスポンスボディの文字列に合わせて、ステータスコードとレスポンスボディを正規表現でマッチさせたり !
を付加することで、ステータスコードが 5xx
で無ければというヘルスチェックを行うことが可能です。
ステータスコード
http-check expect status 200
レスポンスボディの文字列
http-check expect string ok
ステータスコードを正規表現でマッチ
以下、ドキュメントからの抜粋です。
http-check expect ! rstatus ^5
レスポンスボディを正規表現でマッチ
以下、ドキュメントからの抜粋です。
http-check expect rstring