HAProxy · 1 min read · Nov 12, 2025
Ubuntu 14.04でのHAProxyによるWebサーバーロードバランシング
HAProxyとは?
HAProxy(High Availability Proxy)は、任意のTCPサービスのロードバランサーであるオープンソースのソフトウェアです。HAProxyは、TCPおよびHTTPベースのアプリケーションのためのロードバランシング、高可用性、およびプロキシ機能を提供する、無料で非常に高速かつ信頼性の高いソリューションです。特に、非常に高いトラフィックを持つウェブサイトに適しており、世界で最も訪問される多くのサイトを支えています。
その存在以来、HAProxyは事実上の標準オープンソースロードバランサーとなりました。自ら宣伝することはありませんが、広く使用されています。以下は、セットアップの基本的な図です:
HAProxyのインストール
私はUbuntu 14.04を使用しており、次のコマンドでインストールします:
apt-get install haproxyバージョンを確認するには、次のコマンドを実行します:
haproxy -vHAProxyがinitスクリプト/etc/default/haproxyによって起動されるようにする必要があります。ENABLEDオプションを1に設定します:
ENABLED=1この変更が正しく行われたかを確認するために、HAProxyのinitスクリプトをパラメータなしで実行します。以下のように表示されるはずです:
$ service haproxy
reload restart start status stop HAProxyは現在インストールされています。次に、2つのApache Webサーバーインスタンスと1つのHAProxyインスタンスを持つセットアップを作成しましょう。以下はセットアップ情報です:
インスタンス1 - ロードバランサー
ホスト名: haproxy
OS: Ubuntu
プライベートIP: 192.168.205.15
インスタンス2 - Webサーバー1
ホスト名: webser01
OS: LAMPを搭載したUbuntu
プライベートIP: 192.168.205.16
インスタンス3 - Webサーバー2
ホスト名: webserver02
OS: LAMPを搭載したUbuntu
プライベートIP: 192.168.205.17
以下はセットアップの図です:
HAProxyを構成しましょう。
HAProxyの構成
元のファイルを名前を変更してバックアップします:
mv /etc/haproxy/haproxy.cfg{,.original}自分のhaproxy.cfgファイルを作成します。お気に入りのテキストエディタを使用して、/etc/haproxy/haproxy.cfgファイルを次のように作成します:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check説明:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemonlogディレクティブは、ログメッセージが送信されるsyslogサーバーを指定します。
maxconnディレクティブは、フロントエンドの同時接続数を指定します。デフォルト値は2000で、システムの構成に応じて調整する必要があります。
userおよびgroupディレクティブは、HAProxyプロセスを指定されたユーザー/グループに変更します。これらは変更しないでください。
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000上記のセクションにはデフォルト値が含まれています。option redispatchは、接続の失敗が発生した場合にセッションの再配分を有効にします。したがって、ウェブサーバーインスタンスがダウンした場合、セッションのスティッキネスがオーバーライドされます。
retriesディレクティブは、接続の失敗後にウェブサーバーインスタンスで実行するリトライの回数を設定します。
変更する必要がある値は、さまざまなタイムアウトディレクティブです。contimeoutオプションは、ウェブサーバーインスタンスへの接続試行が成功するまでの最大待機時間を指定します。
clitimeoutおよびsrvtimeoutは、クライアントまたはサーバーがTCPプロセス中にデータを確認または送信することが期待される場合に適用されます。HAProxyは、クライアントとサーバーのタイムアウトを同じ値に設定することを推奨しています。
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check上記のブロックには、フロントエンドとバックエンドの両方の構成が含まれています。HAProxyをポート80でwebfarmにリッスンするように構成しています。これはアプリケーションを識別するための名前に過ぎません。
statsディレクティブは、接続統計ページを有効にします。このページは、stats uriに記載されたURLで表示できますので、この場合はhttp://192.168.205.15/haproxy?statsで、このページのデモをこちらで確認できます。
balanceディレクティブは、使用するロードバランシングアルゴリズムを指定します。利用可能なアルゴリズムオプションは次のとおりです:
- ラウンドロビン(roundrobin)、
- 静的ラウンドロビン(static-rr)、
- 最小接続(leastconn)、
- ソース(source)、
- URI(uri)および
- URLパラメータ(url_param)。
各アルゴリズムに関する情報は、公式ドキュメントから取得できます。
serverディレクティブはバックエンドサーバーを宣言します。構文は次のとおりです:
server [:port] [param*] ここで指定する名前は、ログやアラートに表示されます。このディレクティブでサポートされている他のパラメータもいくつかあり、この記事ではcheckパラメータを使用します。checkオプションは、ウェブサーバーインスタンスのヘルスチェックを有効にします。そうでない場合、ウェブサーバーインスタンスは常に利用可能と見なされます。
構成が完了したら、HAProxyサービスを開始します:
sudo service haproxy startロードバランシングとフェイルオーバーのテスト
デフォルトのindex.htmlファイルにサーバー名を追加します。デフォルトでは/var/www/index.htmlにあります。
インスタンス2 - Webサーバー1(webserver01、IP- 192.168.205.16)では、以下の行を追加します:
sudo sh -c "echo Hostname: webserver01 (192.168.205.16)
>> /var/www/index.html"インスタンス3 - Webサーバー2(webserver02、IP- 192.168.205.17)では、以下の行を追加します:
sudo sh -c "echo Hostname: webserver02 (192.168.205.17)
>> /var/www/index.html"次に、ローカルマシンのウェブブラウザを開き、HAProxyのIP、つまりhttp://192.168.205.15にアクセスします。
タブを更新するたびに、各ウェブサーバーに負荷が分散されているのがわかります。以下は私のブラウザのスクリーンショットです:
最初にhttp://192.168.205.15を訪れたとき、私は次のように表示されます:

2回目、つまりページを更新したときには、次のように表示されます:

また、http://192.168.205.15/haproxy?statsにアクセスすることでHAProxyの統計を確認できます。
このセットアップでできることは他にもあります。いくつかのアイデアは次のとおりです:
- HAProxyにアクセスしたときに何が起こるかをテストするために、1つまたは両方のウェブサーバーをオフラインにする
- HAProxyがカスタムメンテナンスページを提供するように構成する
- HAProxyの統計を視覚的に監視できるようにウェブインターフェースを構成する
- スケジューラーをラウンドロビン以外のものに変更する
- 特定のサーバーに優先順位/重みを設定する
それでは、以上です!
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。