xscmd による eXtreme Scale プラグインの OSGi サービスの更新

WebSphere® eXtreme Scale は、グリッドがアクティブであっても コンテナー・サーバー・プラグイン・バンドルをアップグレードできるようサポートします。このサポートにより、管理者は グリッド・プロセスを再始動しなくともアプリケーションの更新や追加を完了できます。

始める前に

eXtreme Scale OSGi バンドルを新しいバージョンに更新する前に、次のステップを完了してください。
  1. サポートされる OSGi フレームワーク内で eXtreme Scale サーバーを開始します。
  2. すべての eXtreme Scale プラグインをバンドルに分割します。各バンドルは、 サービス・ランキングを使用して、それぞれのプラグインのバージョンを識別する必要があります。
  3. キャッシュ・オブジェクトを Java プリミティブ型 (byte[]、Integer、String など) として指定するか、MapSerializerPlugin プラグインを 使用して保管しなければなりません。データ・オブジェクトは eXtreme Scale バンドル内に 保管され、アップグレードされません。データと相互作用するプラグインのみが更新されます。
  4. バージョン互換のあるキャッシュ・オブジェクト・データを設計します。新しいプラグインは、古いプラグインによって 作成されたデータと相互作用できなければなりません。
  5. ObjectGridLifecycle および BackingMapLifecycle イベントを listen するよう プラグインを設計して、それらのプラグイン内にある他のプラグインまたはメタデータへの参照をリフレッシュするような 設計にしてください。このようなアプローチを使用すると、メインのプラグインが更新されたとき、それらの 参照プラグインもリフレッシュされます。
  6. eXtreme Scale OSGi 更新処理はサーバーのみに影響します。プラグインを使用しているクライアントが ある場合、別途それらのクライアントを更新しなければなりません。

このタスクについて

OSGi が使用可能でないと、管理者がアプリケーション・プラグインまたはキャッシュ・オブジェクトを 更新する必要がある場合、各グリッド・ノードを 1 つずつアップグレードしなければならず、ネットワーク、メモリー、 および CPU の利用にストレスを与えます。プラグインとキャッシュ Java オブジェクトは直接グリッド内に保管されるため、 このような操作が必要になります。各クラスの ClassLoader は異なるため、プロセスを 再始動せずにクラスを更新すると、グリッド・プラグインに矛盾が生じます。

eXtreme Scale 製品には xscmd ユーティリティーと MBean が組み込まれています。管理者はそれらを使用して、各グリッド・コンテナーを ホスティングしている OSGi フレームワークにインストールされているすべてのプラグイン・バンドルを表示し、どのリビジョンを 使用するか選択できます。xscmd を使用してプラグインを新しいランキングに更新すると、グリッドが静止してすべての トランザクションが排出され、プラグインが更新された後、グリッドが再度アクティブ化されます。更新処理中にエラーが発生すると、プロセスは ロールバックされ、古いランキングが復元されます。

手順

  1. バンドルのバージョンを作成し、バンドル・マニフェスト内のバージョン番号を上げ、各 eXtreme Scale プラグイン・サービスの ランキングも大きくします。 元のバンドル・バージョンが Bundle-Version: 1.0.0 であれば、次の バージョンは Bundle-Version: 1.1.0 と定義できます。

    元のサービス・ランキングが ranking="1" であれば、次の ランキングは ranking="2" と定義できます。

    重要: OSGi サービス・ランキングは整数でなければなりません。
  2. 新規バンドルを eXtreme Scale コンテナー・サーバーを ホスティングしている各 OSGi フレームワーク・ノードにコピーします。
  3. 新規バンドルを OSGi フレームワークにインストールします。バンドルには、バンドル ID が割り当てられます。 例えば、次のようになります。
    osgi> install <URL to bundle>
  4. 割り当てられたバンドル ID を使用して、新規バンドルを開始します。 例えば、次のようになります。
    osgi> start <id>

    新規バンドルが開始されると、eXtreme Scale OSGi サービス・トラッカーが バンドルを検出し、更新可能な状態にします。

  5. 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.
  6. xscmd -c osgiCheck コマンドを使用して、1 つ以上のサービス・ランキングが 更新の有効なターゲットであるか確認します。例えば、次のようになります。
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  7. osgiCheck コマンドの結果に何もエラーがなければ、更新処理中の 障害に備えて配置サービスのバランサーを中断して、断片移動を 回避します。 配置を中断するには、更新の影響を受けるすべてのオブジェクト・グリッドとマップ・セットに 対して xscmd -c suspendBalancing コマンドを使用します。 例えば、次のようになります。
    xscmd -c suspendBalancing -g MyGrid -ms MyMapSet
  8. 各オブジェクト・グリッドとマップ・セットのバランシングが中断状態になったら、 再度 xscmd -c osgiCheck コマンドを使用して、1 つ以上の サービス・ランキングが更新の有効なターゲットであるか確認します。例えば、次のようになります。
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  9. オブジェクト・グリッドとマップ・セットのバランシングが 中断状態になったら、osgiUpdate コマンドを使用して、オブジェクト・グリッドとマップ・セットの すべてのサーバーでサービスを更新します。例えば、次のようになります。
    xscmd -c osgiUpdate  -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2 -g MyGrid -ms MyMapSet
  10. アップグレードが成功したことを確認します。例えば、次のようになります。
    Update succeeded for the following service rankings:
    Service                     Ranking
    -------                     -------
    mySerializerServiceFactory  2
    myLoaderServiceFactory      2
  11. ランキングが正常に更新されたことを確認したら、xscmd -c resumeBalancing コマンドを 使用して、バランシングを再度使用可能にします。例えば、次のようになります。
    xscmd -c resumeBalancing -g MyGrid -ms MyMapSet
  12. eXtreme Scale コンテナーをホスティングしている 各 OSGi フレームワーク内の古いバンドルを停止し、アンインストールします。 例えば、次のコードを Eclipse Equinox コンソールで入力します。
    osgi> stop <id>
    osgi> uninstall <id>

タスクの結果

eXtreme Scale バンドルが新しいバージョンに更新されました。