| 2. キャッシュ名前サービスについて |
| 2.1. キャッシュ名前サービスの役割と動作の概要について |
キャッシュ名前サービス(Cached Naming Service:CNS)は、複数の名前サーバのキャッシュを構築して信頼性の向上と負荷分散を行います。
キャッシュ名前サービスは、同じ構造(もしくはその一部)を持つ名前サーバを複数立ち上げている環境で利用します。キャッシュ名前サービスは、複数の名前サーバをキャッシュすることにより、特定の名前サーバに障害があってもクライアントに影響を及ぼす可能性を低減できます。また、名前サーバやそれに登録されているオブジェクトへの負荷を分散もしくは軽減することができます。
キャッシュ名前サーバと名前サーバは、お互いに通信してキャッシュの内容を更新しています。
キャッシュ名前サーバは参照元の名前サーバの生死確認をおこない、障害の発生した名前サーバの情報は無効にします。
名前サーバは、名前空間に変更があると各キャッシュ名前サーバに通知します。障害の発生したキャッシュ名前サーバがあれば、そのキャッシュ名前サーバは名前サーバが保持しているキャッシュ名前サーバのリストから外されます。
キャッシュ名前サービスを利用できるのは、キャッシュ名前サービスに対応したアプリケーションだけです。キャッシュ名前サービスに対応したアプリケーションは、キャッシュ名前サービスとの連携をサポートしていない環境でも動作します。そのときは名前サーバを参照します。
| 2.2. 設定 |
キャッシュ名前サービスを利用するためには以下の設定が必要です。設定の方法については、他の一般的な設定と同じです。詳しくは「WebOTX運用ガイドの「オペレーティングシステム別の設定方法」」を参照してください。
| 2.2.1. 必須設定 |
キャッシュ名前サービスを利用するときは必ず設定します。
| 2.2.1.1. キャッシュ名前サービス固有の設定 |
キャッシュ名前サービスに固有の設定です。以下にそれぞれの設定について説明します。
この設定は、キャッシュ名前サーバのスレッド方針を指定します。この設定を"pool"にすると、キャッシュ名前サーバはマルチスレッドで動作します。キャッシュ名前サーバが動作するホストではこの設定を"pool"にしてください。また、これにともないPoolThreadNumber(下記)も設定します。
この設定は、名前サーバがキャッシュ名前サーバと連携するかどうかを指定します。この設定を"on"にすると、キャッシュ名前サーバとの連携を受け付けます。キャッシュ名前サーバと連携させる名前サーバが動作しているホストは"on"に指定してください。
nmsvlistはキャッシュ元となる名前サーバのリストのファイルです。キャッシュ名前サーバを動作させるマシンの($OrbRoot)/confディレクトリに置いておきます。nmsvlistには名前サーバ1つにつき1行ずつ、ホスト名, IOR文字列, corbaloc:もしくはcorbaname:の形で記述します。Windows版ではorbcustmの「キャッシュ名前サーバが参照する名前サーバのリスト」フィールドで変更できます。
例) server1.co.jp IOR:..... corbaloc://server2.co.jp/NameService corbaname://server3.co.jp/NameService
| 2.2.1.2. 一般的な設定 |
キャッシュ名前サービスを利用しないときも有効な設定です。以下にそれぞれの設定について説明します。また、キャッシュ名前サービス利用時にはどのように設定すればよいかも示します。
この設定は、初期サービスのアドレスを複数指定したときの動作を指定します。この設定を"on"にすると、マルチスレッドによる同時処理をします。未設定時は、従来の順次処理が行われます。キャッシュ名前サービスを利用するクライアントを動作させるホストは"on"に設定してください。
この設定は、名前サーバのスレッド方針を指定します。この設定を"pool"にすると、名前サーバはマルチスレッドで動作します。キャッシュ名前サービスを利用するときは、名前サーバが動作するホストで"pool"に設定してください。また、これにともないPoolThreadNumber(下記)も設定します。
この設定は、プールスレッドの数を指定します。未設定時は2です。名前サーバ、キャッシュ名前サーバが動作するホストは運用状況にあわせて設定してください。
| 2.2.2. オプション設定 |
キャッシュ名前サービスに関するオプション設定です。
| 2.2.2.1. キャッシュ名前サービス固有の設定 |
キャッシュ名前サービスに固有の設定です。以下にそれぞれの設定について説明します。
キャッシュ名前サーバが使用するポート番号を10進数で指定します。未設定もしくは0を指定したときは自動的に割り当てられます。Windows版ではorbcustmの「キャッシュ名前サーバのポート番号」フィールドで変更できます。orbcustmでポート番号を自動割り当てに設定するときは、必ず0を入力してください。
注意
ポート番号を自動割り当てで運用した場合、通信時にポート番号を解決するための処理が必要になるため、ポート番号指定時より処理時間が多く掛かります。特に理由がない場合は、ポート番号を指定して運用してください。
キャッシュ名前サーバと連携している名前サーバが動作しているか確認する間隔(秒)を指定します。未設定時は300秒(5分)です。
名前サーバのダウンを検出した場合、その名前サーバから収集したキャッシュは削除されます。また、ダウンしていた名前サーバが再起動していた場合は、キャッシュ名前サーバ上にあるキャッシュ(これは別の名前サーバから収集したものです)に相当するオブジェクトを名前サーバから収集し、キャッシュに加えます。名前サーバの生死状態に変化がない場合は何も行いません。
FullSynchroIntervalを指定すると、名前サーバの生死に関らず、指定した間隔で、キャッシュの更新を行います。
値はCacheSynchroIntervalのn倍というように指定します。CacheSynchroIntervalが300(秒)のとき、FullSynchroIntervalに4を指定すると、1200秒(20分)毎に、キャッシュの更新を行います。
(注意)
キャッシュの更新は、キャッシュ名前サーバおよび名前サーバに大きな負荷が掛かります。名前サーバに沢山のオブジェクトが登録されている場合は、CacheSynchroInterval×FullSynchroIntervalで計算される時間が小さくならないようにして下さい。
未設定時は0で、FullSynchroInterval間隔でのキャッシュ更新は行ないません。
名前サーバが更新されたとき、関連するCNSに、どのように情報を通知するかを決定します。
"all"を指定すると、オブジェクト登録時および削除時に情報を通知します。未設定時は削除時のみの通知となります。
この設定を有効にする場合、名前サーバ側、キャッシュ名前サーバ側の双方で"all"を指定して下さい。それ以外の組み合わせでは意味を持ちません。
例えば、名前サーバ側が"all"で、キャッシュ名前サーバ側が"all"でない場合、名前サーバは全ての情報を通知しますが、キャッシュ名前サーバは削除情報のみを受け入れます。これとは逆の設定の場合、キャッシュ名前サーバは全ての通知を受け入れますが、名前サーバが削除情報しか通知しないため、結果として、削除情報のみしか受け取れません。
oadによるキャッシュ名前サーバの定期的な生死確認を行なうかどうかをon / offで指定します。デフォルトはonです。静止確認時にキャッシュ名前サーバからの応答がない場合は、oadからキャッシュ名前サーバの情報を削除します。
ネットワーク負荷の大きなシステムでは、誤削除を避けるためoffを指定して下さい。
CNSのLoggingLevelを設定します。設定と引数の両方が指定されている場合は、引数が優先されます。
引数で設定する場合は、「-ORBLoggingLevel」を指定します。指定可能な値は、LoggingLevelと同じです。未指定時は、設定のLoggingLevelの値になります。
| 2.2.2.2. 一般的な設定 |
キャッシュ名前サービスを利用しないときも有効な設定です。以下にそれぞれの設定について説明します。また、キャッシュ名前サービス利用時にはどのように設定すればよいかも示します。
メソッド呼び出しにかかる最大待ち時間(秒)です。0に設定すると永久待ちになります。未設定時は30秒です。
キャッシュ名前サービス利用時は0に設定してはいけません。
この設定はキャッシュ名前サーバ、名前サーバ、クライアントが通信エラーと判断するまでの時間を調整することができます。一時的なネットワーク障害では待ち時間を長くすることで信頼性を上げることができますが、余り長いとキャッシュ名前サーバと名前サーバの間で通信する回数が多いとき、一時的にスレッドの数が多くなる可能性があります(「注意事項」を参照してください)。
corbalocが使用するポート番号を10進数で指定します。未設定もしくは0を指定したときは9827に割り当てられます。 Windows版ではorbcustmの「corbalocサーバのポート番号」から変更できます。orbcustmで既定値に設定するときは、必ず0を入力してください。corbalocに-portオプションを付けた場合は無視されます(「キャッシュ名前サービスを利用するものとしないものの混在について」を参照してください)。
| 2.2.3. Java利用時の設定 |
クライアントプログラムがJavaの場合の設定です。以下の設定にはConfigメソッドまたはプロパティのいずれかを使用します。両方設定されていたときは、プロパティによる設定が優先されます。
この設定は、初期サービスのアドレスを複数指定したときの動作を指定します。この設定をtrueにすると、マルチスレッドによる同時処理をします。未設定時は、従来の順次処理が行われます。キャッシュ名前サービスを利用するJavaクライアントはtrueに設定してください。
(1)jp.co.nec.orb.Config.corbalocAskWithMTメソッドによる設定
このメソッドは、ORB.initを実行する前に呼び出してください。
形式
package jp.co.nec.orb;
public final class Config {
public static void corbalocAskWithMT(boolean v);
};
true - マルチスレッドによる同時処理
false - 順次処理(既定値)
(2)プロパティCorbalocAskWithMTによる設定
true - マルチスレッドによる同時処理 false - 順次処理(既定値)
corbalocが使用するポート番号が9827以外のとき、Javaクライアントは必ず設定してください。org.omg.CORBA.ORB.string_to_objectに渡すオブジェクトアドレスのポート番号を省略したときの初期値となります。
(1)jp.co.nec.orb.Config.setCorbalocServerPortメソッドによる設定
このメソッドは、ORB.initを実行する前に呼び出してください。
形式
package jp.co.nec.orb;
public final class Config {
public static void setCorbalocServerPort(int port);
};
(2)プロパティCorbalocDefaultPortによる設定
| 2.3. 各サーバの起動/終了方法 |
| 2.3.1. キャッシュ名前サーバを起動するための設定 |
キャッシュ名前サーバを起動するためには、Object Broker起動時にキャッシュ名前サーバを起動するオプションを設定する必要があります。また、キャッシュ名前サーバを起動するサーバではcorbalocサーバも起動する必要があります。キャッシュ名前サーバが動作するホストでは、corbaloc起動時に名前サーバのオブジェクトのかわりにキャッシュ名前サービスのオブジェクトを返すオプションを設定する必要があります。
これらのオプションの設定方法はOSにより異なります。以下にそれぞれのOSについて説明します。
/etc/rc.config.d/ObjectSpinnerに必要な設定を追加します。
キャッシュ名前サーバを起動させるには、OBJECTSPINNER_CNAMESVを"on"に設定します。 また、CORBA::ORB::string_to_objectに渡したcorbaloc/corbaname URL("corbaname:...")に対してキャッシュ名前サービスのオブジェクトを 返すようにするにはOBJECTSPINNER_CNS_AS_NSを"on"に設定します (corbaloc/corbaname URLで指定したポート番号がcorbalocサーバの場合)。
OBJECTSPINNER_CNAMESV=on OBJECTSPINNER_CNS_AS_NS=on
/etc/objectspinner.confに必要な設定を追加します。
キャッシュ名前サーバを起動させるには、OBJECTSPINNER_CNAMESVを"on"に設定します。 また、CORBA::ORB::string_to_objectに渡したcorbaloc/corbaname URL("corbaname:...")に対してキャッシュ名前サービスの オブジェクトを返すようにするにはOBJECTSPINNER_CNS_AS_NSを"on"に設定します (corbaloc/corbaname URLで指定したポート番号がcorbalocサーバの場合)。
OBJECTSPINNER_CNAMESV=on OBJECTSPINNER_CNS_AS_NS=on
orbcustmを起動します。
キャッシュ名前サーバを起動するには「キャッシュ名前サーバを動作させる」チェックボックスをONにします。 このオプションを設定するとCORBA::ORB::string_to_objectに渡したcorbaloc/corbaname URL("corbaname:...")に対して corbalocサーバがキャッシュ名前サービスのオブジェクトを返すオプション(後述)もセットされます。
| 2.3.2. 起動方法 |
起動方法は通常の方法と同じです。本オンラインマニュアルを参照してください。
| 2.3.3. キャッシュ名前サービスを利用するものとしないものの混在について |
Object Broker起動時に起動するcorbalocサーバは1つで、キャッシュ名前サーバと名前サーバのどちらかしか使用することができません。
同一ホストで名前サーバとキャッシュ名前サーバの両方を使用するときは、他方とはキャッシュ名前サービス利用オプションの異なるcorbalocサーバを手動で起動する必要があります。
手動で起動するcorbalocサーバは、他方と異なるポート番号を指定する必要があります。
以下にcorbalocサーバを起動するオプションとその意味を説明します。
| 2.3.3.1. -CNSオプション |
-CNSオプションを指定すると、corbalocサーバはオブジェクトキー"NameService"に対して、キャッシュ名前サービスのオブジェクトを返します。このオプションを指定しなければ名前サーバのオブジェクトを返します。
例)キャッシュ名前サービスを利用するcorbalocとして起動する % corbaloc -CNS
| 2.3.3.2. -portオプション |
-portオプションはcorbalocサーバが使用するポート番号を10進数で指定します。このオプションによる指定はCorbalocServerPortの設定より優先します。
例)ポート番号を9800に指定して起動する % corbaloc -port 9800
| 2.4. キャッシュ名前サービス利用時の障害について |
キャッシュ名前サービスを利用時に障害が発生したときの動作について説明します。キャッシュ名前サービスを利用しても、障害発生時に避けられない待ち時間が存在します。以下に個々の例を示します。
全キャッシュ名前サーバ、全corbaloc、キャッシュ名前サーバとcorbalocが動作しているホスト、ネットワークのいずれかの障害時にCORBA::ORB::string_to_objectで最大RequestTimeout秒待ちが発生します。ネットワーク以外の一部障害では待ちは発生しません。
一部キャッシュ名前サーバ、一部corbaloc、キャッシュ名前サーバとcorbalocが動作しているホスト、ネットワークのいずれかの障害時にCORBA::ORB::string_to_objectでの障害箇所 x RequestTimeout秒待ちが発生します。
名前サーバ、名前サーバの動作するホスト、ネットワークのいずれかの障害時に最大($OrbRoot)/conf/nmsvlistに書かれている行数 x RequestTimeout秒待ちが発生します。
キャッシュ名前サービスを利用しないときと同じです。ローカルのoadが立ち上がるまで、最大20秒待ちます。20秒待ってoadが立ち上がらない場合は名前サーバを停止します。キャッシュ名前サーバ側に障害があっても待ちはありません。
| 2.5. 注意事項 |
キャッシュ名前サービスを使う場合、名前サーバに別の名前サーバの名前コンテキストや複数の経路を持つ名前コンテキスト/オブジェクトを登録してはいけません。
キャッシュ名前サービスが参照する名前サーバ間で、同一の名前を持つ名前コンテキストとオブジェクトがあってはいけません。例えば、名前サーバ1のルートコンテキストにAという名前の名前コンテキストが存在し、名前サーバ2にAという名前のオブジェクトが存在するような状態があってはいけません。
キャッシュ名前サーバが、別のキャッシュ名前サーバをキャッシュすることはできません。
キャッシュ名前サーバ起動時に整合性管理用のスレッドを1つ作成します。このスレッドは、キャッシュ名前サーバ起動中、常に存在します。
キャッシュ名前サーバはキャッシュされていない名前を検索するとき、参照している名前サーバの数だけスレッドを作成します。名前サーバとの通信が完了すれば、スレッドは終了します。
キャッシュ名前サーバが名前サーバへ要求したとき、名前サーバとの通信に障害があると障害のある名前サーバ x 名前サーバへの呼び出しの回数だけスレッドが増加します。これらのスレッドは通信がタイムアウトすると終了します。
CorbalocAskWithMTを設定しているとき、アプリケーションに指定したキャッシュ名前サーバの数だけスレッドを作成します。キャッシュ名前サーバまたはcorbalocサーバとの通信が完了すれば、スレッドは終了します。
キャッシュ名前サーバを停止した場合、少なくともRequestTimeout秒以上待ってから再起動してください。名前サーバ側にタイムアウト待ちのスレッドが残っていた場合、キャッシュ名前サーバの登録が無効になります。
($OrbRoot)/conf/nmsvlistファイルには同じ名前サーバを重複して記述してはいけません。
-portオプションをつけて起動したcorbalocサーバはObject Broker終了時に終了しません。HP-UX, SolarisおよびLinuxではpsコマンドによってプロセス番号を確認後、以下のようにして強制終了させます。
% kill -9 プロセス番号
Windows版ではタスクマネージャから強制終了させます。
| 2.6. 制限事項 |
キャッシュ名前サーバ起動時、キャッシュは構築しません。
キャッシュ対象の名前サーバはObject Brokerの名前サーバで、かつ、NameServiceUseCNSが"on"になっているときのみです。NameServiceUseCNSが設定されていないとき、および、他社の名前サーバとは連携できません。