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

ApsaraDB for MongoDB:接続とネットワーク

最終更新日:Jan 07, 2026

このトピックでは、ApsaraDB for MongoDB インスタンスに関する一般的な接続の問題を解決する方法について説明します。迅速な解決策については、まず [一般的なエラー] セクションを確認することを推奨します。エラーがリストにない場合は、[トラブルシューティングの手順] に従って体系的な診断を行ってください。

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

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

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

以下のコマンドを使用して、ネットワーク接続をテストします。

  • ping <ドメイン名>、例:ping dds-xxxx.mongodb.rds.aliyuncs.com

    image

    この図は、クライアントと MongoDB インスタンス間のネットワーク接続が成功したことを示しています。

  • telnet <ドメイン名> <ポート番号>、例:telnet dds-xxxx.mongodb.rds.aliyuncs.com 3717

    测试端口この図は、ドメイン名が解決され、ポート 3717 を介した通信が可能であることを示しています。

チェックリスト

ネットワークテストが失敗した場合、以下のチェックリストを使用して問題を特定し、解決します。

インスタンスのステータスの確認:インスタンスが [実行中] 状態であることを確認します。

ホワイトリスト設定の確認:クライアントの IP アドレスがホワイトリストに追加されていることを確認します。

  • 確認方法:

    一時的に 0.0.0.0/0 をデータベースのホワイトリストに追加します。接続が成功した場合、問題は IP アドレス設定の誤りです。

    重要

    0.0.0.0/0 を使用すると、インスタンスがインターネット全体に公開され、深刻なセキュリティリスクが生じます。これは診断目的でのみ使用し、テスト後すぐに正しいクライアント IP アドレスに置き換えてください。

  • ソリューション:

    正しいクライアント IP アドレスをインスタンスのホワイトリストに追加します。クライアントのパブリック IP アドレスを確認するには、よくある質問」をご参照ください。

ネットワーク環境とインスタンスエンドポイントの確認:ネットワークタイプに適した正しいエンドポイントを使用していることを確認します。

ApsaraDB for MongoDB は、プライベートネットワーク接続とパブリックネットワーク接続をサポートしています。ネットワーク環境によって使用するエンドポイントが異なります。

エンドポイントは、ApsaraDB for MongoDB コンソール[データベース接続] ページで確認できます。

ステップ 2:権限付与と ID 検証

アカウント認証情報の確認:パスワードが正しく、特殊文字が適切にエスケープされていることを確認します。

  • 提供されたアカウント名とパスワードが正しいことを確認します。

  • パスワードの変更。パスワードの変更方法の詳細については、「パスワードのリセット」をご参照ください。

    DMS を使用して ApsaraDB for MongoDB インスタンスに接続した後にパスワードを変更した場合、DMS コンソールに移動し、対象のインスタンスを右クリックして [編集] を選択し、再度ログインします。

  • 特殊文字。Mongo Shell またはプログラムコードを使用して ApsaraDB for MongoDB インスタンスに接続する際、接続文字列のパスワードに特殊文字が含まれている場合は、それらをエスケープする必要があります。これには、!@#$%^&*()_+= などの文字が含まれます。詳細については、「接続文字列のアカウントまたはパスワードに含まれる特殊文字による接続失敗を解決する方法」をご参照ください。

認証データベースの確認:アカウントが正しいデータベースに対して認証されていることを確認します。

詳細については、「接続時に認証データベースを指定する方法」をご参照ください。

インスタンスエンドポイントの確認:レプリカセットインスタンスでの書き込み操作には、ConnectionString URI エンドポイントを使用していることを確認します。

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

  • 原因:書き込み操作はプライマリノードでのみ実行できます。アプリケーションが以前にプライマリノードのアドレス経由で接続していた場合、レプリカセットのフェールオーバー後、実際に接続されているノードがセカンダリノードになり、書き込み操作が失敗する可能性があります。

  • ソリューション

    • 本番環境のアプリケーションでは、ConnectionString URI アドレスを使用してデータベースに接続することを推奨します。ノード障害が発生した場合でも、アプリケーションの読み取りおよび書き込み操作はプライマリ/セカンダリのフェールオーバーの影響を受けません。エンドポイントの詳細については、以下をご参照ください。

    • 手動でノードのロールを切り替えます。サービスが使用している単一ノードのエンドポイントに対応するノードをプライマリノードに切り替えます。

    アプリケーションに再接続メカニズムと例外処理を設計してください。これにより、一時的な切断後もアプリケーションが自動的に再接続し、安定性を維持できます。

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

