Ubuntu + HAProxy で HTTP トラフィックを負荷分散する
Linux をロードバランサーにしたい場合、LVS を利用することができます。 LVS は比較的シンプルなため、より高機能が必要な場合は HAProxy を使うことができます。 今回は Ubuntu 24.04 LTS へ HAProxy をインストールして、簡単なロードバランスを行う手順をメモします。
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 24.04.2 LTS |
HAProxy | 2.8.5 |
インストール¶
apt でインストール可能です。 インストール直後から起動していました。
apt install -y haproxy
HAProxy の設定¶
設定ファイルは /etc/haproxy/haproxy.cfg
にあります。 3 台の Web サーバ (10.0.0.1 〜 10.0.0.3) へ HTTP トラフィックを分散する設定例は以下の通りです。 listen
セクションで server web1 10.0.0.1:80 check
のように定義しています。 check
を指定することでヘルスチェックの対象にできます。 デフォルトで HAProxy はラウンドロビン動作をしていました。
/etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen web_proxy
bind *:80
option httpchk
http-check send meth GET uri /
http-check expect status 200
server web1 10.0.0.1:80 check
server web2 10.0.0.2:80 check
server web3 10.0.0.3:80 check
設定が完了したらサービスを再起動します。
systemctl restart haproxy.service
HAProxy の動作ログ¶
今回の設定内容であれば HAProxy の動作ログは /var/log/haproxy.log
に保存されます。 ログの内容例は以下の通りです。
/var/log/haproxy.log
2025-06-17T15:55:36.809537+09:00 ubuntu haproxy[1726]: 192.168.0.1:49278 [17/Jun/2025:15:55:36.805] web_proxy web_proxy/web1 0/0/1/1/2 304 162 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
2025-06-17T15:55:38.413665+09:00 ubuntu haproxy[1726]: 192.168.0.1:49278 [17/Jun/2025:15:55:38.410] web_proxy web_proxy/web2 0/0/1/1/2 200 211 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
2025-06-17T15:55:38.939441+09:00 ubuntu haproxy[1726]: 192.168.0.1:49278 [17/Jun/2025:15:55:38.935] web_proxy web_proxy/web3 0/0/1/2/3 200 211 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
参考¶
/etc/haproxy/haproxy.cfg¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|