19.1 詳細参照コスト

サーバアプリケーションの多くは、組み込みクライアント(Dclient)経由で他のサーバと通信します。これは、1つのサーバに、アプリケーションが動作するのに必要なすべてのeDirectoryデータが保存されているわけではないためです。1つの例が、要求をチェーンするように設定されたNLDAPです。

サーバアプリケーションがローカルサーバに保存されていないデータを要求した場合、サーバは要求されたデータが保存されている別のサーバを特定してから、クライアントに関するデータを取得します。このプロセスは「ツリーウォーキング」と呼ばれます。通常、サーバがツリーウォーキング経由で要求を満たすまでに時間がかかります。eDirectoryツリー設計に関するベストプラクティスのガイドラインを使用すればツリーウォーキングの必要性が最小限に抑えられますが、それでも必要な場合があります。

図 19-1 詳細参照コスト

図 19-1は、O=MyCorpから始まる、サーバAに対するcn=GHoweのLDAPサブツリー検索を示しています。ただし、cn=GHoweオブジェクトは、サーバA上に存在しないou=MidWestパーティションに配置されています。

クライアントの要求を満たすために必要なデータが保存されたサーバを特定するには、サーバAがサーバBまたはサーバCからデータを取得する必要があります。これを行うには、サーバAがサーバBとサーバCのどちらかに要求を送信する必要があります。サーバAはサーバBを選択しました。サーバ選択プロセスは予測不能であることに注意してください。サーバBはネットワーク上で使用可能で、要求を受け入れますが、要求を迅速に処理できないため、サーバCも必要なデータを提供できたとしても、サーバAはサーバBを待機することになります。サーバBが要求を満たすか、ネットワーク上で使用できなくなるまで、サーバAからの要求が待たされることになります。

以下のセクションで、eDirectoryサーバのパフォーマンスを改善する方法について説明します。

19.1.1 サーバ間接続の向上

詳細参照コスト(ARC)は高度なコストアルゴリズムです。ARCの主な目的は、サーバの機能停止を回避することです。ARCのメリットを以下に示します。

  • サーバのパフォーマンスと耐障害性の向上

  • サーバ間通信の改善

  • 負荷分散

  • リモートサーバヘルスモニタリング

  • 通信問題の分離と特定の簡素化

ARCを使用すべきなのは誰か?

オブジェクトまたはサービスのローカルコピーが保存されていないサーバは、他のサーバと頻繁に通信するため、ツリーでARCからもたらされた情報を探索する必要があります。ARCは、LDAP環境、特に、優先チェーン処理中に非常に効率的に動作します。

たとえば、図 19-2に示すように、サーバは要求を送り続ける別のサーバから悩まされる場合があります。

図 19-2 ワンストップサーバの影響

必要なオブジェクトのレプリカが保存された使用可能なサーバが他にあったとしても、このサーバが優先されると思われます。これは、サービスまたはレプリカを要求しているサーバがすでにこのサーバに接続されており、処理可能なすべての要求がこのサーバに集中する傾向があるためです。図 19-2は、S4からのすべての要求がS1に送信される様子を示しています。S4はすでにS1に接続されており、S1に対して認証されているため、S2とS3がその要求に応えることができたとしても、S4は青色のパーティションに対するすべての要求をS1に送信し続けます。ARCを使用すれば、より迅速に対応可能なサーバに負荷を分散することによって、このような状況を回避できます。このサーバを必要とするリモートサーバ(S4)上でARCを有効にする必要があります。または、すべてのサーバ上でARCを有効にすることができます。

図 19-3は、「カスケーディングサーバ」の影響を示すもう1つのシナリオを示しています。ここで、サーバS1は頻繁に応答を返しませんが、ダウンしているわけではありません。S1がダウンすると、要求がタイムアウトして、通信が停止します。サーバがまだトランスポートレベルでアップしているが、データベースが低速またはビジーの場合は、他のサーバからの新しい要求を受け付けてキューに入れ続けます。そのため、最終的に、追加のサーバ(S2)がスレッドを使い果たすことになります。未処理の要求がそれぞれリモートサーバでスレッドを取得し、スレッドが使い果たされた段階で、サーバが応答を返さなくなります。ARCは最も高速なサーバに要求を分散することによってこの問題を解決します。これは、低速なまたは不具合のあるサーバは要求の処理に高いコストがかかるためです。

