接続のトラブルシューティング
項目一覧
このページでは、MongoDB Kotlin ドライバーの使用中に MongoDB インスタンスまたはレプリカセットに接続することで発生し得る問題の潜在的な解決策を提供します。
注意
このページには接続の問題のみがリストされます。 MongoDB でその他の問題が発生している場合は、次のリソースを検討してください。
Kotlin ドライバーのよくある質問(FAQ)
バグの報告、ドライバーへの貢献、およびその他のリソースに関する情報については、「問題とヘルプ 」のトピックを参照してください。
MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。
接続エラー
次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示す一般的なメッセージです。
Error: couldn't connect to server 127.0.0.1:27017
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 サンプル エラー メッセージでは、ホスト名は 127.0.0.1
で、ポートは27017
です。 MongoDB インスタンスのデフォルトのポート値は27017
ですが、MongoDB を別のポートで通信するように構成できます。
ファイアウォールの設定
MongoDB 配置でデフォルトのポートを使用していることを前提とすると、ファイアウォールでポート27017
が開いていることを確認します。 配置で別のポートを使用している場合は、ファイアウォールでポートが開いていることを確認してください。
重要
が MongoDB インスタンスで使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。
認証エラー
認証が正しく構成されていない場合、 Kotlin ドライバーは MongoDB インスタンスへの接続に失敗する可能性があります。 これにより、多くの場合、次のようなエラー メッセージが表示されます。
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
無効な接続stringは、 MongoDBに接続しようとする際の認証の問題の最も一般的な原因です。
注意
Kotlin ドライバーで接続文字列を使用する方法の詳細については、接続ガイドの「接続 URI 」を参照してください。
接続stringにユーザー名とパスワードが含まれている場合は、それらが正しい形式であることを確認してください。
注意
ユーザー名またはパスワードに次の文字のいずれかが含まれている場合は、 パーセント エンコードされ ている必要があります。
: / ? # [ ] @
Atlasが MongoDBMongoDB Atlasに配置されている場合は、 接続例 を使用して接続string を確認できます。例にある接続stringを に置き換えてください。
レプリカセットに接続するときは、レプリカセット内のすべてのホストを 接続stringに含める必要があります。 接続string内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ドライバは接続を確立できます。
認証データベースでユーザーがであることを確認
ユーザー名とパスワードを使用して接続を正常に認証するには、認証データベースにユーザー名を定義する必要があります。 デフォルトの認証データベースはadmin
データベースです。 認証に別のデータベースを使用するには、 接続stringで authSource
を指定します。 次の例では、認証データベースとしてusers
を使用するようにドライバーに指示しています。
val mongoClient = MongoClient.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users")
メッセージの送信エラー
ドライバー経由でリクエストを送信し、コマンドを送信できない場合、多くの場合、次の一般的なエラーメッセージが表示されます。
com.mongodb.MongoSocketWriteException: Exception sending message
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
アプリ内の接続stringが正確であることを確認します。 これについては、 「 接続エラー」および「 認証エラー 」で説明されています。
認証データベースでユーザーがであることを確認
認証データベースでユーザーが認識される必要があります。 これについては、 「 認証エラー 」で説明されています。
ファイアウォールの設定
ファイアウォールは MongoDB インスタンスと通信するためにオープンなポートが必要です。 これは、 「 接続エラー 」で説明されています。
接続数の確認
各MongoClient
インスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この値は構成パラメータmaxPoolSize
によって定義され、デフォルトでは100
に設定されます。 すでに開いている接続の数がmaxPoolSize
に等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がmaxIdleTimeMS
の値を超えると、ドライバーはエラーで応答します。
タイムアウト エラー
ドライバーを介してサーバーにメッセージを送信すると、メッセージの応答に時間がかかることがあります。 このような状況が発生すると、次のいずれかのエラー メッセージのようなエラー メッセージが表示される場合があります。
Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description
これらのエラーが発生した場合は、問題を解決するために次の方法をお試しください。
セット maxConnectionTimeoutMS
maxConnectionTimeoutMS
オプションは、 Kotlin ドライバーがタイムアウトするまでの接続を待機する時間を示します。 デフォルト値は10000
です。 ドライバーをタイムアウトしないようにするには、この値を増やすか、 0
に設定します。
maxConnectionLifeTime
と を設定するmaxConnectionIdleTime
maxConnectionLifeTime
とmaxConnectionIdleTime
の設定を検討してください。 これらのパラメーターは、MongoDB インスタンスとの接続を維持できる期間を構成します。 これらのパラメーターの詳細については、「接続プールの設定 」を参照してください。
接続数の確認
オープンな接続が多すぎる可能性があります。 この解決策については、 「 メッセージの送信エラー 」で説明されています。
追加のヒント
具体的なエラーメッセージには関係ありませんが、接続の問題をトラブルシューティングする際に役立つ追加情報がこのセクションには含まれています。
TLS/SSL のログ情報の取得
TLS/SSL を使用している場合、 -Djavax.net.debug=all
システム プロパティを使用して追加のログ ステートメントを表示できます。 これは、接続の問題をデバッグする際に役立ちます。 TLS/SSL 接続のデバッグに関する Oracle ガイドを参照して ください 詳しくは、 を参照してください。