ロードバランサーとは ── 実機を触ったことがない人のための負荷分散の構造

午後では「LB」「負荷分散装置」「サーバ負荷分散装置」の名で、Web システムの増強・冗長化・クラウド移行の題材に繰り返し出てきます。 一言で言えば「1 つの宛先(仮想 IP)で受けて、裏にいる複数のサーバに配る箱」ですが、設問で問われるのは 「配った後の応答をどう戻すか」「同じ利用者を同じサーバに固定するには」「サーバが死んだとどう判断するか」という細部です。 Web サーバ 3 台の小さな構成を例に、動作の順番どおりに説明します。

1. ロードバランサーが解いている問題

利用者 PC インターネット FW LB VIP 203.0.113.10 実サーバ(リアルサーバ) Web1172.16.1.11 Web2172.16.1.12 Web3172.16.1.13 宛先はいつも VIP 1 つ。 PC は裏に 3 台いることを知らない LB が実サーバを選んで 宛先 IP を書き換えて渡す 点線=ヘルスチェック失敗で 振分け対象から外した Web3
図1 LB が仮想 IP(VIP)で受けて 3 台の Web サーバに配る。以下の説明はこの図で進める

Web サーバが 1 台だと、処理能力の上限がそのサーバの性能で決まり、故障すればサービスが止まります。 性能を上げる方法は 2 つあって、サーバそのものを速い機種に替えるのがスケールアップ、台数を増やすのがスケールアウトです。 スケールアウトのほうが上限がなく、1 台壊れても残りで続けられるので、Web システムではこちらが定石です(令和5年 午後Ⅱ問2 の空欄「アップ/アウト」)。

ところが台数を増やすと「利用者はどのサーバにつなげばよいか」という問題が生まれます。DNS に 3 つの IP を登録する手もありますが(5 章の DNS ラウンドロビン)、 壊れたサーバの IP も返してしまいます。そこで、利用者には 1 つの IP(仮想 IP、VIP)だけを見せ、その裏で受け取った接続を生きているサーバに配る装置を置きます。これが LB です。

LB の目的 ①拡張性: サーバを足すだけで処理能力が増える。②可用性: 故障したサーバを自動で外す。③運用: 1 台ずつ振分けから外して無停止で保守できる。 午後の「なぜ LB を導入するか」は、この 3 つのどれかを問題文の状況に当てはめて書きます。

2. 動作の 4 ステップ

VIP で受けて、実サーバを 1 台選ぶ(分散方式)

利用者 PC は VIP(図1 では 203.0.113.10)宛てに TCP 接続を張ります。LB は新しい接続が来るたびに、実サーバ(リアルサーバ)の中から 1 台を選びます。選び方が分散方式です。

方式選び方向き不向き
ラウンドロビン順番に 1 台ずつ単純。サーバの性能が同じで、処理の重さも揃っているとき
重み付けラウンドロビン性能の高いサーバに多く回す新旧サーバが混在するとき
最少接続数(リーストコネクション)今つながっている接続が一番少ないサーバへ処理時間がばらつくとき。令和6年 午後Ⅰ問1 の空欄はこれ
応答時間ヘルスチェックの応答が速いサーバへサーバの負荷を間接的に見たいとき

ここで大事なのは、選ぶ単位がパケットではなく接続(セッション)だということです。1 つの TCP 接続の途中でサーバが変わると通信が壊れるので、LB は「この接続は Web2 へ」という対応表(セッション管理テーブル)を持ち、同じ接続のパケットはずっと同じサーバへ送ります。

サーバが生きているか確かめる(ヘルスチェック)

LB は実サーバに定期的にヘルスチェックを送り、応答がなければ振分け対象から外します。何を送るかで検知できる故障が違います。

