ロードバランサー

トラフィック分散と可用性向上

ロードバランサーとは

ロードバランサーは、複数のサーバーにトラフィックを分散するデバイス/サービスです。 負荷分散による性能向上、冗長構成による可用性向上、 ヘルスチェックによる障害サーバーの自動除外を実現します。

基本アーキテクチャ

クライアント
ロードバランサー
Server 1
Server 2
Server 3

L4 vs L7 ロードバランサー

特性L4 LBL7 LB
レイヤートランスポート層アプリケーション層
判断基準IP、ポートURL、ヘッダー、Cookie等
性能高速(パケット転送)やや遅い(コンテンツ解析)
SSL終端パススルーのみ可能
コンテンツルーティング不可可能
用途TCP/UDP全般HTTP/HTTPS

負荷分散アルゴリズム

ラウンドロビン

順番に各サーバーへ振り分け。シンプルで均等。 サーバー性能が同じ場合に有効。

重み付きラウンドロビン

サーバーごとに重みを設定。高性能サーバーに多く振り分け。

最小接続数(Least Connections)

アクティブ接続数が最も少ないサーバーへ。 長時間接続に有効。

IPハッシュ

クライアントIPのハッシュで振り分け先決定。 同じクライアントは同じサーバーへ(スティッキー)。

ヘルスチェック

バックエンドサーバーの状態を定期的に確認し、異常なサーバーを自動的に除外します。

TCP

ポートへの接続確認

HTTP

特定パスへのGET、ステータス確認

カスタム

レスポンスボディのチェック

設定項目: チェック間隔、タイムアウト、失敗閾値、成功閾値

主要なロードバランサー

AWS

  • ALB: L7、HTTP/HTTPS、パスベースルーティング
  • NLB: L4、超高性能、固定IP
  • CLB: 従来型(非推奨)

ソフトウェアLB

  • Nginx: リバースプロキシ兼用、設定柔軟
  • HAProxy: 高性能、詳細な統計
  • Envoy: サービスメッシュ、可観測性

Kubernetes

  • Service (LoadBalancer): クラウドLB連携
  • Ingress: L7ルーティング
  • Gateway API: 次世代Ingress

Nginx ロードバランサー設定

1# upstream定義
2upstream backend {
3 # ロードバランシング方式
4 # least_conn; # 最小接続
5 # ip_hash; # IPハッシュ
6
7 server 10.0.0.1:8080 weight=3;
8 server 10.0.0.2:8080 weight=2;
9 server 10.0.0.3:8080 backup; # バックアップサーバー
10
11 keepalive 32; # コネクションプール
12}
13
14server {
15 listen 80;
16 server_name example.com;
17
18 location / {
19 proxy_pass http://backend;
20 proxy_http_version 1.1;
21 proxy_set_header Host $host;
22 proxy_set_header X-Real-IP $remote_addr;
23 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
24
25 # タイムアウト
26 proxy_connect_timeout 5s;
27 proxy_read_timeout 60s;
28 }
29
30 # ヘルスチェック(Nginx Plus)
31 # health_check interval=5s fails=3 passes=2;
32}

SRE/インフラ観点

監視項目

  • アクティブ接続数: 各バックエンドへの分散
  • ヘルスチェック状態: Healthy/Unhealthy数
  • レイテンシ: LBでの処理時間
  • エラー率: 5xx応答の割合

ベストプラクティス

  • • LB自体の冗長化(複数AZ配置)
  • • 適切なタイムアウト設定
  • • Connection Drainingで graceful shutdown
  • • 負荷テストで限界を把握