複数のサーバへリクエストを振り分けて負荷を分散させる装置・仕組み。
ロードバランサ(負荷分散装置)とは、複数のサーバの前に立ち、届いたリクエスト(=処理のお願い)を各サーバへ振り分けて負荷を分散させる装置・仕組みのことです。「ロード(負荷)」を「バランス(均す)」する役割からこの名前がついています。
身近な例で考えると、スーパーのレジ整理の係員に似ています。1つのレジに行列が集中しないよう、「次の方はあちらの空いているレジへどうぞ」と案内する係です。お客さんはどのレジが空いているか自分で探さなくても、係員の案内に従えばスムーズに会計できます。
上のツールで▶ボタンを押すと、クライアントからのリクエストをロードバランサがまとめて受け取り、複数のサーバへ振り分けて処理させる流れを確認できます。
ロードバランサが「どのサーバに渡すか」を決めるルールを振り分け方式(負荷分散アルゴリズム)と呼びます。状況に合わせて使い分けます。
代表的な方式は次のとおりです。
・ラウンドロビン:サーバ1→2→3→1…と順番に1件ずつ均等に配る。シンプルで分かりやすい
・最小コネクション:処理中の接続数がもっとも少ないサーバへ送る。混み具合を見て偏りを抑える
・重み付けラウンドロビン:性能の高いサーバに多めに配るなど、サーバごとの比率を変える
・IPハッシュ:クライアントのIPアドレスから振り分け先を計算し、同じ利用者を毎回同じサーバへ送る
上のツールでは、シナリオを切り替えてラウンドロビンと最小コネクションを比べられます。ラウンドロビンは順番だけで配るのに対し、最小コネクションは各サーバの接続数を見てから配るため、処理時間に差があるときでも偏りを抑えられます。
ロードバランサを使うと、サーバ全体の処理能力と可用性(=止まりにくさ)の両方を高められます。
主な用途と効果は次のとおりです。
・大量アクセスを捌く:1台では処理しきれないリクエストを複数台で手分けする
・可用性の維持:ヘルスチェック(=各サーバの死活監視)で故障した1台を自動で切り離し、残りのサーバで処理を続ける
・スケールアウトとの組み合わせ:サーバの台数を増やして処理能力を上げる「スケールアウト」と相性がよく、追加したサーバにもすぐ振り分けられる
とくに可用性の面では、待機系への切替(スタンバイ方式)が「1台が倒れたら予備に代わる」のに対し、ロードバランサは「最初から複数台で動かし、倒れた1台を外すだけで残りが動き続ける」という考え方だと捉えると、両者の違いが分かりやすいです。
振り分け方式によって、負荷の偏り方が変わります。なぜ同じ「順番に配る」だけでは不十分なのかを理解しておくと、方式の違いが実感できます。
たとえば3台のサーバに「1→2→3→1…」と順番に配るラウンドロビンでは、サーバ1に重い処理が残っていても次の番になるとまた割り当てられます。リクエストごとの処理時間がバラバラだと、特定のサーバに処理が溜まって偏りが生じます。
一方、最小コネクション方式は、配る前に「今どのサーバが一番空いているか(処理中の件数が少ないか)」を確認してから選びます。処理時間にばらつきがある場合に偏りを抑えやすいのが特徴です。
・ラウンドロビン:シンプル・高速。処理時間がほぼ均一なときに向く
・最小コネクション:偏り防止。処理時間にばらつきがあるときに向く
上のツールのシナリオを切り替えて、両方式の振り分け先の違いを比べてみましょう。
ロードバランサとリバースプロキシは、役割が重なる部分があります。混乱しやすいので整理しておきましょう。
| 項目 | ロードバランサ | リバースプロキシ |
|---|---|---|
| 主な役割 | 複数サーバへの振り分け(負荷分散) | 外部要求を受けて内部サーバへ転送 |
| 負荷分散 | あり(主機能) | あり(副機能として持つことが多い) |
| SSL終端 | 製品によりあり | あり(よく使われる機能) |
| キャッシュ | なし | あり |
実際の現場では、1つの製品やソフトウェアが両方の役割を兼ねることが多いです。「ロードバランサ」は「負荷を分散する」という機能に注目した呼び名であり、「リバースプロキシ」はサーバ側で外部要求を受ける配置に注目した呼び名です。どちらの言葉も「間に立ってサーバを守り、振り分ける装置」を指していると覚えると整理しやすいです。
ヘルスチェックとは、ロードバランサが定期的に各サーバへ「生きていますか?」という問い合わせを送り、応答がないサーバを自動的に振り分け対象から外す仕組みです。
なぜこの仕組みが必要なのか。ロードバランサは複数のサーバへ振り分けを行いますが、サーバが突然故障した場合、故障したサーバへもリクエストを送り続けてしまうと利用者は「エラー」画面に当たってしまいます。ヘルスチェックで故障を検知すれば、正常に動いているサーバだけへ振り分けを続けられるため、利用者は故障に気づかないまま使い続けられます。
・チェック方法:一定の間隔(数秒〜数十秒ごと)で各サーバへ軽い問い合わせを送る
・故障検知:決められた回数応答がなければ「故障」と判断し、振り分け先から除外する
・回復検知:その後また応答が戻れば自動で振り分け先に再追加する
身近な例で考えると、コールセンターのスーパーバイザーが担当者の電話を常に監視し、繋がらない担当者へは新しい電話を回さないのに似ています。担当者が電話に出られる状態に戻ったら、また割り当てを再開します。この自動切り離しと回復のおかげで、サーバが1台壊れてもサービス全体が止まりにくくなります。