層送るもの検知できること検知できないこと
L3ICMP Echo(ping)サーバの電源断、NIC・ケーブルの故障OS は生きているが Web サーバのプロセスが止まっている状態
L4TCP の SYN(80 番や 443 番へ)ポートを開いているプロセスの有無プロセスはいるがエラーしか返さない状態
L7HTTP の GET で特定 URL を取得し、ステータスや内容を見るアプリケーションが正しく応答しているか(最も確実。ただし負荷は大きい)
ping だけでは足りない 「ICMP Echo には応答するが HTTP サーバのプロセスが停止している状態を検知できない」(令和6年 午後Ⅰ問1)、「サービスが稼働しているかどうか検査しないから」(令和5年 午後Ⅱ問2)と、 低い層のヘルスチェックの穴は繰り返し問われます。答えは「監視対象のサービスと同じ層(HTTP なら L7)で確認する」です。

同じ利用者を同じサーバに固定する(セッション維持)

買い物かごのように、サーバ側が利用者ごとの状態を持つアプリケーションでは、2 回目以降の接続も最初と同じサーバに届かないと状態が失われます。 これをセッション維持(パーシステンス、スティッキー)と呼び、何を手掛かりに「同じ利用者」と判断するかで 3 つの方式があります。

手掛かり仕組み弱点(午後で問われる所)
送信元 IP アドレス同じ送信元 IP は同じサーバへプロキシや NAT の裏にいる多数の利用者が 1 つの IP に見え、負荷が偏る(令和元年 午後Ⅰ問2)。逆に携帯網では同じ利用者の IP が途中で変わる
送信元 IP+ポート番号上に送信元ポートも加えるTCP コネクションが張り直されるたびにポート番号が変わる可能性があり、同じ利用者と判定できない(令和5年 午後Ⅱ問2)
CookieLB が最初の応答の Set-Cookie ヘッダに自分用の識別子を挿入し、以後の要求の Cookie ヘッダを見て振り分けるHTTP ヘッダを読む必要があるので L7 処理が要る。HTTPS では復号しないと見えない。Cookie のセッション ID が LB のセッション管理テーブルに無いとき(LB の再起動後など)は新規として振り直す(令和5年 午後Ⅱ問2)
SSL/TLS セッション IDTLS ハンドシェイクの ID で判定復号せずに済むが、ブラウザが ID を頻繁に更新すると切れる
なぜ Cookie 方式が本命か NAT 越しでも利用者を個別に見分けられるからです。問われ方は「空欄 Set-Cookie/Cookie」「LB が HTTP ヘッダを編集する処理を行うのはどの機能か」「送信元 IP 方式だと何が起きるか」の 3 パターンです。

応答を利用者に戻す

要求を実サーバへ届けるところまでは簡単ですが、応答が LB を通って戻るかどうかで構成が分かれます。ここが午後で最も設問になる部分なので、次章で独立に説明します。

3. 戻りの経路と構成方式

送信元 NAT 方式 DSR 方式 PC LB Web1 要求: 送信元を LB の IP に書き換えて Web1 へ 応答: Web1 は LB 宛てに返すので    必ず LB を通る 欠点: Web1 に本当の送信元 IP が見えない PC LB Web1 lo に VIP 要求: LB は宛先 MAC だけ Web1 に書き換える 応答: 送信元 VIP のまま PC へ直接返す   (LB を通らない) 条件: lo に VIP、VIP の ARP に応答しない
図2 応答を LB 経由で戻す送信元 NAT 方式と、サーバから直接返す DSR 方式

基本: 宛先 NAT と、戻りを LB に通す工夫

LB は要求パケットの宛先 IP を VIP から実サーバの IP に書き換えて転送します(宛先 NAT)。応答は逆に送信元 IP を実サーバから VIP に書き戻す必要があり、この書き戻しは LB しかできません。 つまり応答パケットは必ず LB を通らなければなりません。そのための方法が 2 つあります。

