接続のトラブルシューティング
項目一覧
このページでは、MongoDB .NET/C# ドライバーを使用して MongoDB の配置に接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。
注意
このページでは、接続の問題のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。
.NET/C# ドライバーのよくある質問(FAQ)
「問題とヘルプ」ページには、バグの報告、ドライバーへの貢献、および追加リソースの検索に関する情報が記載されています
MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。
接続エラー
次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示しています。 このエラー メッセージは、複数の状況で生成される可能性があります。 このエラー メッセージの例では、ホスト名は 127.0.0.1
で、ポートは27017
です。
Error: couldn't connect to server 127.0.0.1:27017
次のセクションでは、問題を解決するために実行できるアクションについて説明します。
接続stringを確認する
接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 MongoDB インスタンスのデフォルトのポート値は27017
ですが、MongoDB を別のポートで通信するように構成できます。
ファイアウォールを構成する
MongoDB 配置がリッスンするポートが同じネットワーク上のファイアウォールによってブロックされていないことを確認します。 MongoDB はデフォルトでポート27017
を使用します。 MongoDB が使用するデフォルトのポートとその変更方法について詳しくは、「デフォルトの MongoDB ポート 」を参照してください。
警告
MongoDB 配置で使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。
認証エラー
認証メカニズムが正しく構成されていない場合、.NET/C# ドライバーは MongoDB インスタンスに接続できない可能性があります。 認証にSCRAM-SHA-256
またはSCRAM-SHA-1
を使用しており、ドライバーが接続に失敗した場合、ドライバーは次のいずれかのメッセージのようなエラー メッセージを表示することがあります。
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server <hostname>:<port>.
Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","principalName": "<db_username>","<auth database>":"<db_username>","client":"127.0.0.1:2012", "result":"UserNotFound: Could not find user}}
connection() error occurred during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.
次のセクションでは、問題を解決するために実行できるアクションについて説明します。
接続stringを確認する
無効な接続stringは、接続文字列と SCRAM-SHA-256
または SCRAM-SHA-1
を使用してMongoDBに接続しようとする際に発生する最も一般的な原因です。
Tip
接続文字列の詳細については、接続ガイドの「接続 URI 」を参照してください。
string接続文字列にユーザー名とパスワードが含まれている場合は、それらが正しい形式であることを確認してください。ユーザー名またはパスワードに次の文字のいずれかが含まれている場合、パーセント エンコードされている必要があります。
: / ? # [ ] @
次の例は、"#MyPassword?" をパーセント エンコードする方法を示しています。
Console.WriteLine(System.Web.HttpUtility.UrlEncode("#MyPassword?"));
これにより、次の出力が得られます。
%23MyPassword%3F
MongoClientSettings プロパティを確認する
MongoDB 配置に接続しようとする際に、 MongoClientSettings
オブジェクトを使用して設定を構成できます。 Credential
プロパティを使用して認証情報を設定できます。 認証情報が正しくない場合、MongoDB 配置に接続しようとすると認証エラーが発生します。
認証データベースでユーザーが であることを確認
SCRAM-SHA-256
またはSCRAM-SHA-1
でユーザー名とパスワードを使用して接続を正常に認証するには、認証データベースにユーザー名を定義する必要があります。 デフォルトの認証データベースはadmin
データベースです。 認証に別のデータベースを使用するには、 接続stringで authSource
オプションを指定します。 次の例では、認証データベースとしてusers
を使用するようにドライバーに指示しています。
using MongoDB.Driver; // Connection URI const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users"; // Create a new client and connect to the server var client = new MongoClient(connectionUri);
また、 MongoClientSettings
オブジェクトを作成し、それをMongoClient
コンストラクターに渡すことで構成設定を設定することもできます。 Credential
プロパティを使用して、認証データベースの指定を含むログイン認証情報を設定できます。 MongoClientSettings
の使用の詳細と例については、「 MongoClientSettings の使用 」を参照してください。
これが問題であるかどうかは、同じコードを使用してローカルマシンでホストされている MongoDB インスタンスに接続しようとすることで確認できます。 同じマシン上の配置では、接続するための認可は必要ありません。
X. 509認証情報エラー
オペレーティング システムとして Windows を使用している場合、.NET/C# ドライバーがメモリ内のX.509
認証証明書を見つけられない問題が発生する可能性があります。 このエラーは、次のエラーメッセージとともに発生します。
No credentials are available in the security package
次のセクションでは、問題を解決するのに役立つ方法について説明します。
ディスク上の証明書の作成と保存
次のコードを使用して、アプリケーションに必要なX.509
証明書を生成します。
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
メッセージの送信エラー
リクエストを行った後にドライバーがコマンドの送信に失敗すると、次のエラー メッセージが表示される場合があります。
com.mongodb.MongoSocketWriteException: Exception sending message
次のセクションでは、問題を解決するために実行できるアクションについて説明します。
ユーザー権限の確認
正しいユーザーが MongoDB 配置にアクセスしたことを確認します。 エラー内の「メッセージ」というタームは、ドライバーによって送信されたコマンドである場合があります。 コマンドを送信する権限を持たないユーザーを使用している場合、ドライバーはこのエラーを生成する可能性があります。
また、ユーザーが送信するメッセージに対する適切な権限を持っていることも確認します。 MongoDB は、RBAC(Role-Based Access Control、ロールベースのアクセス制御)を使用して、MongoDB 配置へのアクセスを制御します。 MongoDB で RBAC を構成する方法の詳細については、「ロールベースのアクセス制御 」を参照してください。
ファイアウォールを構成する
ファイアウォールは MongoDB インスタンスと通信するためにオープンなポートが必要です。 ファイアウォールの構成の詳細については、「 接続エラー 」セクションの「 ファイアウォールを構成する 」を参照してください。
接続数の確認
各MongoClient
インスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この制限を定義するパラメータMaxConnectionPoolSize
を構成できます。 デフォルト値は100
です。 すでに開いている接続の数がMaxConnectionPoolSize
に等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がMaxConnectionIdleTime
の値を超えると、ドライバーはエラーで応答します。
接続プーリングの機能方法について詳しくは、「 .NET/C# ドライバーで接続プーリングがどのように機能しますか 」を参照してください。 FAQ に記載されています。
オープンな接続が多すぎる
ドライバーは接続を開始しようとしたが、最大接続数に達したときに次のエラー メッセージを作成します。
connection refused because too many open connections
次のセクションでは、問題を解決するのに役立つ方法について説明します。
接続数の確認
よりオープンな接続を作成する必要がある場合は、 MaxConnectionPoolSize
を増やします。 接続数の確認の詳細については、「 メッセージの送信エラー 」セクションで「 接続数を確認する 」を参照してください。
タイムアウト エラー
ネットワークがドライバーからサーバーにリクエストを十分な速度で提供できない場合、タイムアウトが発生することがあります。 その場合、次のメッセージのようなエラー メッセージが表示される場合があります。
timed out while checking out a connection from connection pool: context canceled
このエラーが発生した場合は、問題を解決するために次のアクションをお試しください。
connectTimeoutMS の設定
ドライバーが到達不能なレプリカセット ノードに到達するのに時間がかかりすぎるため、接続を確立できない場合、ドライバーがハングすることがあります。 connectTimeMS
設定を使用すると、ドライバーが接続を確立するために費やす時間を制限できます。 この設定の詳細については、サーバー マニュアルの「タイムアウト オプション 」を参照してください。
connectTimeoutMS
の設定が、 のノードに対する最高のネットワーク レイテンシよりも低くないことを確認する必要があります。 セカンダリ ノードの 1 つのレイテンシが 10000 ミリ秒の場合、 connectTimeoutMS
を 9000 に設定すると、ドライバーはそのノードに接続できなくなります。
このオプションは 接続stringに設定できます。 次の例では、 connectTimeoutMS
を 10000 ミリ秒に設定しています。
using MongoDB.Driver; // Connection URI const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?connectTimeoutMS=10000"; // Create a new client and connect to the server var client = new MongoClient(connectionUri);
また、 MongoClientSettings
オブジェクトを作成し、それをMongoClient
コンストラクターに渡すことで構成設定を設定することもできます。 MongoClientSettings
の使用の詳細と例については、「 MongoClientSettings の使用 」を参照してください。
接続数の確認
サーバーへの接続数がMaxConnectionPoolSize
を超える可能性があります。 接続数の確認の詳細については、「 メッセージの送信エラー 」セクションで「 接続数を確認する 」を参照してください。