インスタンスのパフォーマンスがビジネス要件を満たしているか確認します。

  • 接続数。インスタンスへの接続数が上限に達していないか確認します。

  • その他のリソース使用量

    • 確認方法:ノード監視機能を使用して、CPU 使用率やメモリ使用量などの一般的なリソースの使用状況を確認します。これにより、インスタンスタイプがビジネス要件を満たしているかどうかを判断できます。

    • ソリューション:インスタンスタイプが高負荷に対して小さすぎる場合は、オフピーク時にインスタンスの仕様を変更します。

サードパーティツールの設定を確認します

Navicat や Compass などのサードパーティツールが ApsaraDB for MongoDB インスタンスに接続できない場合、インスタンスまたはツールの設定が正しくないために接続が失敗する可能性があります。次のように問題をトラブルシューティングします。

  1. Mongo Shell を使用して接続をテストします。

    Mongo Shell ツールを使用して、高可用性の ConnectionStringURI エンドポイントでインスタンスに接続してテストすることを推奨します。

  2. テスト結果に基づいて問題をトラブルシューティングします。

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

    • 接続失敗:インスタンスの設定が正しくない可能性があります。このトピックを参照してトラブルシューティングを行ってください (ネットワーク、権限付与、ID 検証)。

一般的なエラー

エラーメッセージ

原因とソリューション

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. プログラムの設定を調整しても問題が解決しない場合は、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 インスタンスと MongoDB インスタンスが相互に通信できることを確認します。

    ECS インスタンスと 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',...}

このエラーは、プライマリノードではないノードで書き込み操作が試みられた場合に発生します。

原因:書き込み操作はプライマリノードでのみ実行できます。サービスが以前にプライマリノードのエンドポイントを使用して接続していた場合、プライマリ/セカンダリのスイッチオーバー後に接続されたノードがセカンダリノードになります。その結果、書き込み操作が失敗します。

ソリューション

  • 本番環境では、ConnectionStringURI エンドポイントを使用してアプリケーションをデータベースに接続します。ノードに障害が発生した場合、プライマリ/セカンダリのスイッチオーバーはアプリケーションの読み取りおよび書き込み操作に影響しません。エンドポイントの詳細については、以下をご参照ください。

  • 手動でノードのロールを切り替えます。サービスが使用している単一ノードのエンドポイントに対応するノードをプライマリノードに切り替えます。

アプリケーションに再接続メカニズムと例外処理を設計してください。これにより、一時的な切断後もアプリケーションが自動的に再接続し、安定性を維持できます。

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

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

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

(AuthenticationFailed) Authentication failed.

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

    ソリューション:「接続文字列のアカウントまたはパスワードに含まれる特殊文字による接続失敗を解決する方法」をご参照ください。

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

    ソリューション:アカウントとパスワードを確認するか、パスワードをリセットして再試行してください。

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

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

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

    ソリューション:Mongo Shell 3.0 以降を使用してください。インストール手順については、公式の Install MongoDB ドキュメントをご参照ください。他の言語のクライアントのバージョン要件については、Driver Compatibility ドキュメントをご参照ください。

  • !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 でサポートされているコマンドとサポートされていないコマンド」をご参照ください。

よくある質問

接続数のクエリ方法

最大接続数は、ご利用の ApsaraDB for MongoDB インスタンスのインスタンスタイプによって異なります。

説明

最大接続数は、インスタンス内の各ノードに適用されます。例えば、1 コア 2 GB メモリの 3 ノードレプリカセットインスタンスを購入した場合、プライマリノードとセカンダリノードの最大接続数はそれぞれ 500 です。非表示ノードはサービスを提供しません。

