ロードバランサー
トラフィック分散と可用性向上
ロードバランサーとは
ロードバランサーは、複数のサーバーにトラフィックを分散するデバイス/サービスです。 負荷分散による性能向上、冗長構成による可用性向上、 ヘルスチェックによる障害サーバーの自動除外を実現します。
基本アーキテクチャ
クライアント
↓
ロードバランサー
↙↓↘
Server 1
Server 2
Server 3
L4 vs L7 ロードバランサー
| 特性 | L4 LB | L7 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定義 2 upstream 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 14 server { 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
- • 負荷テストで限界を把握