2009年6月14日日曜日

アプリケーションサーバのクラスタに関する考察

仕事でサーバクラスタの話が出たので少し調べてみることにした。

アプリケーションサーバを24時間稼動にする場合、誰でも2台以上のサーバでクラスタにする、というところまでは思いつくだろう。

しかし、その先が難しい。

ほとんどのWebアプリケーションではHTTPセッションをアプリケーションサーバが管理している。このため、片方のサーバがダウンした場合に他方のサーバに切り替えるとHTTPセッションが無効になってしまう。(つまり、ユーザーは強制的にログオフされることになる)

つまり、セッションをサーバ間で共有する仕組みが必要になる。(これをセッションクラスタリングやセッションレプリケーションというらしい。)幸いにして、多くの(高価な)アプリケーションサーバはセッションの共有に対応している。

たとえばWebLogicではクラスタ化したサーバ間でHTTPセッションをレプリケートできるらしい。(といったことが下のページに書かれている)
http://otndnld.oracle.co.jp/document/products/wls/docs81/cluster/failover.html

InterstageもV4 Enterpriseからセションリカバリ機能に対応しているらしい。
http://interstage.fujitsu.com/jp/technical/faq/apserver/v5/j2ee_webapp/faqmwtaps024.html

ただし、具体的な設定やハードウェアについて書かれているページは少ない。価格の高いエディッションでないとサポートしていない場合もあるので十分な下調べが必要そう。ネットワークの設定も問題だ。データセンターにおく場合、サーバ間で妙な通信方法とかを使用されているとお手上げである。


アプリケーションサーバを選んだら、次にクラスタを行うための方法を決める必要がある。大規模なシステムではハードウェアでクラスタを行う機器を導入するようだが、今回はそこまでの信頼性は必要なさそうなのでソフトウェアで行えないか調べた。

専用のハードウェアを使用しない場合、ApacheまたはLinuxを利用してTCP/IPの接続を振り分ける。方法はいくつかある。

・DNSラウンドロビンを使う。
http://japan.cnet.com/blog/neta/2006/08/10/dns_ecfc/
・NATまたはDRSを使う。
http://dsas.blog.klab.org/archives/50678999.html
・Apache+mod_proxy_balancerを使う。
http://www.ksknet.net/apache/mod_proxy_balan.html

Linuxの場合はLinux Virtual Serverとkeepalivedを組み合わせて使うらしく、設定が複雑そう。

Windows Serverの場合、Windows2003以降はNetwork Load Balancerという機能により簡単にロードバランスを実現できる。ただし、セッションレプリケーションには別サーバを立てるかSQL Serverが必要。今回のシステムはDBがOracleになりそうなのでWindows Serverの導入は難しそうだ・・・残念無念。


最後に。クラスタやロードバランサを導入した場合、それ自体が故障したら元も子もないので2台用意しないとだめかもしれない(そして更に経費がなくなる訳だ・・・)

0 件のコメント:

Share