プロキシ・サーバーのトラブル・シューティング

クライアントがストアに接続できない場合、クライアント・コード、プロキシとその構成、またはストアに問題がある可能性があります。何が問題になるかを判断するためには、クライアント・コードがストアに接続するときに何が起きるかをよく理解することが役立ちます。

  1. まず、クライアント・コードはプロキシで指定されたip:portペアに接続しようとします。

  2. 接続の試行が失敗し、プロキシが自動的に起動する必要があるとクライアント・コードによって通知された場合:

    1. クライアント・ドライバは、ローカル・ホストでプロキシを起動するコマンドラインを準備します。このコマンドラインに含まれるのは、javaコマンドのパス、プロキシの起動に必要な2つのjarファイルのクラスパス、プロキシを起動しストアに接続するために必要なパラメータ(リスニングするプロキシのローカル・ポートやストアの接続情報が含まれる)です。

    2. ドライバがコマンドラインを実行します。問題が発生した場合、問題の正確な特徴によって異なりますが、関連するエラー情報をドライバが提供できる場合があります。

    3. コマンドを実行すると、ドライバは接続が完了するまで数秒間待機します。この間にプロキシが起動を試行します。この時点では、クラスパスの問題が示されることがあります。

      次に、kvclient.jarのバージョンをチェックし、適合していない場合は知らせます。

      その後、接続パラメータをチェックし、問題があれば知らせます。

      次に、プロキシがhelper-hostsパラメータを使用して実際にストアに接続します。この時点では、ストアにアクセスできない、セキュリティ資格証明がない、またはセキュリティ資格証明が正しくないといった、接続エラーが報告されることがあります。

      最後に、プロキシは指定のポートのリスニングを試行します。ポートのリスニング中にエラー(別のプロセスで使用中など)が発生すると、プロキシによって報告されます。

    4. 直前のステップでエラーが発生すると、ドライバは自動的にプロセス全体を繰り返します。正常に接続を取得するか、再試行回数に到達するまで、プロセスを繰り返し続けます。

      最終的にドライバが接続を正常に確立できない場合、エラーを返します。

  3. ドライバが正常にプロキシに接続した場合、プロキシに確認メッセージを送信します。この確認メッセージには、helper-hostリスト、ストア名、ユーザー名(セキュア・ストアを使用している場合)、読取りゾーン(ストアで使用される場合)が含まれます。

    確認メッセージの情報に問題がある場合、プロキシがエラー・メッセージを返します。これにより、ドライバが正しいストアに接続していることを確認するために、プロキシがパラメータをチェックします。

  4. 確認メッセージにエラーがない場合は、接続が確立され、ストアの操作を実行することができます。

接続の問題をトラブルシューティングする際に最適なエラー情報を取得するには、-verboseコマンドライン・オプションを使用してプロキシを起動します。また、java -eaコマンドライン・オプションを使用するとプロキシJavaコードのアサーションを有効化できます。

これら2つのメカニズムによりプロキシは豊富な情報を提供します。分析するためにファイルへのロギングを有効にすることができます。これを行う手順は次のとおりです。

次のパラメータを使用してプロキシを起動します。

java -cp KVHOME/lib/kvclient.jar:KVPROXY/lib/kvproxy.jar  
-Djava.util.logging.config.file=logger.properties 
oracle.kv.proxy.KVProxy -helper-hosts node01:5000 -port 5010 
-store mystore -verbose 

ファイルlogger.propertiesには次のような内容が含まれます。

# Log to file and console
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
## ConsoleHandler ##
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = 
                                       java.util.logging.SimpleFormatter
## FileHandler ##
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# Limit the size of the file to x bytes
java.util.logging.FileHandler.limit = 100000
# Number of log files to rotate
java.util.logging.FileHandler.count = 1
# Location and log file name
# %g is the generation number to distinguish rotated logs
java.util.logging.FileHandler.pattern = ./kvproxy.%g.log

構成パラメータにより、使用されるローテーション・ログ・ファイルのサイズと数が制御されます(javaロギングと同様、java.util.logging.FileHandlerを参照)。ファイルのローテーション・セットでは、各ファイルが指定のサイズ制限に達すると、ファイルは閉じられ、ローテーションされて、新しいファイルが開きます。古いファイルにはファイル名に"0"、"1"、"2"などを追加することで連続的に名前が付けられます。