読者です 読者をやめる 読者になる 読者になる

ロードバランサの運用.DSRって知ってますか?

id:hirose31くんがロードバランサについてあれこれ書いてる.

そんなわきゃない>DNS RRはロードバランサの座を奪い返せるか

この間彼から教えてもらったんだけどLVS(LinuxVirtualServer)は結構すごいという話.

「でも安定性がぁ」とか「ASICには勝てないよね」といかいうやつは、まずは試してみてみー きっとびっくりするから。

ロードバランサの1運用形態であるDSR(Direct Server Return)を知らない人だと「ソフトウェアでロードバランサ?ありえねー」とか思っててもしかたないと思う.DSRを知らないといつまでもベンダーに高いお金を払うことになるのでチョロチョロ書いてみる.


DSRを知らない人がロードバランサーに持っているイメージは図の1の通りだと思う.つまり

  1. HUBを通してリクエストがロードバランサに届く(1,2)
  2. ロードバランサは適当にバランシングしてリアルサーバにリクエストをフォワードする(3)
  3. リアルサーバはレスポンスをロードバランサに返す(4)
  4. ロードバランサは返ってきたレスポンスをリクエスト元に返す(5,6)

この方式だとボトルネックはロードバランサになりやすい.例えばロードバランサが100Mイーサしか積んでないと100Mbps以上は絶対でないし,仮にギガイーサを積んでたとしてもソフトウェアベースでは1Gのパケットはきっとさばけないだろう.


ところがDSR方式だとどうだろう.DSR方式(図の2)は

  1. HUBを通してリクエストがロードバランサに届く(1,2)
  2. ロードバランサは適当にバランシングしてリアルサーバにリクエストをフォワードする(3)
  3. リアルサーバは*ダイレクトにリクエスト元にレスポンスを返す*(4,5)


というものだ.これだとロードバランサの仕事はリクエストパケットの割り振りだけなので,それほど負荷がかからないのがわかるだろう.実際のところリクエストパケットとレスポンスパケットは100〜1000倍くらいサイズが違うので,DSR方式が有用なのがわかると思う.


ただしDSR方式も万能ではない.

  1. リアルサーバ側にもグローバルIPを振る必要がある(IPが少ないところは結構きついかも).←ツッコミもらいました.たしかにグローバルIP振る必要ないです(なにを勘違いしてたんだろう).
  2. L3(IP)レベルの話なので,L7みたいに「URLベースで割り振りたい」とかは無理


トラブった時のFailover機構としてkeepalivedがあるようだし,チープにロードバランサ組みたい人にはかなりいいソリューションだと思う.


FreeBSDでもないのかな?と思ったらnet/ipvsというPortsがあるようだ.2chでも使っている様子.

ただカーネルにパッチを当てる必要があるので,それだったら最初からカーネルで対応済み&実績を積みつつあるLinuxの方がずっといいでしょう.


ところでid:hirose31くんは大学時代の後輩なんだけどGreeの勉強会でひさびさに会った.
世間は狭いなーとか思いましたよ.

(おしまい)

追記1

突っ込みもらったので修正.
http://d.hatena.ne.jp/hirose31/20060817/1155795703