すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:接続およびネットワークの問題のトラブルシューティング

最終更新日:Jun 11, 2026

ApsaraDB for MongoDB インスタンスの接続失敗は、診断して修正できます。まずは 一般的なエラー で素早く解決するか、または トラブルシューティングの手順 に従って根本原因を体系的に特定してください。

トラブルシューティングの手順

ステップ 1:ネットワーク接続の確認

トラブルシューティング方法

次のコマンドを使用して、ApsaraDB for MongoDB インスタンスへの接続をテストします。

  • ping <domain> コマンドを実行します。例: ping dds-xxxx.mongodb.rds.aliyuncs.com を実行します。

    ping dds-xxx.mongodb.rds.aliyuncs.com
    PING dds-xxx.mongodb.rds.aliyuncs.com (xxx): 56 data bytes
    64 bytes from xxx: icmp_seq=0 ttl=90 time=7.698 ms
    64 bytes from xxx: icmp_seq=1 ttl=90 time=7.085 ms
    64 bytes from xxx: icmp_seq=2 ttl=90 time=11.006 ms
    64 bytes from xxx: icmp_seq=3 ttl=90 time=12.154 ms
    64 bytes from xxx: icmp_seq=4 ttl=90 time=9.149 ms

    この出力は、クライアントが ApsaraDB for MongoDB インスタンスに到達できることを示します。

  • telnet <domain> <port> コマンドを実行します。例: telnet dds-xxxx.mongodb.rds.aliyuncs.com 3717 を実行します。

    root@mongotest:~# telnet xxx.mongodb.rds.aliyuncs.com 3717
    Trying xxx...
    Connected to xxx.mongodb.rds.aliyuncs.com.
    Escape character is '^]'.

    この出力は、DNS 名前解決とポート 3717 へのアクセスが可能であることを示します。

チェックリスト

ネットワーク テストに失敗した場合は、次の項目を確認してください。

インスタンスの状態の確認。インスタンスは [Running] 状態である必要があります。

ホワイトリスト設定の確認。クライアントの IP アドレスを、ApsaraDB for MongoDB インスタンスのホワイトリストに追加する必要があります。

  • 確認方法:

    一時的に、インスタンスのホワイトリストに 0.0.0.0/0 を追加してください。この変更後にインスタンスへ接続できる場合、元のホワイトリスト設定が正しくありません。

    重要

    IP アドレス 0.0.0.0/0 を追加すると、任意のデバイスが ApsaraDB for MongoDB インスタンスにアクセスできるため、セキュリティ上のリスクがあります。この IP アドレスはテスト目的でのみ使用し、テスト後は直ちにホワイトリストから削除してください。

  • 解決策:

    正しいクライアント IP アドレスをホワイトリストに追加してください。「FAQ」を参照して、クライアントのパブリック IP を確認します。

ネットワークタイプとエンドポイントの確認。ネットワーク タイプ(プライベートまたはパブリック)に応じて、正しいエンドポイントを使用してください。

ApsaraDB for MongoDB コンソールにログインし、[Database Connection] ページでインスタンスのエンドポイントを確認できます。

ステップ 2:認可と認証

アカウント名、パスワード、特殊文字の確認

  • 指定したアカウント名とパスワードが正しいことを確認してください。

  • パスワードの変更。パスワードを変更する必要がある場合は、「パスワードのリセット」をご参照ください。

    Data Management Service (DMS) を使用して ApsaraDB for MongoDB インスタンスに接続した後にパスワードを変更した場合は、[DMS コンソール] に移動し、対象インスタンスを右クリックして [Edit] を選択し、再度ログインしてください。

  • 特殊文字:MongoDB シェルまたはアプリケーション コードを使用して ApsaraDB for MongoDB インスタンスに接続する場合、アカウント名またはパスワードに含まれる !@#$%^&*()_+= などの特殊文字はエスケープする必要があります。「ユーザー名またはパスワードの特殊文字が原因で発生する接続失敗を解決するにはどうすればよいですか?」をご参照ください。

認証データベースの確認。データベースアカウントは、所属するデータベースに対して認証される必要があります。

インスタンスのエンドポイントの確認。書き込み操作が必要なレプリカセットインスタンスの場合は、接続文字列 URI エンドポイントを使用して接続することを推奨します。

  • 症状: エンドポイントを変更していないにもかかわらず、突然インスタンスにアクセスできなくなります。

  • 原因: 書き込み操作を実行できるのはプライマリーノードのみです。以前にアプリケーションがプライマリーノードのエンドポイントを使用して接続していた場合、フェイルオーバーによって接続先ノードがセカンダリーノードに切り替わり、書き込み操作に失敗します。

  • 解決策:

    一時的な切断から自動的に復旧できるように、アプリケーションに再接続の仕組みと例外処理を実装してください。

