ApsaraDB for MongoDB レプリカセットインスタンスは、データの高い信頼性を確保するためにデータの複数のコピーを提供します。 また、サービスの高可用性を保証するための自動フェイルオーバーメカニズムも提供します。 高可用性を実現するには、正しい方法を使用してレプリカセットインスタンスに接続する必要があります。 読み取り操作と書き込み操作を分離するように接続を構成することもできます。

始める前に

  • レプリカセットインスタンスのプライマリノードは永続的ではありません。 プライマリノードとセカンダリノード間のフェイルオーバーは、レプリカセットインスタンスのノードが順番にアップグレードされたとき、プライマリノードに障害が発生したとき、またはネットワークが分割されたときに発生する可能性があります。 これらのシナリオでは、レプリカセットは新しいプライマリノードを選択し、元のプライマリノードをセカンダリノードにダウングレードできます。
  • プライマリノードのアドレスを使用してレプリカセットインスタンスのプライマリノードに直接接続した場合は、すべての読み取りおよび書き込み操作を処理するためにプライマリノードに大きな負荷がかかる必要があります。 レプリカセットインスタンスでフェイルオーバーがトリガーされ、接続されているプライマリノードがセカンダリノードにダウングレードされると、書き込み操作を実行できなくなり、ビジネスに深刻な影響を与えます。

Connection string URI

レプリカセットインスタンスに正しく接続するには、MongoDB の Connection string URI format を学ぶ必要があります。 あらゆる公式 drivers は、Connection string URI で MongoDB に接続することをサポートしています。

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][? options]]
注釈:
  • mongodb://: このアドレスが Connection string URI であることを示すプレフィックス。
  • username:password@:データベースの接続に使用するユーザー名とパスワード。 認証が有効になっている場合は、パスワードが必要です。
  • hostX:portX:レプリカセットインスタンス内のノードへの接続に使用されるアドレスのリスト。 各アドレスは、IP アドレスとポート番号で構成されています。 複数のアドレスはカンマ(、)で区切ります。
  • /database:認証が有効になっている場合、ユーザー名とパスワードに対応するデータベース。
  • ? options:追加の接続オプション。
Connection string URI の詳細は、 Connection String URI Format をご参照ください。

Connection string URI を使用したレプリカセットインスタンスへの接続

ApsaraDB for MongoDB は、Connection string URI を使用したレプリカセットインスタンスへの接続をサポートしています。

  1. レプリカセットインスタンスの Connection string URI を取得します。 詳細は、レプリカセットインスタンスの接続情報の取得をご参照ください。
  2. 取得した Connection string URI を使用して、アプリケーションをインスタンスに接続します。 詳細は、MongoDB drivers の接続サンプルコードをご参照ください。

    読み取りと書き込みを分離するには、 readPreference = secondaryPreferred を Connection string URI の options に追加して、読み取り設定をセカンダリノードに設定する必要があります。

    読み取り設定オプションの詳細については、 読み取り設定をご参照ください。

    以下は、読み取り設定を指定した Connection string URI の例です。
    mongodb://root:xxxxxxxx@dds-xxxxxxxxxxxx:3717,xxxxxxxxxxxx:3717/admin? replicaSet=mgset-xxxxxx&readPreference=secondaryPreferred

前述の方法を使用してレプリカセットインスタンスに接続後、クライアントは読み取りリクエストをセカンダリノードに優先的に送信して、read/write split を実行できます。 同時に、クライアントはプライマリノードとセカンダリノードの間の関係を自動的に検出します。 プライマリノードが変更された場合、クライアントは自動的に書き込み操作を新しいプライマリノードに切り替え、サービスの高可用性を保証します。