id:hirose31くんがロードバランサについてあれこれ書いてる.
そんなわきゃない>DNS RRはロードバランサの座を奪い返せるか
この間彼から教えてもらったんだけどLVS(LinuxVirtualServer)は結構すごいという話.
「でも安定性がぁ」とか「ASICには勝てないよね」といかいうやつは、まずは試してみてみー きっとびっくりするから。
ロードバランサの1運用形態であるDSR(Direct Server Return)を知らない人だと「ソフトウェアでロードバランサ?ありえねー」とか思っててもしかたないと思う.DSRを知らないといつまでもベンダーに高いお金を払うことになるのでチョロチョロ書いてみる.
DSRを知らない人がロードバランサーに持っているイメージは図の1の通りだと思う.つまり
- HUBを通してリクエストがロードバランサに届く(1,2)
- ロードバランサは適当にバランシングしてリアルサーバにリクエストをフォワードする(3)
- リアルサーバはレスポンスをロードバランサに返す(4)
- ロードバランサは返ってきたレスポンスをリクエスト元に返す(5,6)
この方式だとボトルネックはロードバランサになりやすい.例えばロードバランサが100Mイーサしか積んでないと100Mbps以上は絶対でないし,仮にギガイーサを積んでたとしてもソフトウェアベースでは1Gのパケットはきっとさばけないだろう.
ところがDSR方式だとどうだろう.DSR方式(図の2)は
- HUBを通してリクエストがロードバランサに届く(1,2)
- ロードバランサは適当にバランシングしてリアルサーバにリクエストをフォワードする(3)
- リアルサーバは*ダイレクトにリクエスト元にレスポンスを返す*(4,5)
というものだ.これだとロードバランサの仕事はリクエストパケットの割り振りだけなので,それほど負荷がかからないのがわかるだろう.実際のところリクエストパケットとレスポンスパケットは100〜1000倍くらいサイズが違うので,DSR方式が有用なのがわかると思う.
ただしDSR方式も万能ではない.
リアルサーバ側にもグローバルIPを振る必要がある(IPが少ないところは結構きついかも).←ツッコミもらいました.たしかにグローバルIP振る必要ないです(なにを勘違いしてたんだろう).- L3(IP)レベルの話なので,L7みたいに「URLベースで割り振りたい」とかは無理
トラブった時のFailover機構としてkeepalivedがあるようだし,チープにロードバランサ組みたい人にはかなりいいソリューションだと思う.
FreeBSDでもないのかな?と思ったらnet/ipvsというPortsがあるようだ.2chでも使っている様子.
ただカーネルにパッチを当てる必要があるので,それだったら最初からカーネルで対応済み&実績を積みつつあるLinuxの方がずっといいでしょう.
ところでid:hirose31くんは大学時代の後輩なんだけどGreeの勉強会でひさびさに会った.
世間は狭いなーとか思いましたよ.
(おしまい)
追記1
突っ込みもらったので修正.
http://d.hatena.ne.jp/hirose31/20060817/1155795703