HAProxy〜高機能なロードバランサ・プロキシのOSS〜
HAProxyは、プロキシおよびロードバランサの両方の機能を持ったオープンソースソフトウェアです。多様なプロトコルに対応しており、アクセス先のサーバによってきめ細かい制御をすることが可能です。さらに、HAProxyはプロキシプロトコルに対応しています。そのため、クライアントから接続先のサーバへのアクセスの間でプロキシサーバを介していても、本来の通信元であるクライアントの情報をログとして残すことができます。この記事では、HAProxyの特徴と機能について紹介します。
- +
目次
HAProxyとは
HAProxyとは、高可用性・負荷分散を実現するための、プロキシ/ロードバランサとして動作するオープンソースソフトウェアです。主に大規模なTCP/HTTPベースのアプリケーション向けに用いられます。HAProxyは、RedHat Enterprise LinuxやCentOSなどの多くのLinuxディストリビューションでパッケージが提供されているソフトウェアで、安定して動作します。ほとんどの場合、ディストリビューション標準のパッケージマネージャからインストールすることができます。オープンソースの仮想基盤であるOpenStackの内部やKubernetesのロードバランシングサービスでもHAProxyが使われており、実績が豊富で安心して利用できるプロキシサーバです。
なお、HAProxyという名前は、サービスの冗長性(High Availability)を確保するために使われるプロキシ(Proxy)という意味から付けられています。
HAProxyの特徴
HAProxyには以下の特徴があります。
URLやHTTPヘッダーによるサーバの制御が可能
HAProxyはOSI参照モデルのレイヤー7(アプリケーション層)で動作するため、TCP/UDPでのルール設定に加えて、HTTPなどのプロトコルの内容を理解したルールも記載することができます。これにより、HAProxyでは、URLやHTTPのヘッダー情報毎にアクセス先のサーバを変更するなどのきめ細かい制御が可能となります。
なお、HAProxyと同様に負荷分散の機能を提供するソフトウェアとしてLVS(Linux Virtual Server)がありますが、LVSが動作するのはOSI参照モデルのレイヤー4(トランスポート層)です。そのため、TCP/UDPを利用したルールしか設定することができず、HAProxyとはこの点が大きく異なります。
HTTP以外にも様々なTCPプロトコルに対応
一般的なプロキシサーバは、すべてのプロトコルに汎用的に対応するものではなく、プロトコル毎に実装する必要があります。一方、HAProxyは、HTTP以外にもメール(SMTP/IMAP/POP)やデータベース(MySQL/PostgreSQL)のロードバランサとしても使用できます。HAProxyをロードバランサとして動作させる場合、振り分けルールとしてはレイヤー4で動作しますが、監視はレイヤー7で行うことができます。例えばSMTPであれば、「HELO」コマンドや「MAIL FROM」コマンドを送信してステータスコードをチェックすることができます。
プロキシプロトコルに対応
通常、ロードバランサやプロキシサーバを経由してバックエンドのサーバに到達すると、サーバから見た通信元はプロキシサーバとなるため、通信の情報が全て経由したサーバの情報になってしまいます。よくありがちな例として、経由したロードバランサやプロキシサーバのIPアドレスがログとして出力されてしまい、本来の通信元であるクライアントIPアドレスの情報が失われるといった問題があります。そのため、どのクライアントからの接続であるかの判別がつきません。
プロキシプロトコルは、この問題に対応するためのプロトコルです。HAProxyはこのプロキシプロトコルに対応しているため、バックエンドと通信を行う際にプロキシプロトコルを利用し、バックエンドサーバにリクエスト元の情報を渡すことができます。そのため、通信元であるクライアントからの接続ログの取得や、アクセス解析を行うことが可能となります。なお、現状プロキシプロトコルの動作が確認できているソフトウェアとしては、PostfixやDovecotが存在しています。デージーネットが公開している無料の調査報告書では、プロキシプロトコルを利用した場合と利用しない場合のログの差異も掲載しています。
HAProxyの機能
HAProxyでは以下の機能を利用することができます。
プロキシ/ロードバランサ機能
HAProxyは、右図のように、クライアントからの通信を複数のバックエンドサーバに振り分けるロードバランサとしての機能を持っています。この機能を使うことで、システム全体で負荷を分散し、処理能力を向上させます。また、万が一バックエンドサーバが1台停止しても別のサーバでサービスを提供し続けることができる、比較的容易にシステムのスケールアウトができるといったメリットがあります。
バックエンドサーバへの柔軟な振り分け
HAProxyでは、バックエンドサーバへの振り分けを柔軟に設定することができます。例えば以下の項目のような設定が可能です。
- ラウンドロビンでバックエンドサーバに順番に振り分けを行う
- 最も接続数が少ないバックエンドサーバに振り分けを行う
- 同一のソースIPアドレスなら同一のバックエンドサーバに振り分けを行う
- 設定されたIDが最も小さいサーバにのみ振り分けを行ない、接続最大数に達した場合に次のサーバに振り分けを行う
- URLの値で振り分け先を固定する(.jpgや.pngなどの画像ファイルはserver1へ、.phpなどの動的ページはserver2へ振り分けを行うなど)
- HTTPヘッダの値で振り分けを行う(Cokkieの情報やユーザエージェントで振り分け先を変更する)
SSLオフロード機能
データ保全の必要性から、ネットワーク通信でのSSL対応は必須となりつつあります。しかし、SSL暗号化の処理はマシンに与える負荷が高く、サービスに影響を与える可能性があります。SSLオフロードとは、このSSLの負荷を肩代わりする機能です。SSLオフローダとしてHAProxyを導入することで、以下のメリットがあります。
- SSLの処理をHAProxyのサーバに集約できるため、バックエンドのサーバの負荷を下げることができる
- サーバ毎にSSLの設定を行う場合よりも、システム管理の手間を省ける
- SSL証明書の更新箇所がHAProxyに集約できる
- 脆弱な暗号化アルゴリズムが見つかった場合も、HAProxyのみの設定変更で対応できる
なおこれらのHAProxyのSSLオフロード機能は、WEBに特化した機能ではありません。SMTPやPOP3、IMAPなど他のTCPプロトコルでも利用できることが確認できています。
ヘルスチェック機能
HAProxyは、バックエンドのサービスの稼働状況をチェックするヘルスチェック機能を持っています。OSI参照モデルのレイヤー4(トランスポート層)からレイヤー7(アプリケーション層)まで、様々なレイヤーでヘルスチェックの機能が存在しています。ヘルスチェック機能では、バックエンドサーバの停止・復帰の条件を変更することができます。また、バックエンドサーバ停止時には、アラートメールを送信したり、サービスから切り離したりすることができます。ヘルスチェック対象やヘルスチェック間隔などは柔軟に設定可能です。
なお、HAProxyのデフォルトでは、TCP接続のヘルスチェックしか行いませんが、設定を追加することによって、以下のプロトコルに合わせたヘルスチェックも行えるようになります。
|
|
|
|
|
統計情報の確認
HAProxyでは、現在どのサーバが稼働/停止しているのか、どのぐらいの接続があるのかなどの統計情報を、WEBインタフェースやコマンドラインの管理インタフェースで参照することができます。都度ログの確認を行うことなく状態の把握ができるため非常に便利です。
WEBインターフェース
Webインタフェースで参照可能な情報は以下の通りです。
- フロントエンド・バックエンドサーバの一覧
- フロントエンド・バックエンドサーバのステータス(UP/DOWNなど)
- HAProxyから起動してから現在までの接続数
- 現在の処理待ちキューの数
- 現在のセッション数
- 最大セッション数
管理インタフェース
管理インタフェースで行う代表的な操作は以下の通りです。
- 統計情報の参照
- サーバのステータスの変更
- サーバの重み付けの変更
- ACLの参照・変更
他のプロキシ/ロードバランサのOSSとの比較
同じくリバースプロキシやロードバランサとして利用できるWebサーバーソフトウェアにNginxがあります。HAProxyは、Nginxと比べても負荷分散におけるパフォーマンスが高く、機能が非常に優れています。特に、IoTデバイスから収集したデータをIoTデータ収集プラットフォームやIoTデータ解析プラットフォームに振り分けるときなどにHAProxyの高パフォーマンスが生かされます。
また、最もポピュラーなプロキシサーバのソフトウェアにSquidがあります。Squidは非常に歴史のあるソフトウェアであるため、他のプロキシサーバのソフトウェアと比べて安定性という点では優れています。しかし、設計が古く、性能面では劣る面があります。また、ロードバランサとしての機能は限定的で、プロキシプロトコルにも対応しているHAProxyやNginxの方が高機能となっています。
なお、以下のページでは、プロキシサーバやロードバランサとして使える各種オープンソースソフトウェアを紹介しています。
「無料で使えるプロキシサーバ/ロードバランサおすすめ20選」へ
デージーネットの取り組み
デージーネットでは、HAProxyについて調査した結果をまとめ、調査報告書として公開しています。調査報告書では、各機能の設定方法や、SSLオフロード機能を利用した場合に性能劣化がどの程度発生するかを検証したベンチマークの結果も掲載しています。
またデージーネットでは、仮想環境のサービス(OpenStackサービス)の負荷分散のためにHAProxyを利用しています。単純なシングル構成ではなく冗長化して利用し、負荷分散対象のサービスが全てダウンしてしまうことを防いでいます。こうした構築実績を元に、お客様の利用規模や運用環境に最適な負荷分散システムのご提案・構築サービスを行っています。導入をご検討の方には、無料見積も実施しております。
なお、実際にデージーネットでシステムの構築をしたお客様には、Open Smart Assistanceという保守サービスに加入することができます。OSSそのものではなく、運用中のシステムが適切に運用できることをサポートしています。保守サービスでは、使い方から運用方法まで幅広い範囲でのQ&Aや、適正に運用できるようなセキュリティの情報提供、障害調査、回避を行い、安心して利用して頂けるよう管理者の業務をサポートします。導入をご検討の方には、お気軽にお問い合わせください。
「情報の一覧」
HAProxy調査報告書
HAProxyは、プロキシおよびロードバランサの両方の機能を持ったオープンソースソフトウェアです。多様なプロトコルに対応しているため、アクセス先のサーバーによってきめ細かい制御を可能にします。調査報告書では、基本の機能の設定方法など、調査した結果の詳細をまとめて説明しています。
HAproxyを利用したメール中継システム構築事例
自社で製造、販売をしている機器からメールを送信したいというご要望がありました。デージーネットではヘルスチェック機能を持ったHAProxyを使用したメール中継システムをご提案いたしました。
無料で使えるプロキシサーバ/ロードバランサおすすめ20選
プロキシとは、クライアントとサーバの間に中継サーバとして配置するサーバのことです。ロードバランサは外部からの通信(トラフィック)を複数のサーバに分散する仕組みを提供する装置のことです。ここではプロキシサーバ/ロードバランサの種類、メリット、構築時の注意点など紹介し、いくつかのソフトウェアの比較をします。
IoTプラットフォームで使われるOSS「IoTネットワークインフラ」
HAProxyは、高可用性、負荷分散を実現するためのオープンソースソフトウェアです。このページでは、IoTネットワークインフラで利用できるOSSと、それぞれのOSSの特徴について解説しています。