手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 HAProxy の基本設定 – TCP ロードバランサーを構成する

関連する記事

Ubuntu 26.04 で複数のバックエンドサーバーへ TCP 通信を振り分けたい場合、HAProxy を使うとシンプルなロードバランサーを構成できます。Kubernetes API、LDAP、SMTP、独自 TCP サービスなど、HTTP に限らない入口を作りたい場面で便利です。

この記事では、haproxy の導入、/etc/haproxy/haproxy.cfg の基本構成、TCP モードの frontend / backend、構文検証、サービス確認、接続確認をまとめます。

この記事で扱うこと
  • haproxy パッケージの導入
  • /etc/haproxy/haproxy.cfg の基本構成
  • globaldefaultsfrontendbackend の役割
  • TCP モード、ヘルスチェック、バックエンド切り替え
  • 構文検証、サービス確認、接続確認
対象 OSUbuntu 26.04 Server
パッケージhaproxy
サービスhaproxy.service
設定ファイル/etc/haproxy/haproxy.cfg
検証コマンド/usr/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg
参考書籍
参考書籍
HAProxy: The Definitive Guide
HAProxy の frontend / backend、TCP / HTTP ロードバランス、ヘルスチェックを詳しく確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

HAProxy の構成要素を確認する

HAProxy の設定は、全体設定の global、既定値の defaults、受け口の frontend、振り分け先の backend に分けて考えます。TCP ロードバランサーでは、mode tcpoption tcplog を使うと通信単位のログを追いやすくなります。

  • global はログ、実行ユーザー、管理ソケットなどを定義する
  • defaults は共通のモード、タイムアウト、ログ設定を定義する
  • frontend は待ち受けアドレスとポートを定義する
  • backend は振り分け先サーバーとヘルスチェックを定義する
  • 設定反映前に haproxy -c で構文を検証する

HAProxy をインストールする

まず haproxy パッケージを導入します。設定ファイルを配置する前に、サービス名とバイナリの場所を確認しておくと検証しやすくなります。

コマンド
sudo apt update
sudo apt install -y haproxy
haproxy -v
systemctl status haproxy.service --no-pager

global と defaults を設定する

global ではログ、管理ソケット、実行ユーザー、最大接続数を定義します。defaults では TCP モード、ログ方式、接続タイムアウトを定義します。

haproxy.cfg の一部
global
  log /dev/log local0
  log /dev/log local1 notice
  stats socket /run/haproxy/admin.sock mode 660 level admin
  stats timeout 30s
  user haproxy
  group haproxy
  maxconn 10000
defaults
  log global
  mode tcp
  option tcplog
  option dontlognull
  timeout connect 5s
  timeout client 60s
  timeout server 60s

frontend を設定する

frontend はクライアントからの接続を受ける入口です。ここでは TCP 6443 番を受け、k8s-api-backend へ渡す例にします。実際のポートは対象サービスに合わせます。

haproxy.cfg の一部
frontend k8s-api-frontend
  bind 192.0.2.10:6443
  bind [2001:db8::10]:6443
  default_backend k8s-api-backend

backend を設定する

backend には振り分け先サーバーを並べます。default-server check を使うと、各サーバーにヘルスチェックを適用できます。単純な TCP ロードバランスでは balance roundrobin から始めると動作を把握しやすいです。

haproxy.cfg の一部
backend k8s-api-backend
  balance roundrobin
  option redispatch
  default-server check
  server cp01 192.0.2.21:6443
  server cp02 192.0.2.22:6443
  server cp03 192.0.2.23:6443

完全な最小構成を作る

実際の /etc/haproxy/haproxy.cfg では、globaldefaultsfrontendbackend をひとつのファイルにまとめます。

/etc/haproxy/haproxy.cfg
global
  log /dev/log local0
  log /dev/log local1 notice
  stats socket /run/haproxy/admin.sock mode 660 level admin
  stats timeout 30s
  user haproxy
  group haproxy
  maxconn 10000
defaults
  log global
  mode tcp
  option tcplog
  option dontlognull
  timeout connect 5s
  timeout client 60s
  timeout server 60s
frontend app-frontend
  bind 192.0.2.10:8443
  default_backend app-backend
backend app-backend
  balance roundrobin
  option redispatch
  default-server check
  server app01 192.0.2.31:8443
  server app02 192.0.2.32:8443

設定ファイルを検証して反映する

HAProxy は設定ミスがあると起動に失敗します。反映前に haproxy -c で検証し、問題がなければサービスを再起動します。

コマンド
sudo /usr/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy.service
sudo systemctl enable haproxy.service
systemctl status haproxy.service --no-pager

待ち受けと接続を確認する

サービスが active でも、想定した IP アドレスとポートで待ち受けているとは限りません。ssncopenssl s_client などを使い、入口とバックエンドの両方を確認します。

コマンド
ss -lntp | grep haproxy
nc -vz 192.0.2.10 8443
nc -vz 192.0.2.31 8443
nc -vz 192.0.2.32 8443

ログとヘルスチェックを見る

TCP モードでは、接続ログとバックエンドのヘルスチェック状態が切り分けの入口になります。systemd journal と syslog を確認し、バックエンド down、接続拒否、タイムアウトを見分けます。

コマンド
journalctl -u haproxy.service --no-pager -n 100
grep haproxy /var/log/syslog
echo "show stat" | sudo socat - /run/haproxy/admin.sock

運用前の確認ポイント

  • /etc/haproxy/haproxy.cfg の構文検証が通っている
  • haproxy.service が active になっている
  • frontend が想定 IP アドレスとポートで待ち受けている
  • backend のサーバー名、IP アドレス、ポートが正しい
  • default-server check でヘルスチェックを有効にしている
  • ログで接続、切断、タイムアウトを確認できる
  • ロードバランサー自身の NIC、ファイアウォール、ルーティングも確認している

まとめ

Ubuntu 26.04 の HAProxy 基本設定では、haproxy を導入し、/etc/haproxy/haproxy.cfgglobaldefaultsfrontendbackend を定義します。

TCP ロードバランサーとして使う場合は、mode tcpoption tcplogdefault-server check、構文検証、待ち受け確認、バックエンド接続確認までをひとつの流れで押さえると、障害時の切り分けが進めやすくなります。

関連する記事
Ubuntu 26.04 HAProxy の基本設定 – TCP ロードバランサーを構成する

コメントを残す

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

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

トップへ戻る