Ubuntu 16.04
 

HAProxy : HTTP を負荷分散
2016/06/07
 
HAProxy によるロードバランサーの構築です。
ここでは以下のような環境を例に設定します。
       |
-------+-----------------------------------------------
       |
       +-------------------+--------------------+
       |10.0.0.30          |10.0.0.51           |10.0.0.52
 +-----+-----+     +-------+------+     +-------+------+
 | Frontend  |     |   Backend#1  |     |   Backend#2  |
 |  HAProxy  |     |  Web Server  |     |  Web Server  |
 +-----------+     +--------------+     +--------------+

 
HAProxy をインストールした Frontend サーバーへの HTTP 通信を Backend#1, Backend#2 の Webサーバーへ負荷分散するように設定します。
[1] HAProxy をインストールします。
root@dlp:~#
apt-get -y install haproxy
[2] HAProxy の設定です。
root@dlp:~#
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org

root@dlp:~#
vi /etc/haproxy/haproxy.cfg
# 新規作成

global
      # ログの出力先とログレベル

    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
      # プロセス毎の最大接続数

    maxconn     256
      # 実行ユーザー/グループ

    user        haproxy
    group       haproxy
      # デーモンとして起動

    daemon

defaults
      # レイヤー7で負荷分散

    mode               http
      # ログ設定は global を継承

    log                global
      # HTTP リクエストログ取得

    option             httplog
      # バックエンドが応答しない場合のタイムアウト時間

    timeout connect    10s
      # クライアントサイドのタイムアウト時間

    timeout client     30s
      # サーバーサイドのタイムアウト時間

    timeout server     30s

# フロントエンドを定義 ( http-in の箇所は任意の名前 )

frontend http-in
      # 80ポートで待ち受け

    bind *:80
      # デフォルトのバックエンドを定義

    default_backend    backend_servers
      # X-Forwarded-For ヘッダーを渡す

    option             forwardfor

# バックエンドを定義

backend backend_servers
      # ラウンドロビンで負荷分散

    balance            roundrobin
      # バックエンドサーバーを定義

    server             www01 10.0.0.51:80 check
    server             www02 10.0.0.52:80 check
    
root@dlp:~#
systemctl restart haproxy

[3] 指定したファシリティのログが取得できるように Rsyslog の設定を変更します。
root@dlp:~#
vi /etc/rsyslog.conf
# 18,19行目:コメント解除, 17行目:追記

module(load="imudp")
input(type="imudp" port="514")
$AllowedSender UDP, 127.0.0.1
root@dlp:~#
vi /etc/rsyslog.d/50-default.conf
# 9行目:以下のように変更して追記

*.*;auth,authpriv.none;local2.none              -/var/log/syslog
local2.*                        /var/log/haproxy.log

root@dlp:~#
systemctl restart rsyslog

[4] バックエンド Webサーバーで X-Forwarded-For ヘッダーをロギングするよう設定しておきます。
root@www01:~#
a2enmod remoteip

Enabling module remoteip.
To activate the new configuration, you need to run:
  service apache2 restart

root@www01:~#
vi /etc/apache2/apache2.conf
# 206-209行目:以下のように変更

# RemoteIPInternalProxy は HAProxy のIPアドレスを指定

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 10.0.0.30

LogFormat "%v:%p
%a
%l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "
%a
%l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
root@www01:~#
systemctl restart apache2

[5] 任意のクライアントからフロントエンドサーバーへ HTTP アクセスして動作を確認してください。
 
Tweet