送信元 NAT の副作用と X-Forwarded-For 送信元 NAT をすると、実サーバの側にはすべての要求が LB から来たように見え、アクセス元 PC の IP が分かりません。アクセスログや IP による制限が使えなくなります。 対策は、LB が HTTP 要求に X-Forwarded-For(XFF)ヘッダとして元の送信元 IP を書き足し、サーバはそれを読むことです。「XFF ヘッダに送信元 IP アドレスを追加する設定」(令和元年 午後Ⅰ問2)、「EC サーバにアクセス元 PC の IP アドレスを通知するため」(令和5年 午後Ⅱ問2)と、ほぼ同じ答えが 2 回出ています。

DSR 方式(Direct Server Return)

動画配信のように応答のデータ量が要求よりはるかに大きい場合、応答まで LB を通すと LB がボトルネックになります。そこで応答を実サーバから利用者へ直接返すのが DSR 方式です。仕組みは少し変わっています。

  1. LB は要求パケットの IP ヘッダを書き換えず、宛先 MAC アドレスだけを選んだ実サーバのものに書き換えて同じセグメントに流す。
  2. 実サーバは宛先 IP が VIP のパケットを受け取ることになるので、自分のループバックインタフェースに VIP を設定しておく(自分宛てと認識させるため)。
  3. 実サーバは送信元 IP=VIP のまま応答を作り、自分のデフォルトゲートウェイから利用者へ直接返す。LB は通らない。
  4. ただし、実サーバが VIP の ARP 要求に答えてしまうと、FW が実サーバに直接パケットを送ってしまい LB が機能しない。そこで実サーバは VIP に対する ARP 要求に応答しないよう設定する。

平成27年 午後Ⅰ問1 がこの方式そのもので、「ループバック」「VIP アドレスに対する ARP リクエストに応答しないように設定する」「GARP」が解答です。 また DSR では LB が TCP を終端しないため、SYN パケットが届いた時点で振分け先を決める必要があり、「SYN パケットにはレイヤ 7 情報が含まれていない」ので Cookie などを見た振分けはできません。

SSL オフロードと証明書

HTTPS の暗号化・復号は CPU を食うので、LB で TLS を終端し、LB と実サーバの間は平文の HTTP にする構成をよく取ります(SSL オフロード、SSL アクセラレーション)。 利点は、サーバの負荷軽減に加えて、LB が HTTP ヘッダを読めるようになるので Cookie によるセッション維持や XFF の挿入ができることです。

このとき、サーバ証明書と秘密鍵は利用者から見た TLS の相手である LB に置く必要があります。「既設 EC サーバにインストールされているサーバ証明書と秘密鍵のペアを LB に移す」(令和5年 午後Ⅱ問2)がその答えです。 同じ問題で「証明書のコモン名と URL のドメインが異なるからエラーになる」も問われており、証明書は利用者がアクセスする FQDN に対して発行されていなければなりません。

4. LB 自身の冗長と、透過型負荷分散

LB が単一障害点にならないように

LB を 1 台にすると、今度はそれが止まれば全滅です。普通は 2 台をアクティブ・スタンバイで置き、VRRP と同じ考え方で VIP を 2 台で共有します(アクティブが死ぬとスタンバイが VIP を引き継ぎ、GARP で周囲の ARP テーブルを更新する)。 切替え時に接続を切らさないために、アクティブはセッション管理テーブルをスタンバイに同期しておきます。同期していないと、切替え後に「どの接続をどのサーバに送っていたか」が分からず、利用者は接続し直しになります。

サーバ以外を負荷分散する(透過型負荷分散)

LB は FW や IDS/IPS、プロキシのような通過型の機器の性能拡張にも使えます。FW を 2 台並べ、前後に LB を置いて振り分ける形です(平成27年 午後Ⅰ問2)。サーバ負荷分散との違いは 2 点です。

台数の設計 2 台で足りる負荷でも 3 台置くのは「故障発生時の性能を不足させないため」(平成27年 午後Ⅰ問2)、「1 台故障時にも応答速度の低下を発生させないため」(令和5年 午後Ⅱ問2)です。N 台必要なら N+1 台、という考え方で、理由を問われたらこの表現で書きます。

