このタスクについて
OSGi が使用可能でないと、管理者がアプリケーション・プラグインまたはキャッシュ・オブジェクトを
更新する必要がある場合、各グリッド・ノードを 1 つずつアップグレードしなければならず、ネットワーク、メモリー、
および CPU の利用にストレスを与えます。プラグインとキャッシュ Java オブジェクトは直接グリッド内に保管されるため、
このような操作が必要になります。各クラスの ClassLoader は異なるため、プロセスを
再始動せずにクラスを更新すると、グリッド・プラグインに矛盾が生じます。
eXtreme Scale 製品には
xscmd ユーティリティーと MBean が組み込まれています。管理者はそれらを使用して、各グリッド・コンテナーを
ホスティングしている OSGi フレームワークにインストールされているすべてのプラグイン・バンドルを表示し、どのリビジョンを
使用するか選択できます。xscmd を使用してプラグインを新しいランキングに更新すると、グリッドが静止してすべての
トランザクションが排出され、プラグインが更新された後、グリッドが再度アクティブ化されます。更新処理中にエラーが発生すると、プロセスは
ロールバックされ、古いランキングが復元されます。
- バンドルのバージョンを作成し、バンドル・マニフェスト内のバージョン番号を上げ、各 eXtreme Scale プラグイン・サービスの
ランキングも大きくします。 元のバンドル・バージョンが Bundle-Version: 1.0.0 であれば、次の
バージョンは Bundle-Version: 1.1.0 と定義できます。
元のサービス・ランキングが ranking="1" であれば、次の
ランキングは ranking="2" と定義できます。
重要: OSGi サービス・ランキングは整数でなければなりません。
- 新規バンドルを eXtreme Scale コンテナー・サーバーを
ホスティングしている各 OSGi フレームワーク・ノードにコピーします。
- 新規バンドルを OSGi フレームワークにインストールします。バンドルには、バンドル ID が割り当てられます。
例えば、次のようになります。
osgi> install <URL to bundle>
- 割り当てられたバンドル ID を使用して、新規バンドルを開始します。
例えば、次のようになります。
osgi> start <id>
新規バンドルが開始されると、eXtreme Scale OSGi サービス・トラッカーが
バンドルを検出し、更新可能な状態にします。
- xscmd -c osgiAll コマンドを使用して、各コンテナー・サーバーが新規バンドルを
認識していることを確認します。osgiAll コマンドは、グリッド内のすべての
コンテナーに ObjectGrid 記述子 XML ファイル内で
参照されているすべてのサービスについて照会し、使用可能なすべてのランキングを表示します。例えば、次のようになります。
xscmd -c osgiAll
Server: server1
OSGi Service Name Available Rankings
----------------- ------------------
myLoaderServiceFactory 1, 2
mySerializerServiceFactory 1, 2
Server: server2
OSGi Service Name Available Rankings
----------------- ------------------
myLoaderServiceFactory 1, 2
mySerializerServiceFactory 1, 2
Summary - All servers have the same service rankings.
- xscmd -c osgiCheck コマンドを使用して、1 つ以上のサービス・ランキングが
更新の有効なターゲットであるか確認します。例えば、次のようになります。
xscmd -c osgiCheck -sr
mySerializerServiceFactory;2,myLoaderServiceFactory;2
CWXSI0040I: The command osgiCheck has completed successfully.
- osgiCheck コマンドの結果に何もエラーがなければ、更新処理中の
障害に備えて配置サービスのバランサーを中断して、断片移動を
回避します。 配置を中断するには、更新の影響を受けるすべてのオブジェクト・グリッドとマップ・セットに
対して xscmd -c suspendBalancing コマンドを使用します。
例えば、次のようになります。
xscmd -c suspendBalancing -g MyGrid -ms MyMapSet
- 各オブジェクト・グリッドとマップ・セットのバランシングが中断状態になったら、
再度 xscmd -c osgiCheck コマンドを使用して、1 つ以上の
サービス・ランキングが更新の有効なターゲットであるか確認します。例えば、次のようになります。
xscmd -c osgiCheck -sr
mySerializerServiceFactory;2,myLoaderServiceFactory;2
CWXSI0040I: The command osgiCheck has completed successfully.
- オブジェクト・グリッドとマップ・セットのバランシングが
中断状態になったら、osgiUpdate コマンドを使用して、オブジェクト・グリッドとマップ・セットの
すべてのサーバーでサービスを更新します。例えば、次のようになります。
xscmd -c osgiUpdate -sr
mySerializerServiceFactory;2,myLoaderServiceFactory;2 -g MyGrid -ms MyMapSet
- アップグレードが成功したことを確認します。例えば、次のようになります。
Update succeeded for the following service rankings:
Service Ranking
------- -------
mySerializerServiceFactory 2
myLoaderServiceFactory 2
- ランキングが正常に更新されたことを確認したら、xscmd -c resumeBalancing コマンドを
使用して、バランシングを再度使用可能にします。例えば、次のようになります。
xscmd -c resumeBalancing -g MyGrid -ms MyMapSet
- eXtreme Scale コンテナーをホスティングしている
各 OSGi フレームワーク内の古いバンドルを停止し、アンインストールします。 例えば、次のコードを Eclipse Equinox コンソールで入力します。
osgi> stop <id>
osgi> uninstall <id>