ステップ 3:その他の確認

インスタンスパフォーマンスの確認

サードパーティツールの確認

Navicat や Compass などのサードパーティツールから ApsaraDB for MongoDB インスタンスに接続できない場合、インスタンスまたはツールの設定が正しくないことが原因である可能性があります。次の手順でトラブルシューティングを行ってください。

  1. MongoDB シェルを使用して接続をテストしてください。

    高可用性の接続文字列 URI を使用して MongoDB シェルからインスタンスに接続することを推奨します。

  2. テスト結果に基づいて問題を切り分けてください。

    • 接続成功: インスタンスにアクセスできます。問題はサードパーティツールの設定が正しくないことが原因である可能性があります。ツールの構成を確認してください。

    • 接続失敗: MongoDB シェルで接続できない場合は、インスタンス 設定が正しくない可能性があります。このトピックの手順に従って、ネットワーク接続、認可、認証、その他の設定を確認してください。

一般的なエラー

エラーメッセージ

原因と解決策

network error while attempting to run command 'isMaster' on host 'dds-xxxx.mongodb.rds.aliyuncs.com:3717' :exception: connect failed

  • Timed out after 3000ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. exception=(com.mongodb.MongoSocketReadException: Prematurely reached end of stream)

  • Socket recv() errno:54 Connection reset by peer x.x.x.x:27017

インスタンスが接続上限に達した可能性があります。

解決策:

  1. 接続数が枯渇していないか確認します。詳細については、「接続数の照会方法」をご参照ください。

  2. 接続の使用を最適化します。詳細については、「インスタンスへの接続数が上限に達した場合の対処方法」をご参照ください。

MongoDB.Driver.MongoWaitQueueFullException: The wait queue for acquiring a connection to server xxx is full.

MongoDB ドライバーの待機キューが満杯です。これは、接続プールのサイズが小さいか、高い同時実行性が原因である可能性があります。

解決策:

  1. アプリケーションの接続プール設定を確認します。プールが適切なサイズであることを確認します。詳細については、「クライアント接続数を制限する方法」をご参照ください。

  2. 問題が解決しない場合は、ApsaraDB for MongoDB インスタンスへの接続数が枯渇していないか確認します。

    1. 「接続数の照会方法」

    2. 「インスタンスへの接続数が上限に達した場合の対処方法」

(TooManyLogicalSessions) Unable to add session into the cache because the number of active sessions is too high.

過剰な同時接続により、利用可能なセッションが枯渇する可能性があります。

解決策:

  1. 接続枯渇による接続障害のトラブルシューティングを行います。

    1. 「接続数の照会方法」

    2. 「インスタンスへの接続数が上限に達した場合の対処方法」

  2. 接続数が正常な場合は、インスタンスの他のパフォーマンスメトリックがビジネス要件を満たしているかどうかを確認します。

    1. 「ノード監視」を使用して、CPU やメモリなどのリソース使用量を確認し、インスタンスタイプがビジネス要件を満たしているかどうかを判断します。

    2. インスタンスタイプがワークロードに対して小さすぎる場合は、オフピーク時に「インスタンス設定の変更」を行います。

  • getaddrinfo failed.

  • No suitable servers found (`serverSelectionTryOnce` set).

インスタンスのエンドポイントが正しいことを確認します:

  • Failed to connect to 10.*.*.8:3717 after 5000 milliseconds, giving up.Error: couldn't connect to server 10.*.*.8:3717 (10.*.*.8), connection attempt failed

  • pymongo.errors.ServerSelectionTimeoutError: dds-xxxx.mongodb.rds.aliyuncs.com:3717: [Errno 113] No route to host,dds-xxxx.mongodb.rds.aliyuncs.com:3717

  • InvalidInstanceId.NotFound: The instance not in current vpc.

ECS インスタンスがプライベートネットワーク経由で ApsaraDB for MongoDB インスタンスに接続できません。

解決策:

  1. ホワイトリストの設定を確認します。ECS インスタンスのプライベート IP アドレスが ApsaraDB for MongoDB インスタンスのホワイトリストに追加されていることを確認します。

  2. ECS インスタンスと ApsaraDB for MongoDB インスタンスがネットワーク経由で相互に通信できることを確認します。

    ECS インスタンスと ApsaraDB for MongoDB インスタンスが同じ VPC にある場合、プライベートネットワーク経由で直接接続できます。異なる VPC にある場合は、次のいずれかの方法を使用します:

org.springframework.data.mongodb.UncategorizedMongoDbException: Timeout while receiving message; nested exception is com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message

  • "errmsg": "not master", "code": 10107, "codeName": "NotMaster"

  • "errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary"

  • Time out after 30000ms while waiting for a server that matches writableServerSelector.

  • Command failed with error 10107 (NotWritablePrimary): 'not primary' on server xxx.

  • Explain's child command cannot run on this node. Are you explaining a write command on a secondary?

  • not master and slaveOk=false.

  • MongoNotPrimaryException: Command failed with error 10107 (NotMaster): 'not master' on server xxx.

  • reason: TopologyDescription { type: 'ReplicaSetNoPrimary',...}

データが書き込まれているノードがプライマリーノードではありません。

原因:書き込み操作はプライマリーノードでのみ実行できます。アプリケーションが以前にプライマリーノードのエンドポイントを使用して接続していた場合、フェイルオーバーによって接続先ノードがセカンダリーノードに変わり、書き込み操作が失敗する可能性があります。

解決策:

  • 本番環境では、アプリケーションが接続文字列 URI を使用してデータベースに接続することを推奨します。この方法により、ノードに障害が発生した場合でも、フェイルオーバーによる読み取りおよび書き込み操作への影響を防ぐことができます。エンドポイントの詳細については、次のトピックをご参照ください:

  • 手動でノードロールを切り替えます。単一ノードのエンドポイントに対応するノードをプライマリーノードに昇格させます。

アプリケーションに再接続メカニズムと例外処理を実装し、一時的な切断から自動的に回復できるようにしてください。

[Unauthorized] cloud instance error, disk locked, plz check and upgrade your disk quota,

ディスク領域が枯渇したため、インスタンスがロックされています。

解決策:「ディスク領域の枯渇によるインスタンスのロックまたは書き込みの失敗の解決」をご参照ください。

(AuthenticationFailed) Authentication failed.

  • 原因 1:データベースアカウントのパスワードに、!@#$%^&*()_+= などの特殊文字が含まれています。

    解決策:「ユーザー名またはパスワードの特殊文字が原因で発生する接続障害を解決する方法」をご参照ください。

  • 原因 2:データベースアカウントのパスワードが正しくありません。

    解決策:アカウント情報とパスワードを確認するか、パスワードをリセットしてから再度接続を試みてください。

  • 原因 3:インスタンスエンドポイントで指定された認証データベースが正しくありません。

    解決策:接続文字列で正しい認証データベースを指定します。詳細については、「接続で認証データベースを指定する方法」をご参照ください。

  • 原因 4:クライアントのバージョンが古いです。

    解決策:MongoDB Shell 3.0 以降を使用する必要があります。インストール手順については、MongoDB の公式ドキュメント「MongoDB のインストール」をご参照ください。他の言語のクライアントのバージョン要件については、「ドライバーの互換性」ドキュメントをご参照ください。

  • !xxx@dds-xxx.mongodb.rds.aliyuncs.com: event not found

データベースアカウントのパスワードに、!@#$%^&*()_+= などの特殊文字が含まれています。

解決策:「ユーザー名またはパスワードの特殊文字が原因で発生する接続障害を解決する方法」をご参照ください。

error getting cluster ID: (CommandNotFound) replSetGetConfig is forbidden by cloud provider for security reason

ApsaraDB for MongoDB は replSetGetConfig をサポートしていません (ApsaraDB for MongoDB におけるコマンドの制限)。

よくある質問

接続数の照会

最大接続数は、インスタンスタイプによって異なります。

説明

接続上限はノード単位で適用されます。例えば、1 vCPU と 2 GB のメモリを持つ 3 ノードのレプリカセットインスタンスでは、プライマリーノードと各セカンダリノードでそれぞれ最大 500 の接続が可能です。非表示ノードはトラフィックを処理しません。

コンソール

  1. ApsaraDB for MongoDB レプリカセットインスタンスページまたは ApsaraDB for MongoDB シャードクラスターインスタンスページにアクセスします。上部のメニューバーでリージョンを選択し、対象インスタンスの ID をクリックします。

  2. 左側のナビゲーションペインで、Monitoring Information をクリックします。

  3. Monitoring Information ページで、インスタンスの 接続数 情報を確認します。

    インスタンスがシャーディングクラスターインスタンスの場合、ページの右上隅で、サービスで現在使用している Mongos を選択する必要があります。