図 19-3 カスケーディングサーバの影響

加えて、ARCは、耐障害性の向上にも役立ちます。サーバの通信問題を簡単に特定する機能を備えています。

19.1.2 参照コストのメリット

  • これは、リモートサーバへのほとんどの名前解決要求を計時/ルーティングします。

  • アドレスごとの名前解決要求時間をミリ秒単位で平均化します。これにより、ARCは、より細かいレベルでより積極的に参照のコストを調整できます。タイミングが秒単位ではなくミリ秒単位で追跡されるため、低速なサーバをすばやく検出することもできます。

  • 未処理要求を追跡することによって、要求に時間がかかりすぎているかどうかをすばやく判断できます。サーバで時間がかかっていることを確認するために、要求が完了するまで待つ必要はありません。

  • アドレス単位で応答時間を追跡します。1台のサーバが同じアドレスに何回も接続するのが普通です。接続単位ではなくアドレス単位で追跡することによって、1つの接続で他の接続から収集された統計情報を参考にできます。

メモ:LDAP要求を理解するために、ARCはプライベート接続の応答性も考慮します。

19.1.3 ARCの展開

ARCは、通常、サーバ単位で展開されます。ARC対応のこれらのサーバは新しいコスト情報を入手することができます。環境内のすべてのサーバでARCを有効にする必要があります。

展開に関する考慮事項

すべてのサーバ上でARCを有効にすることが役に立つとは限りません。図 19-4は、LDAPサーバの有効性に影響を与える状況を示しています。図では、S4に青色のパーティションではなく緑色のパーティションのコピーが保存されています。青色のパーティションに関する情報が必要なチェーンLDAP要求は、S1、S2、またはS3サーバに送信され、処理される必要があります。これはほとんどのケースで動作します。ARCは、まさにこのような状況に合わせて設計されています。

図 19-4 ARC展開に関する考慮事項

ただし、特定のLDAP操作の実行には困難が伴います。Bob.Blue.Novellなどのユーザを追加することはできますが、Bobを変更するために急いで戻ろうとすると操作が失敗します。図はS2上にBobが追加されたことを示していますが、S3上でBobを変更しようとしても、S3がまだS2と同期していないために操作が失敗して、S3はBobを受け取ることができません。ARCはユーザを別のサーバに誘導する機能を備えています。これは、ARCの方がオリジナルのコスト計算手法より動的なためです。

この設定は、サーバコストがあまり変化せず、正常に同期しているシナリオでうまく動作します。S4上でARCを無効にするとこの問題が解決されます。

19.1.4 詳細参照コストの有効化

ARCは、デフォルトで、eDirectoryに対して有効になっています。NDS iMonitorを使用してARCを設定するには、[エージェント環境設定]>[バックグラウンドプロセスの設定]の順にクリックします。加えて、[有効]、[無効]、および[デバッグ]オプションを使用できます。

図 19-5 NDS iMonitorエージェントの環境設定画面

NDSTrace

すべてのUNIXプラットフォームで、NDSTraceツールを使用してARCを有効にします。

表 19-1 UNIXプラットフォーム上でのARCの有効化

set NDSTRACE =!ARC

デバッグ用のgv_ResolveTimesTableを表示します。

set NDSTRACE =!ARC0

詳細参照コストを無効にします。

set NDSTRACE =!ARC1

詳細参照コストを有効にします。

set NDSTRACE =!ARC2

詳細参照コストをデバッグモードで有効にして、コストが決定されるたびに、名前解決DSTraceフラグに対する参照のコストを表示します。

19.1.5 詳細参照コストの調整

デフォルトで、ARCは調整する必要がありません。ただし、ARCの機能を変更したり、特定の機能を有効/無効にしたりするための調整可能なパラメータがARC内に存在します。ARCにとって重要なコンポーネントが3つあります。

詳細コスト

