14.3. コンテナーレベルのロック

概要

コンテナーレベルのロッキングによって、より高速なフェイルオーバーのパフォーマンスを提供するためにバンドルをセカンダリーカーネルインスタンスに事前ロードできます。コンテナーレベルのロックは、単純なファイルと JDBC の両方のロックメカニズムでサポートされています。

コンテナーレベルのロックの設定

コンテナーレベルのロッキングを実装するには、プライマリー/セカンダリー設定の各システムの etc/system.properties ファイルに以下を追加します。

例14.7 コンテナーレベルのロック設定

karaf.lock=true
karaf.lock.level=50
karaf.lock.delay=10000

karaf.lock.level プロパティーでは、Red Hat Fuse インスタンスが OSGi コンテナーを起動するために起動プロセスをどこまで実行するかを示します。同等かそれ以下の開始レベルが割り当てられたバンドルも、その Fuse インスタンスで開始されます。

バンドルの開始レベルは、BundleName.jar=level 形式で、etc/startup.properties に指定されます。コアシステムバンドルのレベルは 50 未満ですが、ユーザーバンドルのレベルは 50 を超えています。

表14.1 バンドル開始レベル

開始レベル動作

1

コールドスタンバイインスタンス。コアバンドルはコンテナーにロードされません。セカンダリーインスタンスは、ロックが取得されるまで待ち、サーバーを開始します。

<50

ホットスタンバイインスタンス。コアバンドルがコンテナーにロードされます。セカンダリーインスタンスは、ロックが取得されるまで待ち、ユーザーレベルバンドルを開始します。コンソールは、このレベルで各セカンダリーインスタンスに対してアクセス可能です。

>50

ユーザーバンドルが開始されるため、この設定はお勧めしません。

ポートの競合回避

同じホストでホットスペアを使用する場合は、JMX リモートポートを一意の値に設定してバインドの競合を回避する必要があります。fuse 起動スクリプト (または子インスタンス上の karaf スクリプト) を編集して、以下が含まれるようにすることができます。

DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.authenticate=false"