- PR -

Tomcat5のクラスタリングにつきまして

1
投稿者投稿内容
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2006-03-14 23:11
みなさん、こんばんは。
どんたくおです。

// もしかしたら、LinuxSqueaeの話題でしたら、掲示板を変更します。

現在、以下のような環境で、Tomcatのクラスタリングを行っており
ます。

WEB1(Apache + Tomcat)
Apache 2.0.55
mod_jk2.0.4
Tomcat 5.0.28

WEB2(Tomcat)
Tomcat 5.0.28

workers2.propertiesとそれぞれのTomcatのserver.xmlを変更しま
して、WEB1がダウンしたときに、WEB2に切り替わるように設定しま
した。

そこで、ご質問がございます。
実は、今回このアプリケーションでは、ファイルをアップロードす
るのですが、例えばWEB1がダウンしているときは自動的に、WEB2の
Tomcatに切り替わるので、ブラウザ上からファイルをアップロード
すると、WEB2のディスクに保存されます。WEB1が回復したあと、
先ほどアップロードされたファイルはWEB1からは参照できなくなって
しまいます。

おそらく、WEBアプリケーションからファイルをアップロードしたり
するアプリケーションは大分メジャーだと思うのですが、今回のよ
うにTomcat2台構成のクラスタリングをしているような場合では、ど
のような解決方が一般的なのでしょうか。
当方、クラスタリング初体験で、ご相談させていただきました、し
だいです。

ちなみに、Linuxの経験があんまりないのですが、例えば、どちらか
のディスクをNFS(?)などで、公開し、それをもう片方がマウント
し、ファイルがアップロードされるディレクトリを同じにすれば、
解決できるのかと思いましたが、他に一般的な方法等ございましたら
ご教授いただけると幸いです。


よろしくお願いします。m(_|_)m
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-03-15 00:11
クラスタ環境では非静的なローカルファイルは基本的に使わない、
またはマスタが別にあるキャッシュ程度とするのがいいと思います。

私が思いつくのは、アップロードされたファイルはそのままDBに
BLOBとして投入し、後は利用状況によりローカルの一時ファイルに
キャッシュしてWebサーバに返させる、といった作りでしょうか。

普通のネットワーク経由のファイルシステム(CIFS, NFS等)では
冗長化できない、もしくはコスト的に割に合わないと思います。
DBサーバがシングル構成であれば、DBサーバのファイルシステムを
マウントしてそこをクラスタの共有領域とするのも手かもしれません。
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2006-03-15 01:34
クラスタリング環境では共有ディスクにファイルを保存するのが
一般的かとおもいますが、単に2台のサーバーの該当ディレクトリを
定期的にrsyncするのでも問題ないような気がしますがどうでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-03-15 03:21
まず、フェールオーバ時にどこまで可用性を求めるかを決めてはいかがでしょうか。
・Tomcat が落ちた場合にフェールオーバが必要
・OS/筐体レベルで落ちた場合にフェールオーバが必要
・落ちた場合に n 分前までの情報がフェールオーバできる必要がある
・復旧するまで、そのサーバで処理していたセッションは失われても Ok
などといった項目が決まれば共有ディスク用に3つめのサーバが必要なのか、セッションをレプリケーションする必要があるのかなどを決定できます。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-03-15 03:24 ]
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2006-03-15 16:29
みなさん、ご返信いただきまして、ありがとうございます。
当方、クラスタリングにつきまして、経験が浅いので大変参考に
なります。

当方の環境は以下の通りです。
// もう少し詳しくしてみました。
WEB1(Apache + Tomcat)
Apache 2.0.55
mod_jk2.0.4
Tomcat 5.0.28
RH ES4


WEB2(Tomcat)
Tomcat 5.0.28
RH ES4


DB(PostgreSQL)
PostgreSQL 7.4
RH ES4

以上のような構成です。


>あしゅさん
> クラスタ環境では非静的なローカルファイルは基本的に使わない、
> またはマスタが別にあるキャッシュ程度とするのがいいと思います。
参考になります。
ただ、当方もBLOBにすることを考えたのですが、DBへの負荷を考慮し
ローカルなディスクに保存する方針になりました。

>tetoさん
> 定期的にrsyncするのでも問題ないような気がしますがどうでしょうか?
はじめて、知りました。
// やはりLinuxの技術は大事ですね。

>インギさん
この部分が抜けておりまして、大変すみません。
WEB1のTomcatが落ちる
WEB2のTomcat OR 筐体(OS)が落ちる
場合に、フェールオーバが必要になりまして、
利用者にサーバが落ちたことを意識させたくないので、セッション
情報は保持したまま、片方で運用できればと思っております。



今の段階としましては、DBサーバに共有ディスクを用意し、WEB1と
WEB2でそれをマウントし、運用するという方法がよいですかね。


また、ご教授いただければさいわいです。
1

スキルアップ/キャリアアップ(JOB@IT)