本文とサイドメニューへジャンプするためのナビゲーションスキップです。

スタートアップガイド

J-Net21 中小企業ビジネス支援サイト

  • J-Net21とは
  • スタートアップガイド
中小機構
  • メルマガ登録
  • RSS一覧
  • お問い合わせ

HOME > 製品・技術を開発する > デジ・ステーション

デジ・ステーション


初級ネットワーク講座
第7回 ロードバランサとアドレス変換技術

前回は、基本的なネットワーク技術の1つであるアドレス変換を学んだ。アドレス変換は、主にプライベートアドレスとグローバルアドレスを相互に変換する目的で利用される。今回は、そのアドレス変換を応用したネットワーク機器の1つ、ロードバランサについて説明する。
 現在のネットワークシステムには、高いパフォーマンスと信頼性が求められている。その両方を確保するための方策の1つが多重化である。そこで、多重化されたシステムにパケットをそれぞれ適切に振り分ける技術が必要となる。では、その役割を担うロードバランサについて、詳しく見ていこう。

1 ロードバランサとは

1-1 なぜシステムを二重化するのか?

図1 処理要求と振り分け装置

同一の機能を持つ装置が2台あるとしよう。ごく当たり前のことだが、装置が1台の場合に比べ、2台の場合には処理をこなす量は単純に2倍になる。つまり、装置が2台あることでパフォーマンスが向上する。また、どちらか一方が故障した場合には、処理をこなす量が半分にはなるが、残りの1台の方で処理を続けることができる。つまり、装置が2台あれば信頼性が向上する。このように、装置の台数が多いほど、パフォーマンスおよび信頼性が高くなるわけだ。
  しかし、処理要求そのものは、どちらの装置で処理すべきなのかを選ぶことができない。そこで、処理要求をこの2台の装置に振り分ける仕組みが必要となる。

ネットワークシステムでこの振り分け作業を行う装置が、ロードバランサだ。「負荷分散装置」や「振分サーバ」とも呼ばれる。処理要求は、すなわちパケットである。そして装置に当たるのが、各種サーバをはじめ、ルータやファイアウォール、IDSなどのネットワーク機器である。ロードバランサは、配下のネットワーク装置に対して、処理要求であるパケットを振り分ける装置なのだ。
 処理要求が増えてきたとき、ロードバランサを用いていない場合には、装置自体を高い性能のものへ置き換えなければ、パフォーマンスや信頼性を維持することができない。しかし、ロードバランサを用いている場合なら、単に装置を増設し、ロードバランサの設定を追加するだけでよい。つまり、ロードバランサを用いることで、処理要求の増加に合わせて段階的にキャパシティを拡張することが容易となる。

ロードバランサとルータの関係
 ルータの役割を果たす「るー太くん」(るー太くんについては第3回「IPヘッダの解読」のコラム参照)には仲間が多い。
 レイヤ3スイッチ(第4回第3章参照)、ファイアウォール、そして今号登場のロードバランサなどは、みなルータと同じようにIPパケット内にある宛先IPアドレスを見て、経路制御(ルーティング)を行う。したがって、これらの機器はどれもルータの仲間といえる。
 スイッチングハブ、レイヤ2スイッチなどと呼ばれることもあるスイッチは、MACアドレスの判別を行うが、違うグループに属し、IPアドレスは見ない。

1-2 振り分け基準

図2 ロードバランサによる振り分け

ロードバランサは、パケットを配下の装置にバランスよく振り分けなければいけない。しかし、配下の装置の処理能力は、必ずしもどれも同じというわけではない。特定の装置に集中して負荷がかからないよう、管理者はあらかじめロードバランサに振り分け基準を設定しておく必要がある。振り分け基準は単純なものから、装置の状況に応じて振り分け先を決めるためのインテリジェンスを備え、複雑な制御が可能なものまである。

あるロードバランサの配下に3台のサーバ(サーバA、サーバB、サーバC)があるとしよう。ここで、ロードバランサの仲間でもある、おなじみのるー太くんに登場してもらい、主な振り分け方法を紹介してもらおう。


到着順による振り分け

るー太くん:「単純にパケットが届いた順番に、サーバA→サーバB→サーバC、次はまたサーバA、と振り分けていくんだ。一番簡単な方法だよ。」

送信元IPアドレスによる振り分け

