▼ 2007/07/04(水) DSR構成のロードバランサーについてのメモ
今日は、DSR(Direct Server Return)とかロードバランサーとかの
話でもしていくことにしますYO。
とりあえず、DSR(Direct Server Return)って何?
とか、ロードバランサーって何さ??
って場合は、以下のサイトを参考にしてみてください。
まだ、理解してない部分とか多いけど、とりあえず簡単にまとめてみよう。
間違ってる部分は目をつぶってくださいw
VIP(バーチャルIPアドレス)というものを用意して、クライアントは
このVIPに対して接続を行う。もちろんクライアント側はこれがVIPであるとかの
区別は不要で、ただのIPアドレスとしていつも通りの接続を行う。
それで、VIPの先にあるロードバランサーが(厳密にはこの表現はNG)、
クライアントからの接続を受理し、配下にある複数のリアルサーバに
様々なアルゴリズムで割り振る(ロードバランシングする)。
これによって、本来なら「ひぃひぃ・・・」言いながらクライアントからの要求を
1台でさばいていたサーバも、複数台のサーバに負荷が分散されるので、
随分と楽になるのです。
それでロードバランサーに不幸にも選ばれてしまったリアルサーバは、
クライアントからの要求に応え、クライアントへ返信をする義務があります。
義務に応え、クライアントへ返信をするときは、またロードバランサーを通って、
クライアントへと帰っていくのです。
こんな感じのものがロードバランサーでつ。
ただ、上のような構成だとロードバランサー自身が激務になります。
クライアントから接続があれば、決めたアルゴリズムに沿って、
リアルサーバに割り振らなければいけないわ。
ロードバランサー <-> リアルサーバ間での往復で
NAT変換しないといけないわ・・・
そんな問題を解決するのが、DSR(Direct Server Return)というものです。
DSRなら上のような状況でのNAT変換が無くなるので、
随分とロードバランサーの負荷は少なくなるわけです。
ただし、DSR構成にするとVIPで問題点が出てきます。
それは、仮にロードバランサーが「おまえさんに振るよ」って
実IPアドレスが、192.168.0.2 のリアルサーバを選んだとします。
ちなみにこの時のVIPは 220.157.185.215 だとします。
クライアントはVIPのアドレスに対して要求を出すのでした。
DSR構成の場合、ロードバランサーはNAT変換などを行わずに
リアルサーバに振るので、あて先IPアドレスは、クライアントからの
要求のままのVIP(220.157.185.215)となります。
でも、リアルサーバのIPアドレスは実際には、192.168.0.2 で、
自分のIPアドレス宛てでは無いので、ロードバランサーからの
パケットを一応受け取るが、そのまま返信ができない状態になってしまいます。
要は、クライアントへの返信ができないのです。
自分宛てのパケットじゃないから無視って感じですな。
そこでこの解決策として、ロードバランサー配下にあるリアルサーバの
loopbackにVIPを設定して、自分のIPはVIP(220.157.185.215)だと
信じ込ませる必要があるのです。要は騙しですなw
これだと、リアルサーバは先ほどの通信において、
自分宛てのパケットだと思うので、きちんとクライアントに返信ができるのです。
ただ、この方法だと色々と面倒臭いなって・・・
そもそも、リアルサーバ1つ1つに対して、loopbackの設定をしないといけないし、
VIPが変われば(そう変わるものでもなさそうだけど・・・)、また設定しないと。
それにLinuxの場合は、ARP応答なんかもしないようにしないと
いけないしで、何かとやることが多くて面倒臭いと思うのです。
そこで色々と調べてたら、以下のような方法が出てきました。
リアルサーバ(Linux環境)で以下を実行です。
まだテストしてないので何ともだけど、これを設定すれば、loopbackにVIPを
割り当てたりだとかの面倒な作業をしなくても、ちゃんとDSRできるようになるみたい。
原理としては、REDIRECT を指定するとそのマシン自体へ
リダイレクトするようになるので、上の記述であれば、
「入ってきたパケットで、宛先が220.157.185.215 のTCPパケットを
自分自身(localhost)へリダイレクトする。」
という意味になります。
こうすると、VIP宛てのパケットを自分宛てのパケットとして
扱うことができるようになるって原理です。確かにこれはいけそうだ。
ちなみにiptablesのREDIRECTについては以下を参考にしました。
11.13. REDIRECTターゲット
さてと、そんなわけで家の環境で無駄にDSR構成のロードバランサーを
作ってみますよw
最近、家だとプログラミングばっかしてるから、こーゆーの楽しそうだ!
- TB-URL http://chibilog.name/028/tb/
