アプリケーションがMongoDBデプロイに接続しようとすると、サーバー選択タイムアウト エラーが発生する可能性があります。このエラーは、クライアントドライバーが設定されたタイムアウト期間内に適切なサーバーを選択できないことを示しています。
サーバー選択タイムアウトは通常、ネットワーク接続の問題、 IPアクセス制限、DNS SRV 解決の失敗、または TLS 構成の問題が原因で発生します。
このページでは、サーバー選択タイムアウトの一般的な原因について説明し、その原因を診断および解決する手順を提供します。以下の手順を完了しても問題が解決しない場合は、 テクニカル サポートにお問い合わせください。
前提条件チェック
アプリケーションでサーバー選択タイムアウトが発生していることを確認するには、クライアントのエラー メッセージを確認します。一般的な例には、次のようなものがあります。
MongoTimeoutError: Server selection timed out after 30000 msMongoServerSelectionError: connection timed outMongoServerSelectionError: getaddrinfo ENOTFOUNDNo suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve '<my-database-host>]
配置の可用性を確認
Atlas 配置では、Atlas UI の [クラスター] ページで、緑色のドット ステータス インジケーターが表示され、クラスター状態が
Activeであることを確認します。自己管理型配置で、
mongodプロセスが実行中、必要なポートでリッスンしていることを確認します。
ログ メッセージの確認
サーバーまたはドライバーでログメッセージを有効にして、タイムアウトが経過するまでクライアントがサーバーの検出を繰り返し試行することを確認します。
クライアント ログ
クライアント ログでは、 クラスタートポロジー を検出するための繰り返しの試行と、その後タイムアウトが表示される場合があります。メッセージがを参照場合があります。
DNS 解決の失敗。
TLS ハンドシェイク エラー。
完了しない接続試行。
サーバーログ(自己管理型)
getLogコマンドまたは設定されたログの保存先で実行したときに、サーバーログに着信接続試行がないことが表示される場合は、通常、ネットワーク接続の問題が発生していることを示します。
一般的な問題と解決策
次のセクションでは、サーバー選択タイムアウトの一般的な原因とその解決方法について説明します。
ローカル ネットワークまたはファイアウォールによる接続のブロック
クライアントが配置内のどのホストへの TCP 接続を確立できない場合、サーバー選択は失敗します。
接続を復元するには、次の手順に従います。
クライアントホストからのアウトバウンド トラフィックが TCP ポート
27017(または構成されたカスタム ポート)で許可されていることを確認します。制限については、ファイアウォールルール、セキュリティ グループ、ネットワーク ACL を確認してください。
VPN、プロキシ、またはローカルファイアウォールが接続を中断していないことを確認します。
変更を加えた後、接続を再試行します。
クライアントIPアドレスは許可されていません(Atlas)
クラスターが使用可能であるが、着信接続が受信されていない場合。
Atlas UIで、 ネットワーク アクセス に移動します。
クライアントのパブリックIPアドレスがIP アクセス リストに含まれていることを確認します。
テストに必要な場合は、
0.0.0.0/0からのアクセスを一時的に許可します。変更を保存し、構成が適用されるまで待ちます。
接続を再試行します。
IPアクセス リストの詳細については、「 IPアクセス リスト エントリの構成 」を参照してください。
DNS SRV 解決の失敗
SRV(サービス)検索中にクライアントがENOTFOUND や失敗などのエラーを報告した場合、環境は DNS SRV レコードを解決できない可能性があります。
DNS SRV 解決の確認
クライアントホストから次の手順に従います。
接続文字列からホスト名を識別します。
mongodb+srv://<cluster-name>.mongodb.net DNS SRV lookup を実行します。
nslookup -type=SRV _mongodb._tcp.<cluster-name>.mongodb.net コマンドがMongoDBホストを指す 1 つ以上の SRV レコードを返すことを確認します。
レコードが返されない場合:
ホスト名が正しいことを確認してください。
DNS プロバイダーが SRV レコードをサポートしているかどうかを確認します。
アウトバウンド DNS クエリがブロックされていないことを確認します。
SRV の制限を回避する
SRV レコードを解決できない場合は、使用するアプリケーションの配置更新から標準接続文字列(非 SRV)を取得する必要があります。
mongodb://host1,host2,host3/?replicaSet=<name>
接続を再試行します。
接続文字列の詳細については、「 接続文字列 」を参照してください。
TLS 構成の問題
エラー出力に TLS または SSL ハンドシェイクの失敗が参照されている場合は、次の手順で一般的な TLS 構成の問題を解決できます。
クライアントドライバーが TLS 1.2 以降をサポートしていることを確認します。
システム ルート証明書が最新であることを確認します。
自己管理型配置の場合:
証明書ホスト名が接続文字列と一致していることを確認します。
完全な証明書チェーンが使用できることを確認します。
これらの手順が完了したら、接続を再試行してください。
TLS/SSL の詳細と TLS/SSL 接続の構成方法については、「 TLS/SSL(トランスポート暗号化) 」を参照してください。
解決策を確認する
基礎となる問題を解決した後、以下を行います。
クライアントは、タイムアウトせずに接続を確立します。
アプリケーション ログは、サーバーが成功したことを示します。
Atlas メトリクス(該当する場合)にアクティブな接続が表示されます。
サーバー ログは、受信クライアント接続をレコード。
より多くのサポートのために収集する診断情報
問題が解決されない場合は、テクニカル サポートに連絡する前に以下を収集してください。
クライアントエラー メッセージとスタックトレースを完了しました
MongoDB接続文字列(認証情報が削除)
ドライバー名とバージョン
MongoDBサーバーのバージョン
DNS SRV lookup の出力
ネットワーク接続テストの結果
MongoDBの関連ログ