FreeBSD 14
Sponsored Link

HAProxy : HTTP を負荷分散2024/04/16

 

HAProxy によるロードバランサーの構築です。
当例では以下のような環境を例に設定します。

-----------+---------------------------+--------------------------+------------
           |                           |                          |
           |10.0.0.30                  |10.0.0.51                 |10.0.0.52
+----------+-----------+   +-----------+----------+   +-----------+----------+
|   [ dlp.srv.world ]  |   | [ node01.srv.world ] |   | [ node02.srv.world ] |
|        HAProxy       |   |      Web Server#1    |   |      Web Server#2    |
+----------------------+   +----------------------+   +----------------------+

 

HAProxy をインストールしたサーバーへの HTTP 通信をバックエンドの Web Server#1, Web Server#2 へ負荷分散するように設定します。

[1] HAProxy をインストールします。
root@dlp:~ #
pkg install -y haproxy
[2] HAProxy の設定です。
root@dlp:~ #
vi /usr/local/etc/haproxy.conf
# 新規作成

global
    log         127.0.0.1:514 local1 info
    chroot      /var/empty
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

# # フロントエンドを定義 ( http-in の箇所は任意の名前 )
frontend http-in
    # 80 ポートで待ち受け
    bind *:80
    # デフォルトのバックエンドを定義
    default_backend    backend_servers

# バックエンドを定義
backend backend_servers
    # ラウンドロビンで負荷分散
    balance            roundrobin
    # バックエンドサーバーを定義
    server             node01 10.0.0.51:80 check
    server             node02 10.0.0.52:80 check

root@dlp:~ #
pw useradd haproxy -u 200 -d /var/empty -s /usr/sbin/nologin

root@dlp:~ #
service haproxy enable

haproxy enabled in /etc/rc.conf
root@dlp:~ #
service haproxy start

Starting haproxy.
[3] HAproxy のログをファイルに記録できるように Syslogd の設定を変更します。
root@dlp:~ #
vi /etc/syslog.conf
# 8行目 : 追記

*.err;kern.warning;auth.notice;mail.crit                /dev/console
local1.*                                                /var/log/haproxy.log
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages

root@dlp:~ #
touch /var/log/haproxy.log

root@dlp:~ #
chown haproxy:haproxy /var/log/haproxy.log

root@dlp:~ #
sysrc syslogd_flags="-b localhost -C"

syslogd_flags: -s -> -b localhost -C
root@dlp:~ #
service syslogd restart

[4] バックエンド Web サーバー (Apache httpd の場合) で X-Forwarded-For ヘッダーをロギングするよう設定しておきます。
root@node01:~ #
vi /usr/local/etc/apache24/httpd.conf
# 316,317行目 : 以下のように変更

LogFormat "
\"%{X-Forwarded-For}i\"
%l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "
\"%{X-Forwarded-For}i\"
%l %u %t \"%r\" %>s %b" common
root@node01:~ #
service apache24 reload

[5] 任意のクライアントコンピューターから HAProxy フロントエンドサーバーへ HTTP アクセスして動作を確認しておきます。
関連コンテンツ