HAProxy : HTTP を負荷分散2015/02/18 |
|
HAProxy によるロードバランサーの構築です。
ここでは以下のような環境を例に設定します。
|
-------+-----------------------------------------------
|
+-------------------+--------------------+
|10.0.0.30 |10.0.0.31 |10.0.0.32
+-----+-----+ +-------+------+ +-------+------+
| Frontend | | Backend#1 | | Backend#2 |
| HAProxy | | Web Server | | Web Server |
+-----------+ +--------------+ +--------------+
|
|
HAProxy をインストールした Frontend サーバーへの HTTP 通信を Backend#1, Backend#2 の
Webサーバーへ負荷分散するように設定します。
|
|
| [1] | HAProxy をインストールします。 |
|
[root@dlp ~]# yum -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.31:80 check
server www02 10.0.0.32:80 check
systemctl start haproxy [root@dlp ~]# systemctl enable haproxy |
| [3] | 指定したファシリティのログが取得できるように Rsyslog の設定を変更します。 |
|
[root@dlp ~]#
vi /etc/rsyslog.conf # 15,16行目:コメント解除, 17行目:追記 $ModLoad imudp $UDPServerRun 514
$AllowedSender UDP, 127.0.0.1
# 54行目:以下のように変更 *.info;mail.none;authpriv.none;cron.none ,local2.none /var/log/messageslocal2.* /var/log/haproxy.log systemctl restart rsyslog |
| [4] | バックエンド Webサーバーで X-Forwarded-For ヘッダーをロギングするよう設定しておきます。 |
|
[root@www ~]#
vi /etc/httpd/conf/httpd.conf # 196行目:変更 LogFormat " \"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
systemctl restart httpd |
| [5] | 任意のクライアントからフロントエンドサーバーへ HTTP アクセスして動作を確認してください。 |
|
|
| Sponsored Link |
|
|