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

ApsaraDB for MongoDB:レプリカセットインスタンスの読み書き分離と高可用性

最終更新日:Jun 22, 2026

ApsaraDB for MongoDB のレプリカセットインスタンスは、高可用性と読み書き分離をサポートしています。これらの機能を利用するには、インスタンスに正しく接続し、必要な設定を行う必要があります。

背景情報

レプリカセットインスタンスのプライマリノードは固定されていません。プライマリノードに障害が発生すると、システムはプライマリ/セカンダリ スイッチオーバーをトリガーし、元のプライマリノードをセカンダリノードに降格させます。

プライマリノードのダイレクトエンドポイントを使用してデータベースに接続すると、すべての読み取りおよび書き込み操作がそのノードに送信されます。これにより、プライマリノードの負荷が高くなる可能性があります。プライマリ/セカンダリ スイッチオーバーが発生した場合、接続しているノードはセカンダリノードになり、クライアントは書き込み操作を実行できなくなります。これにより、ビジネスに深刻な影響が及ぶ可能性があります。

高可用性

ApsaraDB for MongoDB は、高可用性を確保するための接続文字列 URI を提供します。この URI には、インスタンス内のすべてのノードのアドレスが含まれています。プライマリ/セカンダリ スイッチオーバーの後、書き込みリクエストは自動的に新しいプライマリノードにルーティングされ、書き込み操作の中断を防ぎます。

レプリカセットインスタンスへの接続方法の詳細については、「レプリカセットインスタンスへの接続」をご参照ください。

説明
  • 本番環境で高可用性を確保するには、接続文字列 URI を使用してアプリケーションをインスタンスに接続してください。

  • すべての公式 MongoDB ドライバーは、接続文字列 URI をサポートしています。

高可用性アドレスの取得

  1. レプリカセットインスタンスページに移動し、リソースグループとリージョンを選択してから、ターゲットインスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、データベース接続 をクリックします。

  3. 高可用性の接続文字列 URI を取得します。[プライベート接続 - Virtual Private Cloud] セクションで、[接続文字列 URI] の行を見つけます。この行は [推奨] とマークされています。アドレスをコピーします。アドレスのフォーマットは次のとおりです: mongodb://root:****@dds-InstanceID.mongodb.rds.aliyuncs.com:3717,dds-InstanceID.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-ReplicaSetID

    接続文字列 URI を使用して接続すると、クライアントはプライマリノードとセカンダリノードのロールを自動的に検出します。プライマリ/セカンダリ スイッチオーバーが発生した場合、クライアントは書き込み操作を新しいプライマリノードに自動的にリダイレクトし、高可用性を確保します。

読み書き分離

接続文字列 URI は、readPreferencereadPreferenceTags パラメーターを提供します。readPreference パラメーターは、読み書き分離と負荷分散を制御します。readPreferenceTags パラメーターは、特定のタグを持つノードへの読み取りリクエストのルーティングを優先します。

readPreferencereadPreferenceTags パラメーターを組み合わせて、さまざまなユースケースをサポートできます。

読み取り失敗時のフォールバック

ターゲットノード

パラメーター

失敗時に読み取りリクエストをプライマリノードにルーティングする

プライマリノードを優先

&readPreference=primaryPreferred

セカンダリノードと読み取り専用ノードを優先

&readPreference=secondaryPreferred

セカンダリノードを優先 (クラウドディスクベースのインスタンスのみ)

&readPreference=secondaryPreferred&readPreferenceTags=role:electable

読み取り専用ノードを優先

&readPreference=secondaryPreferred&readPreferenceTags=role:readonly

失敗時に読み取りリクエストをプライマリノードにルーティングしない

セカンダリノードと読み取り専用ノードからのみ読み取る

&readPreference=secondary

セカンダリノードからのみ読み取る (クラウドディスクベースのインスタンスのみ)

&readPreference=secondary&readPreferenceTags=role:electable

読み取り専用ノードからのみ読み取る

&readPreference=secondary&readPreferenceTags=role:readonly

接続文字列 URI を使用した読み書き分離

読み書き分離を実装するには、readPreferencereadPreferenceTags パラメーターを接続文字列 URI に追加します。

たとえば、すべての書き込みリクエストをプライマリノードにルーティングし、読み取りリクエストをフォールバックなしで読み取り専用ノードに限定するには、&readPreference=secondary&readPreferenceTags=role:readonly を接続文字列 URI に追加します。次の例は、完全な URI を示しています:

mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&readPreference=secondary&readPreferenceTags=role:readonly
説明

テスト環境では、次のドライバーバージョンが使用されました:

  • pymongo 3.11.4

  • mongodb-driver-sync 4.6.1

  • mongosh 2.2.15

参考資料