5. 広域負荷分散と CDN

広域 LB(GSLB) =権威 DNS サーバ 利用者 PC ① www の A レコードを問合せ ② 生きていて近いサイトの   IP を短い TTL で返す 東京サイト LBVIP-T 大阪サイト LBVIP-O ③ 返された IP(VIP-T)へ HTTP 点線=各サイトへのヘルスチェック CDN の場合 www を CDN 事業者のホスト名への CNAME にする → 利用者は最寄りのエッジ(キャッシュ)へ エッジに無ければエッジがオリジン(自社サーバ)へ取りに行く。自社に届くのはエッジからの通信だけ オリジンの FW は送信元を CDN の IP に限定する。DDoS はエッジ側で吸収する
図3 DNS の応答で振り分ける広域負荷分散と、CDN に配信を委ねる構成

DNS ラウンドロビン

1 つのホスト名に複数の A レコードを登録し、DNS サーバが順番を入れ替えて返す最も単純な分散です(令和5年 午後Ⅱ問1 の空欄)。利点は装置が要らないこと、欠点はサーバの死活を見ていないので壊れたサーバの IP も返してしまうこと、 そしてキャッシュ DNS サーバが応答を TTL の間覚えるので、切替えが即座に効かないことです。だから移行や切替えの前には「TTL を短くしておく」が定石です(同問「キャッシュ DNS サーバがキャッシュを保持する時間を短くするため」)。

広域負荷分散(GSLB)

東京と大阪のように離れた拠点(サイト)にまたがる分散では、L2/L3 でパケットを振り分けるわけにいかないので、DNS の応答を使います。広域 LB は権威 DNS サーバとして動き、問合せが来るたびに ①各サイトにヘルスチェックをして生きているサイトだけを候補にし、②問合せ元に近い、または負荷の低いサイトの VIP を、③短い TTL で返します。 各サイトの中では普通のサーバ負荷分散 LB が働くので、二段構えです。令和6年 午後Ⅰ問1 は、この広域 LB 方式と CDN 方式を比較する構成でした。

もう 1 つの広域分散が BGP エニーキャストです。複数拠点から同じアドレスブロックを BGP で広告し、利用者は経路的に最も近い拠点に自然に届きます。DNS のキャッシュに左右されない利点がありますが、BGP の知識が要ります(BGP ページの AS_PATH を参照)。 同じ問題で「不正な BGP 接続」「不正な経路に含まれるアドレスブロックへのコンテンツ配信ができなくなる」と、経路ハイジャックのリスクも問われています。

CDN(コンテンツ配信ネットワーク)

世界中にキャッシュサーバ(エッジ)を持つ事業者に配信を委ねる方式です。自社の DNS で www を CDN 事業者のホスト名への CNAME にすると、利用者は CDN の DNS が選んだ最寄りのエッジにつながります。 エッジはコンテンツをキャッシュしていればそのまま返し、なければオリジン(自社のサーバ)へ取りに来ます。

6. 用語集(午後で出る順)

