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 -v

HAProxyが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
        daemon

logディレクティブは、ログメッセージが送信される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の統計を視覚的に監視できるようにウェブインターフェースを構成する
  • スケジューラーをラウンドロビン以外のものに変更する
  • 特定のサーバーに優先順位/重みを設定する

それでは、以上です!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。