WebOTX V6 JNDI のトラブルシューティング 2007 年 1 月 初 版 改 版 履 歴 i
目 次 1 はじめに...1 2 JNDIサーバとの 通 信 の 仕 組 み...1 3 レプリケーションの 動 作...2 4 JNDIサーバのレプリケーションの 設 定 方 法...4 5 JNDIサーバとの 通 信 障 害 の 対 処 方 法 について...5 5.1. Object Brokerサービスとの 通 信 に 失 敗 している 場 合...5 5.2. JNDIサーバとの 通 信 に 失 敗 している 場 合...6 ii
1 はじめに 本 資 料 では WebOTX で JNDI を 使 用 するときに 発 生 する 障 害 の 中 から お 問 い 合 わせの 多 い JNDI のレプリケーションに 関 する 設 定 方 法 と JNDI サーバとの 通 信 障 害 への 対 処 方 法 を 説 明 しています JNDI のレプリケーションは 通 常 Web アプリケーションの HTTP セ ッション 情 報 をレプリケーションするために 使 用 されます なお 本 資 料 は WebOTX Ver6 を 対 象 としています ただし Ver5 以 前 でも 基 本 的 な 動 作 は 同 じですが 設 定 方 法 は 異 なります (Ver5 以 前 では JNDI サーバは 単 体 で 動 作 する Java サー ビスとなります) 2 JNDI サーバとの 通 信 の 仕 組 み WebOTX JNDI の 設 定 方 法 障 害 対 処 方 法 について 説 明 する 前 に まず JNDI サーバとの 通 信 を 行 うときの 内 部 動 作 について 説 明 します JNDI サーバ 自 身 は RMI-IIOP プロトコルでクライアントからのリモートメソッド 呼 び 出 しを 実 行 する Java のサーバです これは WebOTX の JMX エージェントプロセスと 同 一 の Java VM 上 で 動 作 します 通 常 Java の RMI 呼 び 出 しを 行 う 場 合 RMI レジストリからサーバのリモートオブジェク トを 取 得 して 呼 び 出 しますが JNDI サーバの 場 合 は WebOTX Object Broker の 名 前 サー バから JNDI サーバにアクセスするためのリモートオブジェクトを 取 得 して 呼 び 出 します このオブジェクトは WebOTX ドメイン 起 動 時 に 自 ドメインの 名 前 サーバに 登 録 されます 1
Object Broker の 名 前 サーバからリモートオブジェクトを 取 得 するときは 通 常 はオブジェ クトにつけられた 名 前 を 指 定 して 取 得 しますが WebOTX JNDI の 場 合 は 少 し 異 なります 登 録 されている 名 前 を 指 定 するのではなく 特 定 の 名 前 コンテキスト 下 に 登 録 されている 全 てのオブジェクトを 取 得 して JNDI サーバとしてアクセスします オブジェクトの 名 前 は 特 に 意 識 しません これは 複 数 の JNDI サーバで 同 じ 名 前 情 報 を 共 有 させるためにこの ような 処 理 になっています 特 定 のコンテキストとは 実 際 には NEC/JNDI という 名 前 の コンテキストになります このコンテキストの 下 に 既 定 値 では ホスト 名 :ドメイン 名 と いう 名 前 でリモートオブジェクトが 登 録 されます 登 録 する 名 前 は JNDI サーバの 識 別 名 の 設 定 で 変 更 可 能 ですが 通 常 は 変 更 する 必 要 はありません これはクラスタ 環 境 で 複 数 の サーバに 同 じ 仮 想 ホスト 名 が 割 り 当 ててられるような 環 境 において それぞれの JNDI サ ーバのリモートオブジェクトが 同 じ 名 前 になって 上 書 き 登 録 されてしまうことを 防 ぐとき に 変 更 します JNDI のクライアント 側 から 参 照 する Object Broker の 名 前 サーバのロケーションを 指 定 す るには JNDI の java.naming.provider.url プロパティを 指 定 します 指 定 形 式 は 以 下 のと おりです corbaname://<ホスト 名 >:< 名 前 サーバポート 番 号 > 3 レプリケーションの 動 作 複 数 の JNDI サーバがレプリケーションした 場 合 の 動 作 内 容 について 説 明 します Object Broker の 名 前 サーバの JNDI 格 納 用 コンテキスト(NEC/JNDI) 下 に 複 数 の JNDI サーバの オブジェクトが 登 録 されている 場 合 は 対 応 する JNDI サーバをレプリケーションさせるよ う 動 作 します 具 体 的 な 動 作 としては 以 下 のようになります 2
1. JNDI サーバへのオブジェクトを 登 録 削 除 は 全 てのサーバに 対 して 呼 び 出 す 2. JNDI サーバからのオブジェクトの 取 得 は どれか 一 つのサーバから 取 得 すればよいた め 呼 び 出 しが 成 功 するまで 各 JNDI サーバに 対 して 順 次 呼 び 出 す この 動 作 によって 各 JNDI サーバに 登 録 されている 情 報 が 同 じになります これらの 処 理 は WebOTX の 提 供 する JNDI SPI(Service Provider Interface)クラスの 中 で 行 われますので アプリケーションでは 意 識 する 必 要 はありません HTTP セッションレプリケーションでは Web コンテナが JNDI サーバに 対 して HTTP セッ ションオブジェクトを 登 録 参 照 します 3
4 JNDI サーバのレプリケーションの 設 定 方 法 JNDI サーバをレプリケーションさせるための 具 体 的 な 設 定 方 法 について 説 明 します 基 本 的 には 各 ドメインの Object Broker 名 前 サーバには 同 期 される 全 ての JNDI サーバのオブ ジェクトが 登 録 するように 設 定 します これによってどのドメインにアクセスしても 他 の JNDI サーバと 同 期 されます JNDI サーバのオブジェクトの 登 録 先 の 指 定 方 法 は 以 下 のとおりです 1. 運 用 管 理 ツールを 使 用 する 場 合 アプリケーションサーバ JNDI サービスの 名 前 サーバ 連 携 に 登 録 する Object Broker 名 前 サーバの corbaname 形 式 URL を 指 定 します 登 録 先 コンテキスト 名 ( NEC/JNDI ) は 自 動 的 に 付 加 されるので URL に 含 める 必 要 はありません 複 数 の 名 前 サーバに 登 録 する ときは URL をカンマで 区 切 って 記 述 します 4
2. 運 用 管 理 コマンドを 使 用 する 場 合 set コマンドで 運 用 管 理 ツールに 指 定 する URL を 同 様 に 指 定 します otxadmin> set server.jndi-service.url=< 登 録 する 名 前 サーバの URL> 基 本 的 にはこれだけ 設 定 して WebOTX のドメインまたは JNDI サービスのみを 再 起 動 すれ ば 以 後 の JNDI サーバに 対 する 登 録 削 除 は 全 ドメインの JNDI サーバに 対 して 行 われま す 5 JNDI サーバとの 通 信 障 害 の 対 処 方 法 について JNDI サーバの 障 害 対 応 として 最 も 事 例 の 多 い 通 信 障 害 の 対 処 方 法 について 説 明 します JNDI の 呼 び 出 しが 以 下 の 例 外 により 失 敗 する 場 合 Object Broker 名 前 サーバから JNDI サーバのオブジェクトが 取 得 することができないことが 原 因 です javax.naming.communicationexception: Can't find JNDI name server. 以 下 のこのエラーが 発 生 したときの 原 因 と 対 処 について 説 明 します 5.1. Object Broker サービスとの 通 信 に 失 敗 している 場 合 Can't find JNDI name server. のメッセージの 後 に org.omg.corba パッケージの 5
Java 例 外 が 出 力 されている 場 合 は Object Broker 名 前 サーバと 通 信 する 際 にエラーが 発 生 しています 以 下 の 場 合 は Object Broker の 名 前 サーバが 起 動 していないことが 原 因 です org.omg.corba.no_response: Initial reference for NameService not found. (<ホス ト 名 >) jp.co.nec.orb.ob.oadpackage.notfound: IDL:Ob/Oad/NotFound:1.0 vmcid: 0x1000 minor code: 996 completed: No また Object Broker の 名 前 サーバと 通 信 するときは Object Broker の oad というプロセス とも 通 信 を 行 いますが その oad が 動 作 していないときは 以 下 のようなエラーが 発 生 しま す org.omg.corba.comm_failure: java.net.connectexception: Connection refused: connect:<ホスト 名 >: <oad ポート 番 号 > vmcid: 0x1000 minor code: 911 completed: No このような 場 合 は 動 作 していない Object Broker のサービスの 動 作 に 問 題 が 無 いかを 確 認 してください よくあるケースとしては Object Broker サービスが 使 用 するポートが 他 のプ ロセスで 使 用 されているために 起 動 に 失 敗 しています 5.2. JNDI サーバとの 通 信 に 失 敗 している 場 合 org.omg.corba パッケージのエラーではなく please check name server is active とい うメッセージが 出 力 されたときは Object Broker 名 前 サーバとの 通 信 は 成 功 したが そこ から 接 続 可 能 な JNDI サーバのオブジェクトが 一 つも 取 得 できなかったことが 原 因 です 以 下 の 点 を 確 認 してください 1. 対 象 となる WebOTX ドメインの JNDI サービスが 起 動 しているか 2. JNDI クライアント 側 の java.naming.provider.url プロパティが 正 しく 設 定 されている か 3 JNDI サーバの 通 信 先 アドレスがクライアントから 見 えないアドレスとなっていないか 以 下 3 番 目 のケースについて 詳 しく 説 明 します JNDI サーバに 接 続 するときの IP アドレス ポートの 情 報 は Object Broker 名 前 サーバに 登 録 されるリモートオブジェクトの 中 に 格 納 され クライアントはその 情 報 を 元 に 接 続 を 試 みます IP アドレスには WebOTX のデフォルト 設 定 ではサーバ 側 で Java のローカルホ 6
ストの IP アドレス 取 得 API を 呼 び 出 した 結 果 が 入 ります サーバが 複 数 のネットワークイ ンタフェースを 持 つ 場 合 どれが 使 用 されるかは OS の 設 定 に 依 存 しますので クライアン トから 見 えないアドレスが 設 定 されてしまう 可 能 性 があります これが 原 因 となっているかを 調 査 するためには JNDI サーバのリモートオブジェクトに 埋 め 込 まれる IP. ポートの 情 報 を 確 認 する 必 要 がありますが それには WebOTX の Web サイトで 公 開 されている ORBeyes または BindingViewer というツールを 使 用 し ます (BindingViewer は ORBeyes のコマンドライン 版 です) 1. ORBeyes を 使 用 する 場 合 対 象 となる WebOTX の Object Broker 名 前 サーバに 接 続 して NEC/JNDI 下 に 登 録 さ れている 名 前 を 選 択 し 右 クリックメニューから ParseIOR を 選 択 します 7
その 名 前 のオブジェクトの 内 容 が 別 ウインドウで 表 示 されます TAG_INTERNET_IOP(0) の Host が 接 続 先 の IP アドレスとなりますので これ がクライアントからアクセス 可 能 であるか 確 認 してください 2. BindingViewer を 使 用 する 場 合 以 下 のように 実 行 します ポートは 対 象 となる WebOTX ドメインで 動 作 している Object Broker 名 前 サーバのポート 番 号 を 指 定 します (インストール 時 に 作 成 される domain1 の 場 合 ポート 番 号 は 2809 となります) BindingVierwer namesv:<ホスト>:<ポート> select:h 結 果 はコンソールに 出 力 されます その 中 から 以 下 のように NEC/JNDI の 下 に 登 録 さ れている 情 報 に 着 目 し Host の 値 がクライアントからアクセス 可 能 な IP アドレスとな っているか 確 認 してください L ctx, ID:NEC, Kind: L ctx, ID:JNDI, Kind: L obj, ID:host1:domain1, Kind:, Host:xx.xx.xx.xx, Port:7780 確 認 した 結 果 JNDI サーバの IP アドレスがクライアントからアクセス 可 能 なアドレス となっていなかったときは WebOTX JMX エージェントプロセスに 対 して 以 下 の java オプションを 指 定 してオブジェクトに 埋 め 込 まれる IP アドレスを 変 更 します ( 設 定 後 ドメイン 再 起 動 が 必 要 です) 8
-Djp.co.nec.orb.ServerAddr=<IP アドレス> 以 下 具 体 的 な 設 定 方 法 について 説 明 します 1. 運 用 管 理 ツールを 使 用 する 場 合 アプリケーションサーバ JVM 構 成 の JVM オプション の 追 加 ボタン を 押 して 上 記 オプションの 指 定 を 追 加 します 2. 運 用 管 理 コマンドを 使 用 する 場 合 対 象 の WebOTX ドメインと 接 続 して 以 下 のコマンドを 実 行 します otxadmin> create-jvm-options -Djp.co.nec.orb.ServerAddr=<IP アドレス> 9