特定のアドレスのコストを見積もるように要求されたら、ARCは、接続に関する既知の情報を使用して特定の参照のコストを計算します。ARCがオンになっている場合は、参照のコスト計算に常に詳細コストが使用されます。

バックグラウンド監視

バックグラウンドスレッドは、定期的にタイマ情報をチェックして誤差がないことを確認します。サーバが低速の場合は、そのコストが上昇して、通信が停止する可能性が高くなります。バックグラウンドスレッドは、定期的(デフォルトでは1分ごと)に、テーブル内のサーバが更新されていないかどうかをチェックします。過去3分以内にサーバが更新されていなかった場合は、サーバがそれ自体に名前解決要求を発行してサーバのヘルスをチェックします。これにより、最新のサーバのコストが計算され、サーバがビジー状態を脱したのかどうか、つまり、正常に戻ったのかどうかも検出されるため、クライアントはサーバのヘルスをチェックする必要がありません。バックグラウンドスレッド用の変更可能な永続的な環境設定パラメータが2つあります。

  • ARC_MAX_WAIT: サーバのヘルスをチェックするためのサーバへの要求を発行するまでのタイマ値(デフォルトは180秒)

  • ARC_BG_INTERVAL: バックグラウンドスレッドの実行間隔(デフォルトは60秒。0は無効になっていることを意味し、スレッドは実行されません)。

詳細については、セクション8.4.24の永続的な環境設定パラメータの設定に関する説明を参照してください。

リモートヘルス情報

ARCを使用したサーバは、定期的に、リモートサーバにヘルス情報を要求します。これらは、ネットワーク上に追加で発行される要求ではなく、サーバが頻繁に発行する標準の名前解決要求で返される追加のヘルス情報です。この情報は、高負荷状態にあるサーバへの対応を迅速化するコストアルゴリズムで使用されます。名前解決要求がリモートサーバに発行されると、前回の更新から15秒以上経過していた場合は、ヘルス情報がリモートサーバに要求され、名前解決要求の応答に追加されます。

リモートヘルスモニタリングには調整可能なパラメータが1つあります。

  • ARC_DS_INFO_INTERVAL: これは、ARC内のロック(ヘルス)情報の要求間隔です(デフォルトは15秒)。

19.1.6 詳細参照コストの監視

ResolveTimesテーブルを出力して、操作における詳細参照コストを確認することができます。

ResolveTimesテーブルは次のコマンドを使用して出力します。

  • set DSTRACE = +DBG

  • set DSTRACE = !ARC

このコマンドは、Resolve Timesテーブルとサーバごとの現在保存されている情報を出力します。トランスポートアドレス、アドレスが最後に使用された以降の経過時間(ミリ秒)、参照決定で使用された最後のコスト、およびそのアドレスに対する未処理要求の数が表示されます。

未処理要求の数が多くても、必ずしも問題ではありません。単に、そのサーバの使用頻度が高いこと示しているにすぎない場合もあります。

トラブルシューティングでのARCの使用

ARCの最も有用な機能の1つがサーバに伴う通信問題を迅速に特定する機能です。

ResolveTimesテーブルのプリントアウトの例を以下に示します。

ARCは現在有効になっています。

表 19-2 解決時間コスト

Slot

トランスポートアドレス

Cost

最後の使用

オン

要求数

待機数

ロック時間

1

tcp:151.155.134.27:524

214

14

14

0

0

0

2

tcp:151.155.134.11:524

0

0

0

0

0

0

3

udp:151.155.134.11:524

0

0

0

0

0

0

4

cp:151.155.134.13:524

554759

280

0

0

27

582

5

tcp:151.155.134.59:524

0

179

179

0

0

0

6

udp:151.155.134.59:524

0

119

119

0

0

0

7

tcp:151.155.134.28:524

1543

119

119

0

0

0

8

tcp:151.155.134.15:524

124

14

14

0

0

0

このプリントアウトは、このサーバの視点から151.155.134.13で問題が発生していることを示しています。問題がトランスポートではなくサーバにある可能性が高いこともわかります。サーバでは、27件の要求がデータベースへのアクセス待ちであり、それらがデータベースロックを取得するのに時間がかかっています。このサーバでは、2件の要求がリモートサーバからの応答を受け取っていません。