るー太くん:「パケットの送信元IPアドレスをみて、振り分けるんだよ。

送信元IPアドレスを3で割った余りが"0"の場合は、サーバAに振り分ける。
送信元IPアドレスを3で割った余りが"1"の場合は、サーバBに振り分ける。
送信元IPアドレスを3で割った余りが"2"の場合は、サーバCに振り分ける。

パケットの中を見ていちいち割り算をしなくちゃいけないから、ちょっと大変かな。」

振分比率による振り分け

るー太くん:「サーバもスペックがいろいろあるから、それぞれの処理能力に応じて振り分けるんだよ。

例えば、サーバAの処理能力が、サーバBおよびサーバCの2倍ある場合には、そこで振分比率をA:2 B:1 C:1と設定するんだ。だから、サーバAには、他のサーバの2倍のパケットを振り分けるんだ。

サーバA→サーバB→サーバA→サーバC→サーバA→サーバB→サーバA→サーバC→

と、こんな感じだよ。」

稼働状況による振り分け

るー太くん:「もし、ある時3台あるサーバのうち、サーバAに負荷がかかっていたら、サーバAに振り分けると遅くなってしまう。だから、サーバAになるべく負荷がかからないよう、極力サーバBとサーバCにパケットを振り分けるんだ。」

サーバA→サーバB→サーバC→サーバB→サーバC→サーバB→サーバC→サーバB→サーバA→サーバC→

各サーバの稼働状況をいつも確認しなくちゃいけないから大変なんだよ。

稼働状況は、パケットの量、パケットの応答時間、サーバのCPU・メモリの使用状況などをみるとわかるんだ。」

クッキーによる振り分け

るー太くん:「これは、かなり高度なワザだよ。
  例えばショッピングサイトなどでは、商品情報→商品選択→商品購入情報入力→決済確認→決済完了のようにWebページが遷移していく。この場合、1人のユーザに対して同じWebサーバが処理応答しないと、商品情報や決済情報などが次の処理に引き継がれないなどの支障が出てきてしまう。だから、最初は任意のWebサーバに振り分けられたとしても、以降は同じWebサーバに振り分けなくてはいけない。そこで、ロードバランサはクッキー(Cookie)を使う。
  クッキーはWebサーバが生成し、クライアントPCのブラウザに送られる。クッキーにはいくつかの種類があるが、その中でセッションを維持するクッキーはセッションクッキーといい、セッションIDというセッションを識別する符号を持っているんだ。
  ロードバランサには、このセッションIDを見て、同一のセッションであればセッションの始まりから終わりまでを同じサーバに振り分けるパーシステンス機能があるんだ。」

図3 クッキーによるパケットの振り分け

図3 クッキーによるパケットの振り分け

   ユーザX:セッションID:1234 →サーバA(新たに記録)
   ユーザY:セッションID:1111 →サーバB(新たに記録)
   ユーザZ:セッションID:2222 →サーバC(新たに記録)
   ユーザY:セッションID:1111 →サーバB(記録と照合)
   ユーザX:セッションID:5678 →サーバC(新たに記録)
   ユーザZ:セッションID:2222 →サーバC(記録と照合)
   ユーザX:セッションID:5678 →サーバC(記録と照合)
   ユーザX:セッションID:1234 →サーバA(記録と照合)
   ユーザX:セッションID:5678 →サーバC(記録と照合)
   ユーザY:セッションID:1111 →サーバB(記録と照合)
   ユーザY:セッションID:1111 →サーバB(記録と照合)

るー太くん:「図3のように、パケットの中にあるクッキーのセッションIDと、振り分けたサーバの関連付けを記録して、パケットが届くたびにパケットの中にあるクッキーのセッションIDと記録を比較照合して振り分けていくんだよ。」

1-3 障害が発生した装置の切り離し

障害が発生した装置にパケットを送ると、応答がなくエラーとなってしまう。そこでロードバランサは、障害が発生した装置にはパケットを振り分けないようにしなくてはならない。そのため、ロードバランサには配下にある装置の稼働状況を確認し、障害が発生したこと、および障害から復旧したことを検出する仕組みが必要となる。それをヘルスチェック機能と呼ぶ。
 基本的には、ロードバランサが配下のサーバたち、ひとつひとつに「元気ですか?」と声をかけて「元気です」と応答してもらう。応答がなかったら障害発生!と判断し、パケットを振り分けない。