用語意味午後でのポイント
仮想 IP(VIP)利用者に見せる代表アドレス。LB が持つDNS に登録するのは VIP。実サーバの IP は外に出さない
実サーバ(リアルサーバ)VIP の裏で実際に処理するサーバ群振分け先に追加・削除するのは運用作業(サーバ転用時に追加し忘れると使われない)
分散方式ラウンドロビン/重み付け/最少接続数/応答時間処理時間がばらつくなら最少接続数
ヘルスチェック実サーバの死活監視。L3(ICMP)/L4(TCP)/L7(HTTP)ping では Web プロセス停止を検知できない。サービスと同じ層で見る
セッション維持(パーシステンス)同じ利用者を同じサーバへ。送信元 IP/Cookie/TLS セッション ID送信元 IP は NAT で偏る。Cookie は L7 処理(復号)が要る
セッション管理テーブル「この接続はこのサーバ」の対応表スタンバイ LB に同期して切替え時の切断を防ぐ
宛先 NAT/送信元 NAT宛先を VIP→実サーバに/送信元を LB の IP に書き換える送信元 NAT は戻りを LB に通すため。元の送信元は XFF で伝える
X-Forwarded-For(XFF)LB が元の送信元 IP を書き足す HTTP ヘッダ2 回出題。「アクセス元 PC の IP をサーバに通知するため」
インライン/ワンアームLB を経路上に置く/1 本足で横に置くワンアームは送信元 NAT か、サーバのデフォルトゲートウェイを LB にする
DSR応答を実サーバから直接返す方式ループバックに VIP、VIP の ARP に応答しない、L7 情報で振り分けられない
SSL オフロードLB で TLS を終端証明書と秘密鍵は LB に置く。コモン名は利用者がアクセスする FQDN
透過型負荷分散FW など通過型機器の分散宛先 IP は書き換えず MAC だけ。行きと帰りで同じ FW
スケールアップ/スケールアウト1 台を強化/台数を増やすLB はスケールアウトの前提。N+1 で故障時性能を確保
DNS ラウンドロビン複数の A レコードを順番に返す死活を見ない。TTL の間キャッシュされる
広域負荷分散(GSLB)DNS 応答でサイトを選ぶヘルスチェック連動、短い TTL、近接性
BGP エニーキャスト複数拠点から同じ経路を広告経路的に近い拠点へ。経路ハイジャックに注意
CDN/エッジ/オリジン配信事業者のキャッシュ網/その末端/自社の元サーバCNAME で向ける。オリジンは送信元を CDN に限定。DDoS はエッジで吸収

7. 午後での問われ方と答え方の型

設問の型答え方出た年度
ping によるヘルスチェックで検知できない状態ICMP には応答するが HTTP サーバのプロセスが停止している状態(サービスが稼働しているか検査していない)R6 午後Ⅰ問1、R5 午後Ⅱ問2
空欄「処理時間がばらつくときの分散方式」最少接続数R6 午後Ⅰ問1
送信元 IP でセッション維持すると何が起きるかプロキシ・NAT 配下の多数の利用者が同じ IP に見え、負荷が偏るR1 午後Ⅰ問2
送信元ポート番号をセッション維持に使えない理由TCP コネクションが再設定されるたびにポート番号が変わる可能性があるからR5 午後Ⅱ問2
Cookie 方式の空欄・処理Set-Cookie で挿入、Cookie で判定。HTTP ヘッダを編集する処理(L7)R1 午後Ⅰ問2、R5 午後Ⅱ問2
送信元 NAT の目的・副作用への対策応答を LB に戻すため送信元を LB 自身の IP に変換。元の送信元は XFF ヘッダで通知するR5 午後Ⅱ問2、R1 午後Ⅰ問2
LB 導入で実サーバ側に必要な設定変更デフォルトゲートウェイを FW から LB に変更。証明書と秘密鍵を LB に移すR5 午後Ⅱ問2
DSR 方式の実サーバの設定ループバックに VIP を設定し、VIP への ARP 要求に応答しない。切替え時は GARPH27 午後Ⅰ問1
DSR で L7 振分けができない理由振分けを決める SYN パケットにはレイヤ 7 情報が含まれていないからH27 午後Ⅰ問1
透過型負荷分散で LB が書き換えるもの・条件宛先 IP は書き換えられないので宛先 MAC のみ。セッション単位に 2 台の LB が同じ FW を選ぶH27 午後Ⅰ問2
台数を 1 台多く置く理由1 台故障時にも性能(応答速度)を不足させないためH27 午後Ⅰ問2、R5 午後Ⅱ問2
DNS ラウンドロビン・TTL 短縮の理由キャッシュ DNS サーバが古い応答を保持する時間を短くし、切替えを早く反映させるためR5 午後Ⅱ問1
CNAME で外部サービスに向ける利点事業者が IP を変更しても自社 DNS の変更作業が不要R1 午後Ⅰ問2
CDN の DDoS 対策の利点攻撃パケットを攻撃元に近いところで遮断できるR6 午後Ⅰ問1
書き方の型 LB の設問は「どのパケットの、どのヘッダを、誰が書き換えるか」を正確に言えれば解けます。「LB が NAT する」ではなく「LB が送信元 IP アドレスを自身の IP アドレスに変換する」まで書く。 理由を問われたら「〜できないから」「〜が変わる可能性があるから」と、失敗する状況を具体的に書く。機器名は図中の表記(FWz、EC サーバ)をそのまま使う。

