share facebook facebook twitter menu hatena pocket slack

2014.07.28 MON

HA Proxy 白帯シリーズ(3) HA Proxy 超小ネタ(1)

川原 洋平

WRITTEN BY 川原 洋平

cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平@inokara)です。

はじめに

HA Proxy 周りで調べた小ネタをメモっておきます。


ヘルスチェック

ヘルスチェックの基本

ヘルスチェックは下記のオプションを設定することで利用が可能です。

option httpchk

User Agent の指定

User-Agent は下記のように指定が可能です。

option httpchk GET /index.html HTTP/1.0rnUser-agent: Proxy-Check

上記の例では Proxy-Check という User Agent を指定しています。また、メソッドについては GET メソッド以外のリクエストメソッドも利用可能です。

HTTP1.1 によるチェック

以下のとおり HTTP1.1 でのヘルスチェックも可能です。

option httpchk GET /index.html HTTP/1.1rnUser-agent: Proxy-CheckrnHost: example.com

リクエストヘッダに Host: ヘッダが必要になります。

ヘルスチェックのパラメータ

ヘルスチェックの失敗と判断するまでの回数、及び復旧させるまでのヘルスチェックについては以下のようなパラメータで自由に設定することが可能です。

パラメータ 設定値 意味
inter 3000 3000ms 間隔でヘルスチェックを行う
fall 2 2 回失敗したバックエンドから切り離す
rise 2 障害から復旧後 2 回 のヘルスチェックに成功したら正常系に切り戻す

以下は設定例です。

server appserver01 xxx.xxx.xxx.xx1:80 check inter 3000 fall 2 rise 2

エラーページのチェックって出来るの?

バックエンドのサーバーは server オプションを付けて設定しますが、さらに backup オプションを付加することで正常系のサーバーのヘルスチェックが失敗した際に飛ばすページの指定が可能です。

server error01 xxx.xxx.xxx.xx1:80 backup

ちなみにこのサーバーに対してもヘルスチェックを行うことが可能です。以下のように check オプションを付けてあげるだけ。

server error01 xxx.xxx.xxx.xx1:80 backup check

でも、エラーページのヘルスチェックって必要かな…(汗


ログ

HA Proxy のログ出力に関しては過去に大ハマリしています。以下、大ハマリの記録です。

ログフォーマット

基本的なログフォーマットについては上記の大ハマリ記録にも書いたように以下のような種類があります。

  • Default format
  • TCP format
  • HTTP format
  • CLF HTTP format
  • Custom format

中でも Custom format についてちょっとメモっておきます。

Custom format

Custom format については以下を参考します。

上記の通り Apache と同様に % の後に特定の文字を指定することで該当する情報をログに記録することが出来ますが、User Agent や Content-Type 等のリクエストヘッダに含まれる情報をログに記録したい場合にどうすればいいのでしょうか…と悩んでいるところで capture request header の登場です。

capture request header

リクエストヘッダに含まれる情報をログに記録したい場合には capture request header を使ってリクエストヘッダを文字通りキャプチャしておいて Custom format に %hrl を定義して取得することが可能です。

指定は frontend セクションに以下のように記述します。

        capture request header User-Agent len 256
        capture request header Content-Type len 256
        capture request header Content-length len 256
        log-format %hrl

上記の設定でリクエストヘッダをキャプチャして User-Agent と Content-Type そして Content-length の文字列から 256 文字までを %hrl に代入してログに記録(len 256 で指定されている)することになります。

32fe21d1-4ab7-a2d9-bd9f-6af55f9aa2d2

上記のように User-Agent が記録されました。

も少し Custom format の設定を使いこなすことが出来れば、既存の Web サーバーと同等のフォーマットにてログを記録することも難しくないように思われます。


さいごに

HA Proxy は設定項目が多岐に渡っていて色々なことが出来そうな反面、どの設定が正しい設定であるかはドキュメントを読むだけだと掴めない部分があるのがちょいと辛い(英語力と読解力の無さを棚上げしてすんません)。

元記事は、こちら