コンソール

  1. [MongoDB レプリカセットインスタンス] ページまたは [MongoDB シャードクラスターインスタンス] ページに移動します。上部のナビゲーションバーでリージョンを選択します。次に、対象インスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[モニタリングデータ] をクリックします。

  3. [モニタリングデータ] ページで、インスタンスの [接続数] 情報を表示します。

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

コマンド

  1. Mongo Shell を使用してインスタンスに接続します。

  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:[{"active" : true}]})                    

    コマンドの出力を分析することで、各接続のソース IP アドレスをクエリして、各クライアントからの接続数を確認できます。詳細については、公式ドキュメントをご参照ください。

クライアントの接続数を制限する方法

Connection String URI を使用してデータベースに接続する場合、URI の末尾に &maxPoolSize=<integer> を追加することで、接続プール内の接続数を設定できます。次の例は、Mongo Shell を使用してデータベースに接続する方法を示しています。この例では、接続数は 10 に設定され、データベースアカウントは test、認証データベースは admin です。

mongo "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 API ドキュメントをご参照ください。

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

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

重要

インスタンスを再起動すると、そのノードは順番に再起動されます。各ノードで約 30 秒の一時的な切断が発生します。インスタンスに多数のコレクション (10,000 以上) が含まれている場合、切断が長くなることがあります。インスタンスを再起動する前に、適切な業務調整を行い、アプリケーションに再接続メカニズムがあることを確認してください。

この問題の再発を防ぐため、インスタンスを再起動した後に以下の調整を行うことを推奨します。

  • 接続プールを設定します。詳細については、「クライアントの接続数を制限する方法」をご参照ください。

  • インスタンスタイプをアップグレードします。接続ソースの分析で例外が見られない場合、インスタンスのパフォーマンスがビジネス要件を満たしていない可能性があります。インスタンスの仕様を変更して、最大接続数を増やすことができます。

接続文字列のアカウントまたはパスワードに含まれる特殊文字による接続失敗を解決する方法

Mongo Shell またはプログラムコードを使用して ApsaraDB for MongoDB インスタンスに接続する際、接続文字列のパスワードに認識できない特殊文字が含まれていると接続が失敗します。これらの特殊文字には !@#$%^&*()_+= が含まれます。

ソリューション:接続文字列の特殊文字を以下のルールに基づいてエスケープする必要があります。

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

例:パスワードが ab@#c の場合、接続文字列の特殊文字をエスケープします。パスワードは ab%40%23c になります。

接続時に認証データベースを指定する方法

認証データベースには、データベースアカウントとパスワードが保存されます。データベースアカウントは、それが属するデータベースに対して認証される必要があります。

アカウントとパスワードが両方とも test であり、test アカウントが testdb データベースに属していると仮定します。

高可用性エンドポイント

ConnectionStringURI または ReadOnly ConnectionStringURI エンドポイントを使用してデータベースに接続する場合、authSource パラメーターを設定して、データベースアカウントが属するデータベースを指定する必要があります。このパラメーターを設定しない場合、<database> で指定されたデータベースが認証データベースとして使用されます。

例:

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

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

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

単一ノードエンドポイント

以下のいずれかのコマンドを実行してログインできます。

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

または

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

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

DMS を使用して MongoDB データベースにログインする方法

ApsaraDB for MongoDB がサポートするクライアント言語

ApsaraDB for MongoDB は MongoDB と完全に互換性があります。これは、MongoDB がサポートするすべてのクライアントが ApsaraDB for MongoDB でもサポートされることを意味します。

サポートされている言語には、C、C++、C#、Java、Node.js、Python、PHP、Perl が含まれます。詳細については、公式ドキュメントをご参照ください。

サンプルコードについては、以下をご参照ください。

説明

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

ApsaraDB for MongoDB はパブリックネットワークアクセスをサポートしていますか?

はい、サポートしています。詳細については、「ローカルクライアントからインターネット経由で MongoDB インスタンスに接続する」をご参照ください。

ApsaraDB for MongoDB はパスワードなしのアクセスをサポートしていますか?

ApsaraDB for MongoDB は、VPC 経由でのパスワードなしのアクセスをもはやサポートしていません

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

Windows での Mongo Shell のインストールと使用

一般的な接続シナリオ