ApsaraDB for MongoDB のレプリカセットインスタンスは、高可用性と読み書き分離をサポートしています。これらの機能を利用するには、インスタンスに正しく接続し、必要な設定を行う必要があります。
背景情報
レプリカセットインスタンスのプライマリノードは固定されていません。プライマリノードに障害が発生すると、システムはプライマリ/セカンダリ スイッチオーバーをトリガーし、元のプライマリノードをセカンダリノードに降格させます。
プライマリノードのダイレクトエンドポイントを使用してデータベースに接続すると、すべての読み取りおよび書き込み操作がそのノードに送信されます。これにより、プライマリノードの負荷が高くなる可能性があります。プライマリ/セカンダリ スイッチオーバーが発生した場合、接続しているノードはセカンダリノードになり、クライアントは書き込み操作を実行できなくなります。これにより、ビジネスに深刻な影響が及ぶ可能性があります。
高可用性
ApsaraDB for MongoDB は、高可用性を確保するための接続文字列 URI を提供します。この URI には、インスタンス内のすべてのノードのアドレスが含まれています。プライマリ/セカンダリ スイッチオーバーの後、書き込みリクエストは自動的に新しいプライマリノードにルーティングされ、書き込み操作の中断を防ぎます。
レプリカセットインスタンスへの接続方法の詳細については、「レプリカセットインスタンスへの接続」をご参照ください。
-
本番環境で高可用性を確保するには、接続文字列 URI を使用してアプリケーションをインスタンスに接続してください。
-
すべての公式 MongoDB ドライバーは、接続文字列 URI をサポートしています。
高可用性アドレスの取得
-
レプリカセットインスタンスページに移動し、リソースグループとリージョンを選択してから、ターゲットインスタンスの ID をクリックします。
-
左側のナビゲーションウィンドウで、データベース接続 をクリックします。
-
高可用性の接続文字列 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 は、readPreference と readPreferenceTags パラメーターを提供します。readPreference パラメーターは、読み書き分離と負荷分散を制御します。readPreferenceTags パラメーターは、特定のタグを持つノードへの読み取りリクエストのルーティングを優先します。
readPreference と readPreferenceTags パラメーターを組み合わせて、さまざまなユースケースをサポートできます。
|
読み取り失敗時のフォールバック |
ターゲットノード |
パラメーター |
|
失敗時に読み取りリクエストをプライマリノードにルーティングする |
プライマリノードを優先 |
|
|
セカンダリノードと読み取り専用ノードを優先 |
|
|
|
セカンダリノードを優先 (クラウドディスクベースのインスタンスのみ) |
|
|
|
読み取り専用ノードを優先 |
|
|
|
失敗時に読み取りリクエストをプライマリノードにルーティングしない |
セカンダリノードと読み取り専用ノードからのみ読み取る |
|
|
セカンダリノードからのみ読み取る (クラウドディスクベースのインスタンスのみ) |
|
|
|
読み取り専用ノードからのみ読み取る |
|
接続文字列 URI を使用した読み書き分離
読み書き分離を実装するには、readPreference と readPreferenceTags パラメーターを接続文字列 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