図4 ロードバランサのヘルスチェック機能

図4 ロードバランサのヘルスチェック機能

るー太くん:「サーバA、サーバB、サーバCに、ただ順番にパケットを振り分けているときに、ロードバランサがサーバCの障害を検出した場合は、サーバCを飛ばしてパケットを振り分けるんだ。

サーバA→サーバB→サーバA→サーバB→サーバA→サーバB→サーバA→サーバB→

と、こんなふうにするんだよ。」

2 ロードバランサの仕組み

ロードバランサに届いたパケットを振り分ける方法にはいくつかある。そのうち1つの方法がアドレス変換技術(NAT)を応用したものである。

図5 アドレス変換によるパケットの振り分け

図5 アドレス変換によるパケットの振り分け

前回説明したNATは、アドレス変換テーブルを作成し、1つのグローバルアドレスに対して1つのプライベートアドレスに変換する。ロードバランサのアドレス変換テーブルでは、1つのグローバルアドレスに対して、振り分け台数分のプライベートアドレスおよびそれぞれのアドレスの振り分け先を登録しておく。ロードバランサにパケットが入ってきたら、あらかじめ設定しておいた振分基準に基づいて、振り分け先を決定する。振り分け先が決定したら、パケットの「あて先IPアドレス」を振り分け先の装置のアドレスに変換する。

【次号予告】
 次回の初級ネットワーク講座では、ネットワークアドレス、ホストアドレス、ブロードキャストアドレスなどIPネットワークで用いられる様々なアドレスについて解説する。
 あわせて、近年ルータやレイヤ3スイッチにはますます高パフォーマンスが求められるが、ルータやレイヤ3スイッチの本来の機能であるルーティング(経路制御)を効率よく高速に処理させるための1つの技術として、経路集約が考え出された。そこで、CIDR、可変サブネットマスクの応用技術である経路集約の考え方と、いかにして経路集約が経路制御の高速化に寄与するかを説明する。

3 ロードバランサ最前線

ロードバランサは当初、もっぱら複数のWebサーバへの振り分けのみを実現するものが主流であったが、最近では適用範囲が広範囲に広がっている。例えば、業務サーバ、メールサーバ、ルータやファイアウォールなどのネットワーク機器、 IP電話で利用するSIPサーバの役割を果たす製品が出てきている。さらに、近年のセキュリティ意識の向上を背景に、ウイルスチェック機能、VPNゲートウェイが持つパケットの暗号化機能や、不正アクセスを検出するIDS機能などを持つ製品も登場してきており、他のネットワーク製品との区別が難しくなってきている。以下に、その例を挙げる。

4-1 暗号化通信に対応したロードバランサ

データ部を暗号化されたパケットの場合、通常のロードバランサではパケットの中身が確認できないため、クッキーによる振り分けのように振り分け基準によっては振り分けることができない(図6)。

図6 暗号化されたパケットの振り分け1

図6 暗号化されたパケットの振り分け1

よって、暗号化区間とロードバランサの位置関係の注意が必要である。SSLを用いる場合、暗号化・復号を行うSSLアクセラレータ機能を持つ装置が必要になる(図7)。こういったセキュリティ面を考慮して、最初から、またはオプションとしてこの機能をもつ製品も登場している。

図7 暗号化されたパケットの振り分け2

図7 暗号化されたパケットの振り分け2

4-2 二重化に対応したロードバランサ

高パフォーマンス・高信頼性を実現するためにロードバランサを導入するわけだが、ロードバランサ自体の高パフォーマンス・高信頼性も必須事項となってくる。効率よく振り分けようとすると、それだけ高度な判断を必要とするのだが、その反面、ロードバランサ自体の負荷がかかってしまう。当然、それだけの負荷に耐えるものとなれば、価格も相応となる。
  また、ロードバランサ自体に障害が発生した場合、そのシステム全体が使用不可能となってしまうため、ロードバランサ自体の多重化も検討項目となる。ロードバランサ製品を2台導入してもよいが、製品として1つの筐体内で電気系統も含めて二重化されている装置もある。

取材協力 : 株式会社アイテック

掲載日:2008年12月10日

キーマンズネット

出典元:株式会社リクルート キーマンズネット 2008年5月13日掲載分

検索

このページの先頭へ