web-dev-qa-db-ja.com

Java-WebSphere-SQLServerアプリケーションのクラスター設定に関する推奨事項

現在、WebSphere上で実行され、SQL Server2008にアクセスするJavaベースのWebアプリケーションがあります。

このアプリケーションでは、コードとファイルを頻繁に変更する必要があるため、WebSphereのEARファイルを少なくとも月に1回更新しますが、通常はもっと頻繁に更新します。これはデータベースを集中的に使用するアプリケーションです。

ダウンタイムは私たちにとって非常に高額であり、現在、最も負荷の少ない時間(平日の午前3時頃)にダウンタイムを実行しようとしています。今後、これはオプションではないように思われ(特にアプリケーションの頻繁な更新を考慮すると)、クラスターのようなより良いホスティング設定を探しています。新しいセットアップを通じて、他の問題のいくつかも解決したいと考えています(これまで、回避策に頼ってきました)。

マルチノードクラスターを念頭に置いています。私のクラスターの理解は原始的なものなので、以下の仮定が間違っている場合はお知らせください。

新しい要件は次のとおりです。

  • ダウンタイムなしで(またはほんの数秒で)アプリケーションの新しいバージョンをデプロイできるはずです。
  • Webリクエストの負荷分散。
  • フェイルオーバーを処理できます。

ここに私が持っているいくつかの質問があります:

  1. どのようなサーバー設定をお勧めしますか?
  2. データベースがあることを考えると、2つのクラスター(1つはDB用、もう1つはアプリケーションのWebレイヤー用)がない限り、ダウンタイムをほぼゼロにすることは本当に可能ですか?
  3. Webレイヤー(および専用サーバー上のDB)用のクラスターが1つしかない場合、WebSphereでダウンタイムなしでアプリケーションの新しいバージョンをデプロイできるでしょうか?
  4. Javaアプリケーションは単一のJVMで実行されるように作成されています。WebSphereにデプロイした場合、WSはアプリケーションをクラスターで自動的に実行しますか?それともクラスターを使用する必要がありますか? -TerracotaのようなJVMを認識していますか?
1
Skylark

2つのクラスターが必要なようです。 Webトラフィックのバランスを取り、一方のサーバーがダウンした場合にもう一方のサーバーが負荷を処理できるように、Webサーバーの前にロードバランサーを備えたWebアプリケーションの負荷分散クラスターが必要です。このようにして、クラスターから1台のマシンを取り出し、アップグレードしてデータベースを変更し、古いバージョンのマシンを削除して、新しいバージョンのマシンに入れることができます。

データベース側では、アクティブ/パッシブクラスターが必要になります。これにより、SQLインスタンスを実行しているノートでハードウェア障害が発生した場合に、サービスを数秒以内に再起動できます。これは、リリースが不適切な場合、またはデータベースリリースプロセスがデータベースオブジェクトをロックした場合の停止を防ぐために何もしません。これは、クラスターの2つ(またはそれ以上)のノード間でデータベースの負荷をスケーリングすることもありません。 SQLクラスターは、一度に1つの物理ノードでSQLインスタンスを実行します。

1
mrdenny

これはおそらく言うまでもありませんが、JVM同期またはシングルトン/グローバルデータに依存するものは、クラスター化されたWebSphereサーバー間で安全でなくなることを忘れないでください。

WebSphereでクラスター対応JVMを使用することについては何も対処できません。 WebSphereは通常、それ自体以外のJVMでの実行をサポートしていないことは知っていますが、Googleは、一部の人々がそれらの製品を組み合わせていることを示しています。

WebSphereを使用する場合は、特定のクラスターメンバーへのセッションアフィニティを維持し、クラスターメンバーがダウンしたときのフェイルオーバーをサポートするために、アプリケーションサーバーの前に何があるかについても考慮する必要があります。 これは通常、WebSphereプラグインによって処理されます IBM HTTPServerやMicrosoftIISなどの特定のWebサーバーの場合。

ただし、1つのクラスターメンバーを故意に削除した場合でも、リクエストが他のメンバーにルーティングされ始めるのは瞬時ではありません

また、セッションフェイルオーバー(IMO、必ずしも必要ではない)が必要な場合は、分散セッション用にセッションマネージャーも構成する必要があります(データベースストレージまたはメモリ間セッションレプリケーションのいずれかを介して)。また、その内容はシリアル化可能である必要があるため、セッションに保存する内容に追加の制約が生じます。また、メモリから分散した場所にデータを保存または複製するタイミングを決定するために利用可能な戦略の1つを選択する必要があります。

0
dbreaux