用語辞典・クラウド・開発運用

ロードバランサー

ロードバランサーとは

load balancer(ロードバランサー)は、複数のサーバーへ要求を振り分け、負荷分散や可用性向上を行う仕組みです。クライアントからは一つのIP・DNS名前・仮想エンドポイントとして見え、待ち受けソケットが受けた接続・要求を正常なバックエンド対象へ渡します。

Layer 4(レイヤー・フォー/L4)ではTCP・UDPとアドレス・ポート、Layer 7(レイヤー・セブン/L7)ではHTTPホスト・パス・ヘッダー等を基に選べます。製品により対応プロトコル、適用範囲、アルゴリズム、ヘルスチェック、TLS機能が異なります。

負荷分散装置はトラフィックの入口と振分けを管理します。バックエンドを自動で増やす自動スケーリング、アプリケーションデータの同期、データベースフェイルオーバー、不具合修正を単独で行うものではありません。

複数クライアントからの接続を冗長な待ち受け口で受け、正常性を確認した対象へ振り分けるL4・L7、TLS終端、ドレイニング、接続先固定、クライアント情報と拡張・縮小を分ける
ブラウザーやスマートフォンが一つのエンドポイントへ接続し、冗長なロードバランサーが二つのゾーンにある正常なバックエンドへトラフィックを振り分ける流れと、L4・L7、TLS終端、ドレイニング、接続先固定の違いを示すピクトグラム図解
図1ヘルスチェックは指定パス・ポートの結果です。業務処理、データベース整合、外部APIまで確認するかは確認設計で変わります。

トラフィックが通る要素

Endpointクライアントが接続する入口

DNS名前、仮想IP、anycastアドレス等で安定した接続先を提供します。

Listenerプロトコル・ポート・TLS設定

どのフロントエンド接続を受け、どの規則へ渡すかを定義します。

Ruleバックエンドグループを選ぶ条件

アドレス・ポート、HTTPホスト・パス・ヘッダー、weight等で振分け先を選びます。

Targetグループ振分け候補の集合

VM、コンテナー、IP、serverlessエンドポイント等をポート・プロトコルと対応付けます。

Health確認候補をトラフィックから外す判定

間隔、タイムアウト、しきい値、成功コード等で正常・異常を決めます。

Connectionクライアント側とバックエンド側の二区間

TLS、タイムアウト、キープアライブ、ソース情報、再試行を区間ごとに管理します。

L4とL7

L4負荷分散装置はトランスポート接続やdatagramをアドレス・ポート等でバックエンドへ渡し、プロトコルペイロードを深く解釈しないため幅広いTCP・UDPサービスへ使えます。送信元NATや直接サーバー戻り値等、パケットパスは実装で違います。

L7負荷分散装置・逆プロキシはHTTPを終端し、ホスト、パス、ヘッダー、方式、Cookie等で経路制御し、リダイレクト、ヘッダー追加、WAF連携を行えます。その分、HTTPバージョン、本文大きさ、タイムアウト、WebSocket・ストリーミング対応を確認します。

アルゴリズムと実際の負荷

ラウンドロビン、最小権限のconnections、ハッシュ、重み付き経路制御等があります。要求一件の処理量が同じとは限らず、接続数が少なくても長時間・高負荷の場合があります。

HTTP キープアライブやHTTP/2では一接続へ複数要求が載り、L4単位の分散とL7要求単位の分散が違います。バックエンドCPU・遅延・待ち行列を観測してweightを調整します。

ヘルスチェックの範囲

TCP確認はポートで受け入れできるか、HTTP確認はパスへ期待状態が返るかを確認します。深い確認はデータベース等も確認できますが、依存先の一時不調で全バックエンドを同時に外す危険があります。

稼働確認、準備完了状態、依存先正常性を分けます。新インスタンスはウォームアップ後に登録し、異常しきい値・正常しきい値で一回の揺れに反応し過ぎないようにします。

TLS終了と再暗号化

フロントエンドでTLSを終端すると証明書と秘密鍵を分散装置が持ち、バックエンドへHTTPまたは再TLSで接続します。クライアントから分散装置がHTTPSでも、バックエンド区間が自動で暗号化されるとは限りません。

パススルーならTLSをバックエンドまで通し、分散装置がHTTPパスを見られない場合があります。SNIに基づく経路制御、証明書回転、バックエンド識別情報検証をモデルに合わせます。

クライアントIPとプロキシ情報

プロキシ型ではバックエンド接続のソースが分散装置になることがあります。元クライアントIPは信頼する転送ヘッダーやPROXYプロトコル等で伝えますが、インターネットから同名ヘッダーを偽装されないよう信頼するプロキシ範囲だけを受けます。

アクセスログ、レート制限、監査でどのアドレスを使うか統一します。NAT・CDN・プロキシが複数段ある場合、ヘッダー連鎖の順序と上書き規則を決めます。

スティッキーセッションは均等性とトレードオフになる

Cookieやソースハッシュで同じクライアントを同じバックエンドへ寄せるセッション永続化は、ローカル状態を使うアプリケーションに役立ちます。一方、トラフィック偏り、バックエンド交換時のセッション損失、自動スケーリング効率低下を招きます。

可能ならセッション状態を共有ストレージへ出し、バックエンドを交換可能にします。接続先固定を使う場合は、有効期限、フェイルオーバー時の動作、Cookie等に関するプライバシーを確認します。

ドレイニングで既存接続の終了を待つ

メンテナンスやスケールイン時には、新規トラフィックを止め、既存接続が終わるまで待つdraining(ドレイニング)を使います。ロングポーリング、WebSocket、ストリーミング、アップロードでは接続が長時間残るため、最大待機時間とクライアントの再試行を設計します。

ドレイニング開始と処理停止の順序を誤ると要求を切断します。配備オーケストレーター、自動スケーリンググループ、負荷分散装置の状態を同期します。

冗長な入口として設計する

自分で管理するロードバランサーが一台だけでは、その装置自体がsingle point of failure(シングル・ポイント・オブ・フェイラー/単一障害点)になります。冗長ノード、仮想IPのフェイルオーバー、マネージドサービス、複数ゾーン配置などを使います。

DNS、証明書、設定保存、制御プレーン、経路にも依存します。複数ゾーンバックエンドだけで入口が冗長とは限りません。

ロードバランサーは一つの待ち受け口から正常な対象へ接続・要求を振り分ける入口です。L4・L7、ヘルスチェック、TLS、送信元情報、セッション、ドレイニング、ロードバランサー自体の冗長性を区間ごとに設計します。

listener、target、health check、multi-zone、cross-zone、request routingの実装例:AWS Elastic Load Balancing official documentation

関連用語