![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第24章
この章では、サーバクラスタ設定に対してexteNd Director キャッシュコーディネータを設定する方法について説明します。この章は、次の節から構成されています。
exteNd Directorでは、キャッシュコーディネータを利用して、サーバクラスタ環境内のキャッシュデータを管理することができます。 つまり、キャッシュコーディネータによって、「サーバライフタイムキャッシュ」に保存されたオブジェクトの管理が可能になります (を参照してください)。キャッシュコーディネータは、サーバクラスタの1つのコンピュータ上で実行します。
サーバライフタイムキャッシュホルダに任意のオブジェクトを保存できます。 ただし、持続的な記憶場所(データベースなど)のデータからインスタンスを作成されたオブジェクトのみが、クラスタ環境で同期化できます。
サーバクラスタ内のすべてのサーバは、持続的な同一の保存場所にアクセスします。 持続的な保存場所からインスタンスを作成されキャッシュされたすべてのオブジェクトは、クラスタ環境で動作するアプリケーションサーバ間で同期化ができます。 その動作は次のとおりです。
データ(またはオブジェクト)がデータベースで更新されると、キャッシュされたオブジェクトはそれに応じて、影響を受けるサーバのライフタイムキャッシュホルダ内で更新されます。 この時点でサーバのキャッシュマネージャによってキャッシュ無効イベントが発生し、さらにこのイベントによってキャッシュコーディネータに通知が送信されます。
登録された残りのサーバインスタンスにキャッシュコーディネータからメッセージが伝達され、このデータが変更されたことが伝えられます。
その後にこのデータが要求されると、更新されたオブジェクトは、各サーバによって持続的な保存場所から取り出されてインスタンスが作成され、各サーバライフタイムキャッシュに再キャッシュされます。 この動作によって、キャッシュされたオブジェクトは常に最新の状態になります。
また、キャッシュコーディネータは各クラスタサーバが稼動していることを定期的に確認し、故障したサーバをクラスタから削除します。
注記: データは、他のサーバインスタンスへは複製されません。 これは、一時データをサーバライフタイムキャッシュに保存した場合に、データが他のサーバインスタンスへ複製されないことを意味します。
自動的に無効化イベントを発生させるオブジェクトをキャッシュする場合は、EbiSrvLifetimeCacheHolder.putObjectInCache()を使用し、EboStateを渡します。EbiSrvLIfetimeCacheHolder.removeObjectInCache()を呼び出すと、常にキャッシュ無効イベントが発生します。
重要: オブジェクトは、持続的な保存場所から物理的に削除されていない場合には削除しないでください。
キャッシュ無効イベントを発生させずにオブジェクトをキャッシュする場合は、EbiSrvLifetimeCacheHolder.putObjectInCache()を使用し、EboState.SILENCEを渡します。
詳細については、『API参照』のEbiSrvLifetimeCacheHolderを参照してください。
注記: exteNd Directorでは、さまざまなタイプのサブシステムランタイムデータに対する、組み込みサーバライフタイムキャッシュホルダが利用できます。組み込みキャッシュホルダの説明を参照してください。
Novell exteNdウィザードによってキャッシュコーディネータがデフォルトでインストールされます。 (カスタムインストールを使用して、この動作を省略することもできます)。 次に、再設定できるキャッシュコーディネータプロパティおよび各プロパティにアクセスできる場所のリストを示します。
config.xmlでキャッシュコーディネータプロパティを編集する
exteNd Directorプロジェクトで、FrameworkService-confディレクトリのconfig.xmlを開きます。
XML Editorが開きます。 目的のプロパティを探して、値を編集します。
注記: 次に、プロパティのソース表示を示します。 エディタのGraphical(デフォルト)ビューを使用することもできます。 エディタで[グラフィカルビュー]または[XMLソースビュー]を選択します。
</property> <property> <key>com.sssw.fw.coordinator.Host</key> <value>myCMServer</value> </property> <property> <key>com.sssw.fw.coordinator.Port</key> <value>54490</value> </property> <property> <key>com.sssw.fw.coordinator.start.sleepInterval</key> <value>10</value> </property> <property> <key>com.sssw.fw.coordinator.Start.tryCount</key> <value>3</value> </property> <property> <key>com.sssw.fw.coordinator.reconnect.sleepInterval</key> <value>60</value> </property>
# This properties file contains properties for the # extendDirector Cache Coordinator # version 4.0 or later cc.port=54490 cc.watcher.interval=60 cc.logging.level=3
Windowsのプログラムメニューからキャッシュコーディネータを実行する
キャッシュコーディネータをサービスとして実行する(Windowsのみ)
[開始]を選択して手動でプログラムを起動するか、[スタートアップ]を選択してサービスを[自動]に変更して、サーバクラスタを起動するとバックグラウンドで自動的に実行するようにします。
クラスタ内のサーバがキャッシュコーディネータに接続できない場合、サーバによってキャッシュ無効機能が無効となり、キャッシュコーディネータに再接続します。 再接続が失敗した場合でも、サーバを再起動することなくクラスタサーバキャッシュをフラッシュできます。 クラスタ内の各サーバには、DAC (Director管理コンソール)からアクセスでき、[Flush All]オプションを次の目的で使用できます。
注記: このオプションは、WebSphereアプリケーションサーバで動作するサーバクラスタには使用できません。 クラスタ内の各サーバを再起動する必要があります。
クラスタでサーバを再起動した場合は、キャッシュのフラッシュは必要ではありません。何もキャッシュされない状態でサーバは開始します。
DACを使用したキャッシュ情報へのアクセスに関する詳細については、を参照してください。
exteNd Directorでは、キャッシュコーディネータアクティビティのログ出力機能が利用できます。 各サーバインスタンスからキャッシュコーディネータへ送信されたキャッシュ無効メッセージが監視でき、キャッシュコーディネータ自体のアクティビティが監視できます。
キャッシュ無効ログ出力を設定するには、次の作業が必要です。
ログ出力を読みやすくするためには、各サーバインスタンスのサーバ識別子を供給します。
注記: ServerIDが自動的に供給されるアプリケーションサーバもあります。サーバ識別子の供給を参照してください。
ログ出力およびログ出力レベルの一般的な内容については、を参照してください。
キャッシュ無効ログ出力では、キャッシュログ出力レベル[5]が使用されます。
ログレベルの設定は、次の2つの方法があります。
ログ出力レベルを永続的に変更する EboCacheLog.LoggingLevelプロパティ(FrameworkService-conf /config.xmlにあります)を[5]に変更します。 このプロパティ値を更新すると、変更した内容はその後のサーバセッションで持続されます。
このファイルの編集については、config.xmlでキャッシュコーディネータプロパティを編集するを参照してください。
サーバセッションのログ出力レベルを変更する DACを使用してログ出力レベルを変更します。 この変更によって、このサーバインスタンスから現在のサーバセッションのキャッシュコーディネータに送信された、キャッシュ無効メッセージが監視できます。
キャッシュコーディネータサーバでログ出力レベルを5に更新する必要があります。 次の方法の中から1つ選択します。
ログ出力レベルを永続的に変更する SilverCache.propsのlogging.levelを5に変更します。 このプロパティ値を更新すると、変更した内容はその後のサーバセッションで持続されます。
このファイルの編集については、SilverCache.propsでプロパティを編集するを参照してください。
サーバセッションのログ出力レベルを変更する 次のようにオプションスイッチを追加して、キャッシュコーディネータをデバッグモードで実行します。
SilverCacheCoordinator -l 5
これによって、キャッシュコーディネータに登録されているアプリケーションインスタンスの数についての情報が提供されます。
ヒント: コマンドオプションの情報を表示するには、次のように実行します。
SilverCacheCoordinator -?
ログ出力を改善し、登録された各サーバインスタンスのサーバIDを読みやすくするため、アプリケーションサーバには、各サーバインスタンスを明確に識別する属性を供給するものがあります。 それに代わる方法として、サーバ起動オプションの-Dが使用できます。
exteNdアプリケーションサーバへのサポート ServletContextから利用できる属性に、com.novell.appsrv.servlet.application.host:portと呼ばれるものがあり、これは各サーバインスタンスの個別のServer IDを自動的に供給します。
WebSphereアプリケーションサーバへのサポート ServletContextから利用できる属性に、com.ibm.websphere.servlet.application.と呼ばれるものがあり、これは各サーバインスタンスの個別のServerID(host:port#)を自動的に供給します。
サーバ起動オプション サーバ起動オプションの+Dを使用して、各サーバインスタンスに対するユーザ独自の識別子を供給できます。 次の例に示すように、ServerID属性の値を指定します。
Silverserver +Dcom.novell.afw.ServerID=myID
ここで、myIDは一意の識別子を表します。
注記: このオプションは、他の方法で指定したどの識別子よりも優先して扱われます。
ServerID属性は、各サーバの再起動に対して自動的に生成されたUUIDのキャッシュマネージャ IDと結合されます。
注記: ServerIDが指定されていない場合、キャッシュマネージャ IDのみが使用されます。 この値はログ出力のコンテキストでは読みにくいため、お勧めできません。
サーバが起動されたとき、およびサーバインスタンスによってキャッシュ無効メッセージが生成されたときは必ず、ログ出力メッセージがサーバインスタンスおよびキャッシュコーディネータに生成されます。
サーバインスタンスが起動時にキャッシュコーディネータへ登録しようとするときに、各サーバインスタンスにメッセージが生成されます。 サーバインスタンスでログ出力メッセージが表示される様子を次に示します。
EboCacheLog|5|11/11/03|15:20:09:113|<Connect> to the cache coordinator @ michigan:54490... EboCacheLog|5|11/11/03|15:20:09:154|<Cache Coordinator Service rmi URI> is: \qrmi ://michigan:54490/EboCacheCoordinator/exteNdDirectorCacheCoordinator\q. EboCacheLog|5|11/11/03|15:20:09:424|<Register> this exteNd Director instance with the cache coordinator... EboCacheLog|5|11/11/03|15:20:09:113|<Connect> to the cache coordinator @ michigan:54490... successfully.
これに対応するメッセージが、キャッシュコーディネータで生成されます。 この例のserverIDはclonelです。 クライアントカウント(この例では、1)は、現在接続されているサーバの数を示します。
EboCacheLog|5|11/11/03|15:20:09:464|<Register> a client [ServerID: <clone1: c373e9f8cc736a65b1c7444553544200> AppID: <c373e9f8cc46d5b9b9d4444553544200>]. EboCacheLog|4|11/11/03|15:20:09:464|<Registered client count> for [AppID: <c373e9f8cc46d5b9b9d4444553544200>] is: 1.
最初の例は、EbiSrvLifetimeCacheHolderからputObjectInCache()が(state=EboState.UPDATEとして)呼び出されたときに、サーバインスタンスで発生した出力を示しています。
EboCacheLog|5|11/11/03|15:27:01:416|<Send notification> from [ServerID: <clone1: c373e9f8cc736a65b1c7444553544200> AppID: <c373e9f8cc46d5b9b9d4444553544200>] to cache coordinator, message: cached content with [key: <admin> cache holder ID: < DirectoryService.UserCacheHolder.exteNd Server>] has been modified [state 113].
次に、キャッシュコーディネータサーバコンソールでの対応する出力を示します。
EboCacheLog|5|11/11/03|15:27:01:426|<Receive notification> from [ServerID: <clone1:c373e9f8cc736a65b1c7444553544200> AppID: <c373e9f8cc46d5b9b9d4444553544200>] message cached content with [key: <admin> from cache holder: <DirectoryService. UserCacheHolder.exteNd Server>] has been modified [state: 113].
2番目の例は、EbiSrvLifetimeCacheHolderからremoveObjectInCache()メソッドが呼び出されたときに発生した出力を示しています。
EboCacheLog|5|11/11/03|15:32:11:572|<Send notification> from [ServerID: <clone1: c373e9f8cc736a65b1c7444553544200> AppID: <c373e9f8cc46d5b9b9d4444553544200>] to cache coordinator, message: cached content with [key: <PacPortletDetails.html> c ache holder ID: <testCluster.PageCacheHolder>] has been removed [state 112].
次に、キャッシュコーディネータサーバコンソールからの対応する出力を示します。
EboCacheLog|5|11/11/03|15:32:11:592|<Receive notification> from [ServerID: <clone1:c373e9f8cc736a65b1c7444553544200> AppID: <c373e9f8cc46d5b9b9d4444553544200>] message cached content with [key: <PacPortletDetails.html> from cache holder: < testCluster.PageCacheHolder>] has been removed [state: 112].
EbiCacheManager.getRemoteCoordinatorAdmin()を呼び出すことによって、キャッシュマネージャのEbiRemoteCoordinatorAdminオブジェクトが取得できます。 このオブジェクトによって、アプリケーションサーバインスタンスからキャッシュコーディネータを管理できます。 たとえば、CacheCoordinatorに現在接続されている登録済みのサーバインスタンスのリストが取得できます。 サーブレットまたはポートレットを実装して、リモート管理を行うこともできます。
詳細については、『API参照』のEbiRemoteCoordinatorAdminを参照してください。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...