コマンド

  1. MongoDB シェルを使用してインスタンスに接続します。

  2. 接続数を確認します。

    db.serverStatus().connections コマンドを実行します。

    mgset-123456:PRIMARY> db.serverStatus().connections
    {
            "current" : 1,
            "available" : 999,
            "internal_current" : 10,
            "internal_available" : 990,
            "totalCreated" : 632
    }             

    パラメータの説明:

    • "current":確立された接続数。

    • "available":利用可能な接続数。

  3. 現在の接続元を照会します。

    1. admin データベースに切り替えます。

      use admin
    2. db.runCommand({currentOp: 1, $all: true}) コマンドを実行します。

      mgset-123456:PRIMARY> db.runCommand({currentOp: 1, $all: true})                    

    出力を分析して、接続元 IP とクライアントごとの接続数を特定します。詳細については、db.currentOp() をご参照ください。

クライアント接続数の制限

接続文字列 URI に &maxPoolSize=<integer> を追加して、プールサイズを制限します。次の例では、MongoDB シェルで接続し、プールサイズを 10 に設定しています (アカウント:test、認証データベース:admin):

mongosh "mongodb://test:****@dds-bp19f409d7512****-pub.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****-pub.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&maxPoolSize=10"
説明

他の言語でプールサイズを制限する方法については、MongoDB Drivers ドキュメントをご確認ください。

接続上限への対処

インスタンス、そのコンポーネント、またはノードを再起動して、一時的にすべての接続を解放できます。

重要

インスタンスを再起動すると、ノードが順番に再起動されます。各ノードは約 30 秒間の瞬断が発生します。インスタンスに大量のコレクション (10,000 を超える) が含まれている場合、切断時間が長くなる可能性があります。インスタンスを再起動する前に、適切に計画し、アプリケーションに再接続メカニズムがあることを確認してください。

再起動後、再発を防ぐために次の調整を行ってください:

認証情報の特殊文字

接続文字列のアカウント名またはパスワードに !@#$%^&*()_+= などのエスケープされていない特殊文字が含まれていると、接続が失敗します。

解決策: 接続文字列内の特殊文字をエスケープします。次の表にエンコード規則を示します。

! : %21
@ : %40
# : %23
$ : %24
% : %25
^ : %5e
& : %26
* : %2a
( : %28
) : %29
_ : %5f
+ : %2b
= : %3d

例: パスワードが ab@#c の場合、接続文字列内の特殊文字をエスケープする必要があります。エスケープ後のパスワードは ab%40%23c です。

認証データベースの指定

データベースアカウントは、そのアカウントが作成されたデータベースで認証を行う必要があります。

ユーザー名とパスワードがどちらも test で、test アカウントが testdb データベースに属していると仮定します。

高可用性エンドポイント

接続文字列 URI または読み取り専用接続文字列 URI で、authSource をアカウントが作成されたデータベースに設定します。省略した場合、URI 内の <database> が認証に使用されます。

例:

  • test アカウントが testdb データベースで認証された後、インスタンスは <database> データベースに切り替わります。

mongosh "mongodb://test:test@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>&authSource=testdb"
  • test アカウントが testdb データベースで認証された後、インスタンスは testdb データベースに切り替わります。

mongosh "mongodb://test:test@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/testdb?replicaSet=<replicaSet_value>"

シングルノードエンドポイント

次のいずれかのコマンドを実行してログオンできます:

mongosh --host $myhost --port $myport -u test -p test --authenticationDatabase testdb

または

    mongosh --host $myhost --port $myport
    use testdb
    db.auth("test", "test")

エンドポイントパラメータの詳細については、「レプリカセットインスタンスへの接続」および「シャードクラスターインスタンスへの接続」をご参照ください。

サポートされているクライアント言語

ApsaraDB for MongoDB は MongoDB と完全に互換性があり、すべての公式 MongoDB クライアントをサポートしています。

サポートされている言語には、C、C++、C#、Java、Node.js、Python、PHP、および Perl が含まれます (公式ドキュメント)。

サンプルコードについては、次のトピックをご参照ください:

説明

ApsaraDB for MongoDB インスタンスに接続する際に適切な認証を確保するには、バージョン 3.0 以降の MongoDB ドライバーを使用してください。

パブリックネットワークアクセス

はい。詳細については、「インターネット上のクライアントから MongoDB インスタンスへの接続」をご参照ください。

パスワードなしのアクセス

ApsaraDB for MongoDB は、VPC 経由でのパスワードなしのアクセスの有効化を サポートしなくなりました。

パスワードなしのアクセスがすでに有効になっている場合は、恒久的に無効にすることができます。無効にする方法については、「プライベートネットワーク経由のパスワードなしのアクセスを無効にする」をご参照ください。

Windows での MongoDB シェル

一般的な接続シナリオ