負荷分散もしくはN+1冗長化(サービスを止めない技術)


サーバの冗長化方式で、HA方式ともうひとつ有名な方法が、負荷分散もしくはN+1冗長化といわれるものです。

厳密には負荷分散とN+1冗長化は違うんですけど、実現手段が同じ場合が多いです。

これはどういうものかといいますと、なにかのサービス(ここではWebサーバを動かすHTTPDだとします)を実行するサーバが、たとえば6台必要だとしますと、予備含めて7台用意します。そして、そのサーバとインターネットの間に、「負荷分散装置(ロードバランサー)」と呼ばれる機械をはさみます。

負荷分散装置はインターネットに対して、入り口となるひとつのIPアドレスを用意します(VIP:Virtual IPなどといいます)。クライアント(この場合はブラウザ)からVIPに向かってやってきたHTTPリクエストは、負荷分散装置であて先を7台のサーバに書き換えられて、サーバに分散させて送りつけます。

リクエストを受けたサーバは応答をクライアントに返そうとします。そのとき、負荷分散装置はサーバのデフォルトGATEWAYになっているので、応答パケットは負荷分散装置を通ります。負荷分散装置に到達した応答パケットは応答主のIPアドレスを負荷分散装置のVIPに書き換えて、クライアントに返します。

こうすることで、負荷分散装置はクライアントから見ると一台のサーバに見えますが、実際の処理は7台のサーバで分担することになります。

これによって、1台のサーバではしんどい処理をあたかも1台のサーバが処理しているかのように沢山のサーバにやらせることができます。

ここまでは性能の話で、冗長化の話ではありません。ここで、7台のサーバのうちの1台が故障してサービスできなくなったとします。そのとき、負荷分散装置はサーバをポーリングして、反応しなくなったサーバを負荷分散対象からはずすのです。

これによって、7台のサーバのどのサーバがダウンしてもサービスはほとんど止まることなく動き続けることができるのです。

すばらしいですね。

負荷分散装置はHTTPリクエストのTCPヘッダを解釈して、分散しますので、IPレベル(OSI7階層モデルで第三階層)でのネットワーク制御機器であるルーターをL3スイッチ(L3SW)というのにならい、L4スイッチといいます。また高機能な負荷分散装置はTCPヘッダだけでなく、URLのパスやクッキー、HTTPリクエストの内容を理解して分散先を制御します。このような負荷分散装置をL7スイッチといいます。(L5,L6スイッチというものはTCP/IPの世界では普通存在しません。念のため)

商用の負荷分散装置では、F5ネットワークスのBIG-IP、ファウンドリーのServerIron、ノーテルのAceDirectorなどが有名です。一般的にこれらの装置は目の玉が飛び出るほど高いです。

商用の機器を使わずに負荷分散を実現する方法として、Linux上で動くL4スイッチ機能であるLVSを用いる方法があります。また、apacheのmod_proxyモジュールを使って、HTTPリクエストをL7レベルで負荷分散する方法もメジャーです。

負荷分散装置はインターネットの矢面に立つことが多い機器ですので、ファイアーウォールなどを用意せずにLinuxなど脆弱性が広く知れ渡っている機器を使う場合には十分なセキュリティ対策が必要です。

関連する投稿



Leave a Reply