151.155.134.11と151.155.134.59は、非常に高速なサーバか、あまりビジーではないかのどちらかまたはその両方であることもわかります。151.155.134.59と151.155.134.11の両方でTCP経由の通信問題が1回発生したが、UDP接続が使用できるため現在は正常に戻っていることもわかります。サーバへのUDP接続は、TCP経由でサーバに通知できない場合にのみ、試行されます。

それぞれの数字の意味を以下に示します。

トランスポートアドレス: リモートサーバのアドレス。

Cost: リモートサーバの現在のコスト。

最後の使用: サーバとの最後の通信以降の経過時間(秒)。

オン: リモートサーバからの最後のヘルス情報以降の経過時間(秒)。

要求数: リモートサーバへの未処理要求数。

待機数: データベースのロックを待っているリモートサーバへの要求数。

ロック時間: プロセスがリモートサーバ上でデータベースのロックを維持していた時間。

次のプリントアウトは通信の問題を迅速に特定するためのもう1つの例を示しています。サーバはTCP経由で151.155.134.13に通信できないことがわかります。

ARCは現在有効になっています。

表 19-3 解決時間コスト

Slot

トランスポートアドレス

Cost

最後の使用

オン

要求数

待機数

ロック時間

1

tcp:151.155.134.27:524

394

92

14

0

0

0

2

tcp:151.155.134.11:524

0

0

0

0

0

0

3

udp:151.155.134.11:524

0

0

0

0

0

0

4

tcp:151.155.134.13:524

5000000

180

180が不正なアドレスキャッシュ内にあります

 

これらの表を参照する際は、以下の点にご留意ください。

  • 未処理の要求があっても問題とは限りません。単にサーバが多くの要求に対応している場合もあるからです。コストが高いサーバ上の未処理の要求は問題です。

  • サーバのヘルスを示す第一の指標は現在のコストであり、問題が発生しているサーバを特定するのに役立ちます。

メモ:すべての要求の往復時間と未処理期間が測定されます。これは、トランスポート時間もコストの一部であることを意味します。この表でサーバに問題があるように見えても、他のサーバからは問題がないように見える場合、それはトランスポートの問題を示唆している可能性があります。

バックグラウンドスレッドトレース

ARCBackgroundResolveTimerThreadの動作を示すトレースを以下に示します。

ARCBackGroundResolveTimerThread started Interval = 60 MaxWait = 180000
Updating timer info for tcp:151.155.134.11:524 
Updating timer info for udp:151.155.134.11:524 
Updating timer info for tcp:151.155.134.13:524 ARCBackGroundResolveTimerThread error -635 in DCConnectToAddress for tcp:151.155.134.59:524 
ARCBackGroundResolveTimerThread completed in 0 seconds 
8-total timers 4-stale timers 3-timers updated

上記のメッセージから、次のことが分かります。

  • TCP:151.155.134.11は3分を超える期間使用されていません。

  • UDP:151.155.134.11は3分を超える期間使用されていません。

  • TCP: 151.155.134.13は3分を超える期間使用されていません。

上記のすべてのサーバでタイマー情報が更新され、次のような結果になりました。

  • TCP: 151.155.134.59は依然としてこのサーバから到達できません。

新しいコストは非常に動的でとても頻繁に変化します。この動きを監視するには、詳細参照コストパラメータをデバッグモードに設定します。

メモ:監視が終わったら、set NDSTRACE =!ARC1コマンドを実行して、ARCを非デバッグモードにリセットしてください。印刷が必要なければ、オーバーヘッドの印刷コストはないに越したことはありません。

DSTraceまたはNDSTraceでは、詳細参照コストと+RSLVがオンになっている場合、個々の参照コストが表示されます。残りのタグはset NDSTrace = nodebugコマンドを使用してオフにします。

Sorted results from DCAdjustCostAndSort follow:
137.65.10.3 cost of 217
137.65.10.9 cost of 222
137.65.10.10 cost of 400

リモートサーバが低速または過負荷になると、数値がすぐに変化します。ExRefサーバのコストは毎秒動的に調整されるため、一定期間のコストを監視するには、ログファイルをトレースする必要があります。