HAproxy
HAProxy は、高可用性、負荷分散、TCP および HTTP ベースのアプリケーションのプロキシを提供する、無料の非常に高速で信頼性の高いソリューションです。特にトラフィック量の多い Web サイトに適しており、世界で最もアクセス数の多い Web サイトの多くをサポートします。長年にわたり、これは事実上の標準のオープンソース ロード バランサーとなり、現在ではほとんどの主流の Linux ディストリビューションに同梱されており、多くの場合、クラウド プラットフォームにデフォルトでデプロイされています。
インストール
実行
systemd を使って haproxy.service
を有効化してください。HAProxy の設定は # systemctl reload haproxy.service
を使うことで動的にリロードすることができます。
設定
サンプル設定は /etc/haproxy/haproxy.cfg
にあります。必要に応じて編集して haproxy.service
を起動してください。
一般的な設定
ACL
HAProxy は ACL に対応しており、テストを行なったり、テストの結果にあわせて特定のアクションを起こすことができます。典型的な ACL は以下のように記述します:
/etc/haproxy/haproxy.cfg
acl photo_page path_beg /photos
上記の場合、ユーザーのリクエストしたパスの先頭が /photos
の場合に ACL がマッチします。
バックエンド
HAProxy では、バックエンドは転送されたリクエストを受信するサーバーあるいはサーバー群を示す用語です。様々な ロードバランスアルゴリズム に基づいてバックエンドで負担を分散させることができます:
- ラウンドロビン
- 静的ラウンドロビン (別名、加重ラウンドロビン)
- 最小接続
例えば以下のようにバックエンドを記述します:
/etc/haproxy/haproxy.cfg
backend http-in balance roundrobin server s1 web1.example.com:80 check server s2 web2.example.com:80 check
フロントエンド
フロントエンドはどうやってバックエンドにリクエストを転送するか定義します。定義は以下からなります:
- IP アドレスとポート
- ACL
- use_backend ルール
ヘルスチェック
バックエンドを check
オプションで宣言すると、HAProxy は起動時・定期的にバックエンドが転送されたリクエストを処理できているかどうか確認します。バックエンドがヘルスチェックに通らなかった場合、健康状態に回復したと診断されるまで (つまりヘルスチェックに合格するまで) ローテーションから削除されます。
デフォルトでは、HAProxy はバックエンドと TCP 接続の確立を試行して健康度を確かめます。
check
オプションで大量のバックエンドを宣言した場合、HAProxy は起動時に全てのバックエンドにクエリを投げるので、起動が遅くなることがあります。