8. ミニ確認問題

クリックで答えが開きます。

Q1 LB を入れる目的を 3 つ拡張性(サーバを足して処理能力を増やす=スケールアウト)、可用性(故障サーバを自動で外す)、運用性(1 台ずつ外して無停止で保守)。
Q2 ICMP のヘルスチェックで検知できない故障と、その対策OS は応答するが Web サーバのプロセスが停止している状態。HTTP(L7)で特定 URL を取得して確認する。
Q3 送信元 IP によるセッション維持の弱点プロキシや NAT の裏の多数の利用者が 1 つの IP に見えて負荷が偏る。携帯網では同じ利用者の IP が変わることもある。
Q4 Cookie によるセッション維持で LB がすること最初の応答の Set-Cookie ヘッダに識別子を挿入し、以後の要求の Cookie ヘッダを見て同じサーバへ振り分ける。HTTPS なら LB で復号が必要。
Q5 ワンアーム構成で送信元 NAT をする理由と副作用応答を LB に戻すため(実サーバのデフォルトゲートウェイが LB ではないので)。副作用はサーバから元の送信元 IP が見えないこと。X-Forwarded-For ヘッダで通知する。
Q6 DSR 方式で実サーバに必要な 2 つの設定ループバックインタフェースに VIP を設定する。VIP に対する ARP 要求に応答しないようにする。
Q7 SSL オフロードにしたとき証明書はどこに置くか利用者から見た TLS の終端である LB。コモン名は利用者がアクセスする FQDN に一致させる。
Q8 FW を透過型で負荷分散するときの 2 つの制約宛先 IP を書き換えられないので宛先 MAC だけを書き換える。行きと帰りが同じ FW を通るよう、前後の LB がセッション単位に同じ FW を選ぶ。
Q9 DNS ラウンドロビンの弱点 2 つサーバの死活を見ないので故障サーバの IP も返す。キャッシュ DNS が TTL の間応答を覚えるので切替えがすぐ効かない(事前に TTL を短くする)。
Q10 CDN を使うとき自社 DNS と FW をどう設定するかwww を CDN 事業者のホスト名への CNAME にする。オリジンの FW は送信元を CDN 事業者の IP に限定し、直接アクセスを遮断する。

用語の振り返り

このページの用語集(17 語)から作った確認問題です。「意味 → 用語」は意味の説明(用語そのものは__で伏せてある)を読んで用語を入力し、Enter で答え合わせします。 表記ゆれで × になったときは「合っていた」で直せます。「用語 → 意味」は口で説明してから答えを開いて自己採点します。結果はこのブラウザに保存され、「×だけ」で間違えた語だけを解き直せます。

← 認証連携トップ(目次)へVXLANとEVPN →

作成 2026-10-28。ネットワークスペシャリスト 科目B(午後)対策。出典は平成27年秋・令和元年秋・令和5〜6年春の午後Ⅰ・Ⅱ(IPA 公開問題の解答例で確認したもの)。 関連: BGP とは(エニーキャスト・経路ハイジャック)、VRRP とは(LB 自身の冗長の考え方)、OSPF とは。