ApsaraDB for MongoDBレプリカセットインスタンスは高可用性を提供し、読み書き分離をサポートします。 読み書き分離と高可用性を実装するには、適切な方法でレプリカセットインスタンスに接続し、必要な設定を行う必要があります。
背景情報
レプリカセットインスタンスのプライマリノードは、特定のノードに固定されていません。 プライマリノードに障害が発生すると、システムはプライマリ /セカンダリの切り替えをトリガーします。 このようにして、元のプライマリノードはセカンダリノードにデグレードされます。
レプリカセットインスタンスのプライマリノードのエンドポイントを使用してインスタンスに接続すると、ノードですべての読み取り /書き込み操作が完了するため、ノードに高負荷がかかります。 さらに、プライマリ /セカンダリの切り替え後、元のプライマリノードはセカンダリノードになります。 この場合、元のプライマリノードのエンドポイントを使用してインスタンスに接続するクライアントは、書き込み操作を実行できません。これは、ビジネスに深刻な影響を及ぼします。
高可用性
ApsaraDB for MongoDBは、レプリカセットインスタンスの接続文字列URLを提供します。 URIを使用すると、インスタンス内のすべてのノードに接続できます。 プライマリ /セカンダリの切り替え後、書き込み要求はインスタンスの新しいプライマリノードにルーティングされ、通常の書き込み操作が保証されます。
レプリカセットインスタンスのエンドポイントの詳細については、「レプリカセットインスタンスへの接続」をご参照ください。
高可用性を確保するために、接続文字列URIを使用して、本番環境のアプリケーションをインスタンスに接続することを推奨します。
すべての公式MongoDBドライバは、インスタンス接続用の接続文字列URIの使用をサポートしています。 MongoDBドライバーの詳細については、「MongoDBでの開発の開始」をご参照ください。
レプリカセットインスタンスの接続文字列URIの表示
レプリカセットインスタンスページに移動します。 上部のナビゲーションバーで、インスタンスが存在するリージョンを選択します。 次に、管理するインスタンスを見つけ、インスタンスのIDをクリックします。
インスタンスの詳細ページの左側のナビゲーションウィンドウで、データベース接続をクリックします。
インスタンスの接続文字列URIを表示します。
接続文字列URIを使用してインスタンスに接続すると、クライアントはプライマリノードとセカンダリノードの関係を自動的に検出します。 プライマリノードが変更された場合、クライアントは書き込み操作を新しいプライマリノードに自動的に切り替えて、ApsaraDB for MongoDBの高可用性を確保します。
読み書き分離
接続文字列URIには、readPreference
パラメーターとreadPreferenceTags
パラメーターが含まれます。 readPreference
パラメーターは、読み書きの分割と負荷分散を実装し、readPreferenceTags
パラメーターは、システムが指定されたタグに対応するノードに読み取り要求を優先的に送信することを指定します。
readPreference
パラメーターとreadPreferenceTags
パラメーターのさまざまな組み合わせは、さまざまなシナリオの要件を満たすことができます。 次の表に、さまざまなシナリオでのパラメーターの組み合わせを示します。
失敗した読み取り要求の処理に使用されるメソッド | 読み取り要求を受信するノード | パラメータの組み合わせソリューション |
失敗した読み取り要求をプライマリノードに送信する | プライマリノードから優先的にデータを読み取る |
|
セカンダリノードと読み取り専用ノードから優先的にデータを読み取る |
| |
セカンダリノードから優先的にデータを読み取る (クラウドディスクベースのインスタンスのみ) |
| |
読み取り専用ノードから優先的にデータを読み取る |
| |
失敗した読み取り要求をプライマリノードに送信しない | セカンダリノードと読み取り専用ノードからのみデータを読み取る |
|
セカンダリノードからのみデータを読み取る (クラウドディスクベースのインスタンスのみ) |
| |
読み取り専用ノードからのみデータを読み取る |
|
インスタンスの接続文字列URIを使用して読み書き分離を実装する方法
読み書き分離を実装し、特定のシナリオを使用する場合は、インスタンスの接続文字列URIの後にreadPreference
パラメーターとreadPreferenceTags
パラメーターを追加します。
たとえば、すべての書き込み要求をインスタンスのプライマリノードに送信し、読み取り要求をインスタンスの読み取り専用ノードにのみ送信し、失敗した要求をプライマリノードに送信しない場合などです。 インスタンスの接続文字列URIの後に &readPreference=secondary&readPreferenceTags=role:readonly
を追加するだけです。 例:
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
テスト環境で使用されるドライバーのバージョンを次に示します。
ピモンゴ3.11.4
mongodb-driver-sync 4.6.1
モンゴッシュ2.2.15