このページでは、一般的な接続の問題とその解決策について説明しています。
To learn more about connecting to an Atlas cluster, see the Get Started with Atlas tutorial.
注意
If you are an enterprise customer looking for support, file a ticket. For community support, visit MongoDB Community Resources.
インテリジェント エージェントを使用すると、接続エラーのデバッグを支援できます。
クラスター [Connect] ボタンが無効
クラスターがプロビジョニング状態の場合、クラスターの [Connect] ボタンが無効になっていることがあります。クラスターは最初に配置するときにプロビジョニングする必要があります。クラスターは、スケールアップまたはスケールダウンするときにもプロビジョニングする必要があります。
Atlas がクラスターをプロビジョニングすると、Connect ボタンが有効になります。
無料クラスターの場合、プロビジョニングにかかる時間は 15 秒未満です。
Flex クラスターと専有クラスターの場合、プロビジョニングには最大 10 分かかる場合があります。
IP アクセス リストに掲載されていない IP アドレスの接続
Atlas クラスターに接続する前に、ホストの IP アドレスがクラスターのプロジェクトの IP アクセス リストに追加されていることを確認してください。Atlas は、IP アクセス リスト内の IP アドレスと CIDR アドレス範囲からのクライアント接続のみを許可します。
クラスター認証の失敗
MongoDB Atlas に接続するには、MongoDB データベースでユーザー認証する必要があります。クラスターにデータベースユーザーを作成するには、「データベースユーザーの設定」を参照してください。
可能な解決策
作成済みのユーザーの認証で問題が生じた場合は、以下の手順をお試しください。
データベースユーザーの正しいユーザー名とパスワードを使用していること、および正しいクラスターに接続していることを確認してください。
接続文字列で指定している
authSourceデータベースが正しいことを確認してください。If you have a special character in your password, see Special characters in connection string password.
クラスターへの過剰なオープン接続
Atlas はクラスターへの同時着信接続数に制限を設定しています。クラスターでの制限はクラスター階層に基づいています。制限に達している状態で接続を試みると、MongoDB は「connection refused because too many open connections」というエラーを表示します。
クラスター階層とその最大同時接続数の詳細な比較については、「接続制限とクラスター階層」を参照してください。
可能な解決策
現在使用していないクラスターへのオープン接続を閉じてください。
クラスターをより高い階層にスケーリングすると、より多くの同時接続がサポートされます。
アプリケーションを再起動します。
To prevent this issue in the future, consider using the
maxPoolSizeconnection string option to limit the number of connections in the connection pool.
この問題を解決する方法については、「接続の問題の修正」を参照してください。
接続数の急増時におけるシャーディングされたクラスターのパフォーマンス低下
Atlas は、プライベートエンドポイント サービスのロード バランサーを使用して、シャーディングされたクラスター用に最適化された SRV 接続文字列を生成できます。最適化された接続文字列を使用する場合、Atlas はアプリケーションとシャーディングされたクラスター間の mongos ごとの接続数を制限します。mongos あたりの接続数を制限すると、接続数が急増した際のパフォーマンスが向上します。
プライベートエンドポイントの背後にあるシャーディングされたクラスターに最適化された接続文字列の詳細については、プライベートエンドポイントを使用してシャーディングされたクラスターの接続パフォーマンスを最適化するにはどうすればよいですか。
ファイアウォールの背後からの接続試行
Atlas UI への接続
Atlas は CDN を使用してコンテンツを迅速に提供します。組織でファイアウォールを使用している場合は、Atlas UI へのアクセスに関する問題を防ぐために、次の Atlas CDN ホストをファイアウォールの許可リストに追加します。
https://assets.mongodb-cdn.com/https://downloads.mongodb.com/( Data Explorer機能に必要)
クラスターへの接続
Atlas クラスターはポート 27017 で動作します。クラスターに接続するには、このポートにアクセスできる必要があります。さらに、次の適切なポートがオープンであることを確認してください。
- シャーディングされたクラスターの場合は、ポート 27016 へのアクセスを許可します。
サードパーティの Outgoing port tester を使用して、ポートへのアクセス能力をチェックできます。
例
ポート 27017 への能力を確認するには、http://portquiz.net:27017. にアクセスしてください。
これらのポートにアクセスできない場合は、システムのファイアウォール設定を確認し、これらのポートへのアクセスがブロックされていないことを確認してください。
クラスターの可用性
mongodb+srv://接続文字列を使用中に、ドライバーまたは shell が Atlas クラスターの DNS ホストを検出できない場合は、クラスターが一時停止状態にあるか削除されている可能性があります。クラスターが存在することを確認し、一時停止中である場合は、必要に応じてクラスターを再開できます。
注意
Atlas は、30 日間接続がない場合、アイドル状態の 無料クラスター(以前は M0 と呼ばれる)を自動的に一時停止します。
MongoDB Compass のトラブルシューティング
MongoDB Compass を使用してクラスターに接続し、問題が発生した場合は、以下を参照してください。
このセクションの「 SRV 接続文字列を使用した接続の拒否」。
MongoDB Compass ドキュメントの「Compass 接続エラー」。
If you use a self-managed X.509 certificate or an auto-generated X.509 certificate managed by Atlas to authenticate to the MongoDB database, when you connect to MongoDB Compass, you must:
MongoDB Compass で、Fill in connection fields individually を選択します。
Authentication のドロップダウンで、[
X.509] を選択します。More Options を選択します。
SSL のドロップダウンで、[Server and Client Validation] を選択します。
ダウンロードされた Atlas が管理する証明書、または自己管理する証明書(いずれか使用している方)への同じパスを、次の各フィールドに追加します。Certificate Authority、Client Certificate、Client Private Key。
To learn more, see Connect to MongoDB in the MongoDB Compass documentation.
接続文字列の問題
接続文字列の形式が不適切
The connection string format you use to connect to Atlas depends on several factors, including:
Your
mongoshversion. To learn more, see Connect to a Cluster via mongosh.ドライバーのバージョン。詳細については、「クライアント ライブラリを使用したクラスターへの接続」を参照してください。
本番環境に移行する前に、テスト環境で接続文字列を検証してください。
接続文字列パスワード内の特殊文字
パスワードに特殊文字が含まれていて、接続文字列 URI でパスワードを使用する場合は、特殊文字をエンコードしてください。
パーセント エンコーディング を必要とする特殊文字を使用してパスワードの更新を試みると、次のエラー メッセージが表示されます。
This password contains special characters which will be URL-encoded.
注意
次の文字および空白文字は、ユーザー名またはパスワードに含まれている場合、パーセント エンコーディング を使用して変換する必要があります。
: / ? # [ ] @ ! $ & ' ( ) * , ; = %
たとえば、プレーンテキスト形式のパスワード p@ssw0rd'9'! は、次のようにエンコードする必要があります。
p%40ssw0rd%279%27%21
➤ [言語の選択] ドロップダウン メニューを使用して、このセクションで例示されるエンコーディングの言語を設定します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "net/url" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 func main() { 14 username := "<username>" 15 password := "<password>" 16 cluster := "<clusterName>" 17 authSource := "<authSource>" 18 authMechanism := "<authMechanism>" 19 20 uri := "mongodb+srv://" + url.QueryEscape(username) + ":" + 21 url.QueryEscape(password) + "@" + cluster + 22 "/?authSource=" + authSource + 23 "&authMechanism=" + authMechanism 24 25 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) 26 if err != nil { 27 panic(err) 28 } 29 defer client.Disconnect(context.TODO()) 30 31 collection := client.Database("<dbName>").Collection("<collName>") 32 33 cursor, err := collection.Find(context.TODO(), bson.D{}) 34 if err != nil { 35 panic(err) 36 } 37 38 var results []bson.D 39 if err = cursor.All(context.TODO(), &results); err != nil { 40 panic(err) 41 } 42 for _, result := range results { 43 fmt.Println(result) 44 } 45 }
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 6 import org.bson.Document; 7 import java.net.URLEncoder; 8 9 public class Encoding { 10 11 public static void main(String [] args){ 12 13 try{ 14 String username = URLEncoder.encode("<username>", "UTF-8"); 15 String password = URLEncoder.encode("<password>", "UTF-8"); 16 String cluster = "<clusterName>"; 17 String authSource = "<authSource>"; 18 String authMechanism = "<authMechanism>"; 19 20 String uri = "mongodb+srv://" + username + ":" + password + "@" + cluster + 21 "/?authSource=" + authSource + "&authMechanism=" + authMechanism; 22 23 MongoClient mongoClient = MongoClients.create(uri); 24 25 MongoDatabase database = mongoClient.getDatabase("<dbName>"); 26 MongoCollection<Document> collection = database.getCollection("<collName>"); 27 28 collection.find().forEach(doc -> System.out.println(doc.toJson())); 29 30 } catch(Exception e){ 31 System.err.println(e.getCause()); 32 33 } 34 } 35 }
1 const { MongoClient } = require("mongodb"); 2 3 const username = encodeURIComponent("<username>"); 4 const password = encodeURIComponent("<password>"); 5 const cluster = "<clusterName>"; 6 const authSource = "<authSource>"; 7 const authMechanism = "<authMechanism>"; 8 9 let uri = 10 `mongodb+srv://${username}:${password}@${cluster}/?authSource=${authSource}&authMechanism=${authMechanism}`; 11 12 const client = new MongoClient(uri); 13 14 async function run() { 15 try { 16 await client.connect(); 17 18 const database = client.db("<dbName>"); 19 const ratings = database.collection("<collName>"); 20 21 const cursor = ratings.find(); 22 23 await cursor.forEach(doc => console.dir(doc)); 24 } finally { 25 await client.close(); 26 } 27 } 28 run().catch(console.dir);
1 import pymongo 2 from urllib.parse import quote_plus 3 4 username = quote_plus('<username>') 5 password = quote_plus('<password>') 6 cluster = '<clusterName>' 7 authSource = '<authSource>' 8 authMechanism = '<authMechanism>' 9 10 uri = 'mongodb+srv://' + username + ':' + password + '@' + cluster + '/?authSource=' + authSource + '&authMechanism=' + authMechanism 11 12 client = pymongo.MongoClient(uri) 13 14 result = client["<dbName"]["<collName>"].find() 15 16 # print results 17 for i in result: 18 print(i)
重要
Do not encode special characters in your password if you are using your password outside of a connection string URI (for example, pasting it into mongosh).
接続文字列と互換性のないドライバーのバージョン
If you see this error message, your driver is likely out of date. For instructions on updating your driver, refer to your specific Driver Documentation.
インターネット サービス プロバイダーの DNS が接続文字列をブロック
When you use the DNS seed list connection string format to connect to Atlas, you might see the following error:
DNSHostNotFound: Failed to look up service "<MongoDB service name>"
このエラーは、ISP が提供するデフォルトの DNS サーバーを使用している場合に発生することがあります。その DNS サーバーが DNS シードリストの接続文字列形式で使用される SRV lookup をサポートしていない可能性があります。
この問題を解決するには、DNS 構成を変更してパブリック DNS サーバーを使用してみることができます。
例
ネットワーク設定を構成して、Google Public DNS を ISP の DNS サーバーの代わりに使用することができます。
パブリック DNS サーバーを使用するようにネットワーク設定を更新したら、クラスターに接続します。
DB ツールによる接続文字列エラー
You might see the following error when using the DNS seed list connection string format (mongodb+srv://) to connect to Atlas from one of the MongoDB Database Tools (mongodump, mongorestore, etc):
lookup nta8e.mongodb.net on 123.45.67.8:27017: cannot unmarshal DNS message
その場合は、次のいずれかの接続オプションを代わりに使用します。
Use the
--urioption with a non-SRV connection string (mongodb://).接続するホストを指定するには、
--hostオプションを使用します。
SRV 接続文字列を使用した場合の接続拒否
When using the DNS seed list connection string format (mongodb+srv://) with a driver or Compass, you may receive in the following error:
Error: querySrv ECONNREFUSED _mongodb._tcp.<SRV Record>
このエラーをトラブルシューティングするには、次の手順を実行します。
DNS SRV 名の検索
アプリケーションの接続 の手順 1-6 に従います。
ドライバーとバージョンを選択します。
Use this connection string in your application の場合、SRV ホスト名は
mongodb+srv://接続文字列に表示されます。.mongodb.netで終わるホスト名の一部です。たとえば、
cluster0.dfget.mongodb.net。
ノードのホスト名とポート番号の検索
同じ接続モーダルで:
Use this connection string in your application の下で、SRV Connection String トグルをオフにします。
標準接続文字列(
mongodb://)が表示され、各ノードのホスト名とポート番号が一覧表示されます。クラスターの接続文字列には、トポロジーと接続方法に応じて、さまざまなホスト名とポートが含まれる場合があります。プライベートエンドポイントの詳細については、プライベートエンドポイントの構成を参照してください。
基本的なネットワーク接続のテスト
問題が発生しているアプリケーション サーバーのターミナルまたはコマンドプロンプトで、次のコマンドを実行します。
DNS SRV 解決テスト
Linuxまたは macOS の場合は、次のコマンドを実行します。
dig SRV _mongodb._tcp.<DNS SRV name> Windowsの場合は、次のコマンドを実行します。
nslookup -debug -q=SRV _mongodb._tcp.<DNS SRV name> 応答の ANSWER SECTION に、クラスター内の各ノードに対して 1 つの結果が表示されるはずです。以下がその例です。
;; ANSWER SECTION: _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-00.dfget.mongodb.net. _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-01.dfget.mongodb.net. _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-02.dfget.mongodb.net. DNSノードのホスト名解決テスト
クラスター内の各ホスト名に対して次の操作を行います。
Linuxまたは macOS の場合は、次のコマンドを実行します。
dig <Node Hostname> Windowsの場合は、次のコマンドを実行します。
nslookup -debug -q=A <Node Hostname> 応答の ANSWER SECTION に、DNS ホスト名が解決された IP アドレスが表示されるはずです。 以下がその例です。
;; ANSWER SECTION: cluster0-shard-00-00.ag9in.mongodb.net. 60 IN A 10.10.10.10 ping テスト
注意
ICMP リクエストは、プライベートエンドポイント接続を通じてクラウドプロバイダーによってブロックされる可能性があります。
クラスター内の各ホスト名に対して次の操作を行います。
Linuxまたは macOS の場合は、次のコマンドを実行します。
ping -c 10 <Node Hostname> Windowsの場合は、次のコマンドを実行します。
ping /n 10 <Node Hostname> 出力を確認して、パケットロスとラウンドトリップ時間(RTT)を確認します。パケットロスやレイテンシが高い場合は、サーバーとクラスター ノード間のネットワークに問題が発生している可能性があります。
end-to-End ネットワーク接続テスト
Linuxまたは macOS の場合は、次のコマンドを実行します。
nc -zv <Node Hostname> <Node Port Number> Windowsの場合は、次のコマンドを実行します。
Test-NetConnection -Port <Node Port Number> -InformationLevel "Detailed" -ComputerName "<Node Hostname>"
問題を解決する
前の手順のテストを実行中後、失敗したテストに基づいて接続エラーを解決するには、次のガイダンスを使用します。
DNS SRV 解決テストに失敗しました: お使いの DNS リゾルバーは SRV レコードの検索をサポートしていません、または外向き DNS トラフィックがブロックされています。次のいずれかを試してください。
Switch to the non-SRV connection string format (
mongodb://) instead ofmongodb+srv://. To get the non-SRV connection string, open the Connect modal in Atlas, select your driver and version, and turn off the SRV Connection String toggle under Use this connection string in your application.Configure your network to use a public DNS server that supports SRV lookups, such as Google Public DNS.
DNSノードのホスト名解決テストに失敗しました: DNS リゾルバは、個々のノードのホスト名を解決できません。プライベートエンドポイントを使用する場合は、プライベートエンドポイントの DNS 構成が正しいことを確認してください。
ping テストに失敗します: ICMP トラフィックは、ファイアウォールまたはクラウドプロバイダーによってブロックされる可能性があります。これは必ずしも TCP 接続の問題を示すものではありません。エンドツーエンド ネットワーク接続テストに進み、ポート
27017で TCP 接続を確認します。エンドツーエンドのネットワーク接続テストは失敗します:ファイアウォールまたはネットワーク ポリシーによって、ノードホスト名のポート
27017へのアクセスがブロックされています。次の点を確認します。アプリケーションサーバーのIPアドレスをクラスターのIP アクセス リストに追加します。
ファイアウォールを介して、ポート
27017でのアウトバウンド TCP 接続を許可します。
All tests pass but the error persists: The issue may be in your driver version. Older driver versions might not correctly support the SRV connection string format. Update your driver to the latest version. You can also switch to the standard (non-SRV) connection string format (
mongodb://) by turning off the SRV Connection String toggle under Use this connection string in your application in the Connect modal.