手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 HAProxy ロードバランサー – frontend / backend とヘルスチェック

Ubuntu 22.04 で HAProxy を使い、ロードバランサーを構築する手順です。HAProxy は、外部または上位のクライアントから受けた通信を複数のバックエンドサーバーへ振り分けるリバースプロキシ / ロードバランサーです。

この記事では、HTTP ロードバランサーとしての基本構成、ヘルスチェック、ログ、統計画面、TLS 終端を分けて整理します。Squid のようなフォワードプロキシとは通信の向きが違います。

参考書籍
参考書籍

マスタリング TCP/IP 入門編 第6版

TCP/IP、Ethernet、VLAN、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連するプロキシ記事

Squid はフォワードプロキシ、HAProxy はリバースプロキシ / ロードバランサーです。通信の向きと責務を分けて読むと、境界設計を整理しやすくなります。

HAProxy の位置づけ

項目内容
frontendクライアントから接続を受ける入口
backend実際に処理する上流サーバー群
health check上流サーバーが生きているか確認する
TLS terminationHAProxy で TLS を終端し、内部へ HTTP で渡す構成
reverse proxy外部から内部サービスへ向かう通信の中継

HAProxy をインストールする

sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y haproxy

HTTP ロードバランサーを設定する

sudo tee /etc/haproxy/haproxy.cfg <<'EOF'
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

defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5s
    timeout client  30s
    timeout server  30s

frontend web_front
    bind *:80
    default_backend web_back

backend web_back
    balance roundrobin
    option httpchk GET /
    server web1 10.1.0.21:80 check
    server web2 10.1.0.22:80 check
EOF

sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy

動作確認する

systemctl status haproxy --no-pager
ss -ltnp | grep ':80'
curl -I http://lb.example.local/

ログを確認する

HAProxy のログは syslog 経由で出る構成が一般的です。Ubuntu の環境により /var/log/haproxy.log または journald / syslog 側を確認します。

sudo journalctl -u haproxy -n 80 --no-pager
sudo grep haproxy /var/log/syslog | tail -n 50

統計画面を有効化する

内部管理用に stats 画面を有効化できます。外部へ公開しないように到達範囲と認証を制限します。

sudo tee -a /etc/haproxy/haproxy.cfg <<'EOF'

listen stats
    bind 127.0.0.1:8404
    mode http
    stats enable
    stats uri /stats
    stats refresh 10s
    stats auth admin:change-me
EOF

sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
curl -I http://127.0.0.1:8404/stats

TLS 終端を行う場合

HAProxy で TLS を終端する場合は、証明書と秘密鍵を結合した PEM ファイルを指定します。内部 CA や公開 CA のどちらを使うかは、公開範囲に応じて決めます。

sudo install -d -m 0750 -o root -g haproxy /etc/haproxy/certs
sudo sh -c 'cat server.example.local.crt server.example.local.key > /etc/haproxy/certs/server.example.local.pem'
sudo chmod 0640 /etc/haproxy/certs/server.example.local.pem
sudo chown root:haproxy /etc/haproxy/certs/server.example.local.pem
frontend web_tls_front
    bind *:443 ssl crt /etc/haproxy/certs/server.example.local.pem
    http-request set-header X-Forwarded-Proto https
    default_backend web_back

ヘルスチェックの考え方

ロードバランサーでは、単にポートが開いていることだけでなく、アプリケーションとして正常に応答できるかを確認することが重要です。

backend web_back
    balance roundrobin
    option httpchk GET /health
    http-check expect status 200
    server web1 10.1.0.21:80 check
    server web2 10.1.0.22:80 check

運用上の注意

  • HAProxy はフォワードプロキシではなくリバースプロキシとして考える
  • 上流サーバーは DNS 名または固定 IP で管理する
  • ヘルスチェックはアプリケーションの正常性に近いパスを使う
  • TLS 終端する場合は証明書更新と秘密鍵管理を設計する
  • WAF を入れる場合は HAProxy と Apache / ModSecurity の配置順を決める

まとめ

Ubuntu 22.04 の HAProxy は、複数の Web サーバーへ通信を振り分けるリバースプロキシ / ロードバランサーです。frontend、backend、health check、ログ、TLS 終端を分けて考えると、構成を整理しやすくなります。

Ubuntu 22.04 HAProxy ロードバランサー – frontend / backend とヘルスチェック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る