レプリカセットとして Amazon DocumentDB に接続する - Amazon DocumentDB

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

レプリカセットとして Amazon DocumentDB に接続する

開発が Amazon DocumentDB (MongoDB 互換)では、レプリカセットとしてクラスタに接続し、ドライバの組み込み読み取り設定機能を使用して、読み取りをレプリカインスタンスに分散することをお勧めします。このセクションでは、その意味を深く掘り下げ、 Amazon DocumentDB クラスタをレプリカセットとして SDK for Python 例を挙げます

Amazon DocumentDB には、クラスターへの接続に使用できる 3 つのエンドポイントがあります。

  • クラスターエンドポイント

  • 読み込みエンドポイント

  • インスタンスエンドポイント

ほとんどの場合、Amazon DocumentDB に接続するときは、クラスターエンドポイントを使用することをお勧めします。これは、次の図に示すように、クラスター内のプライマリインスタンスをポイントする CNAME です。

SSH トンネルを使用する場合は、クラスターエンドポイントを使用してクラスターに接続することをお勧めします。レプリカセットモード (接続文字列に replicaSet=rs0 を指定) で接続するとエラーが発生します。

注記

エンドポイントの詳細については、「Amazon DocumentDB」を参照してください。Amazon DocumentDB エンドポイント.


         クラスター、リーダー、インスタンスのエンドポイントを含む Amazon DocumentDB エンドポイントを示す図。

クラスターエンドポイントを使用して、レプリカセットモードでクラスターに接続できます。その後、組み込まれた読み込み設定ドライバー機能を使用できます。次の例では、/?replicaSet=rs0 を指定することで、レプリカセットとして接続することを SDK を示します。省略した場合 /?replicaSet=rs0'、クライアントはすべてのリクエストをクラスタエンドポイント、つまりプライマリインスタンスにルーティングします。

## Create a MongoDB client, open a connection to Amazon DocumentDB as a ## replica set and specify the read preference as secondary preferred client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0')

レプリカセットとして接続する利点は、インスタンスがクラスターに対して追加または削除されるタイミングを含め、SDK がクラスタートポグラフィを自動的に検出できることです。その後、レプリカインスタンスに読み込みリクエストをルーティングすることで、クラスターをより効率的に使用できます。

レプリカセットとして接続するときは、接続の readPreference を指定できます。読み取り設定を指定した場合: secondaryPreferredクライアントは、リード クエリをレプリカにルーティングし、プライマリ インスタンスにクエリを書き込みます(次の図を参照)。これにより、クラスターリソースをより適切に利用できます。詳細については、「」を参照してください。読み込み設定のオプション.

## Create a MongoDB client, open a connection to Amazon DocumentDB as a ## replica set and specify the read preference as secondary preferred client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')

         図: Amazon DocumentDB readPreferences: secondaryPreferred。

読み取り元 Amazon DocumentDB レプリカは最終的に整合性が保たれます。プライマリに書き込まれたのと同じ順序でデータを返し、50 ミリ秒未満のレプリケーション遅延もよくあります。クラスタのレプリカ・ラグは、 Amazon CloudWatch メトリックメトリック DBInstanceReplicaLag および DBClusterReplicaLagMaximum。 詳細については、以下を参照してください。 を使用した Amazon DocumentDB のモニタリングCloudWatch.

従来のモノリシックデータベースアーキテクチャとは異なり、Amazon DocumentDB はストレージとコンピューティングを分離します。この最新のアーキテクチャでは、レプリカインスタンスの読み取りのスケールをお勧めします。レプリカインスタンスの読み込みは、プライマリインスタンスからレプリケートされる書き込みをブロックしません。クラスターに最大 15 個のリードレプリカインスタンスを追加し、1 秒あたり数百万回の読み込みにスケールアウトできます。

レプリカセットとして接続し、レプリカに読み取りを分散する主な利点は、アプリケーションの作業に利用できるクラスター内のリソース全体が増加することです。ベストプラクティスとして、レプリカセットとして接続することをお勧めします。さらに、以下のシナリオでは最も一般的にお勧めします。

  • プライマリでほぼ 100% の CPU を使用している。

  • バッファキャッシュヒット率がほぼゼロである。

  • 個別のインスタンスで接続またはカーソルの制限に達する。

クラスターインスタンスサイズのスケールアップは 1 つの選択肢であり、場合によっては、これがクラスターをスケーリングするための最良の方法です。ただし、クラスターにすでに存在するレプリカをより適切に使用する方法も考慮する必要があります。これにより、より大きいインスタンスタイプを使用することでコストが増大することなく、スケールを増加できます。また、これらの制限(つまり、 CPUUtilizationDatabaseConnections、および BufferCacheHitRatio) 使用 CloudWatch アラームを使用して、リソースが頻繁に使用されている時間を確認できます。

詳細については、次のトピックを参照してください。

クラスター接続の使用

クラスター内のすべての接続を使用するシナリオを検討します。たとえば、r5.2xlarge インスタンスの接続は 4,500 個 (および開いているカーソルは 450 個) に制限されています。3 つのインスタンスの Amazon DocumentDB クラスターを作成し、クラスターエンドポイントを使用してプライマリインスタンスにのみ接続する場合、開いている接続とカーソルのクラスター制限はそれぞれ 4,500 と 450 になります。コンテナでスピンアップする多くのワーカーを使用するアプリケーションを構築する場合、これらの制限に達する可能性があります。コンテナは、一度に多数の接続を開き、クラスターを飽和させます。

代わりに、レプリカセットとして Amazon DocumentDB クラスターに接続し、レプリカインスタンスに読み取りを分散できます。その後、クラスターで使用できる接続とカーソルの数をそれぞれ 13,500 と 1,350 に実質的に 3 倍にできます。クラスターにインスタンスを追加すると、読み取りワークロードの接続とカーソルの数が増えるだけです。クラスターへの書き込みの接続数を増やす必要がある場合は、インスタンスサイズを大きくすることをお勧めします。

注記

の接続数 largexlarge、および 2xlarge インスタンスサイズは4.500まで増加。のインスタンスあたりの最大接続数 4xlarge インスタンス以上は4.500です。インスタンスタイプごとの制限の詳細については、「」を参照してください。インスタンスの制限.

通常、 secondary。 これは、クラスタにレプリカ・インスタンスがない場合、読み取りが失敗するためです。たとえば、1 つのプライマリと 1 つのレプリカを持つ 2 つのインスタンスの Amazon DocumentDB クラスターがあるとします。レプリカに問題がある場合、secondary に設定されている接続プールからの読み取りリクエストは失敗します。以下の利点: secondaryPreferred クライアントが接続する適切なレプリカ・インスタンスが見つからない場合は、読み取りのためにプライマリにフォールバックします。

複数の接続プール

シナリオによっては、アプリケーションの読み込みに、書き込み後読み込み整合性が必要です。これは、 のプライマリインスタンスからのみ提供できます。Amazon DocumentDB. このようなシナリオでは、2 つのクライアント接続プールを作成できます。1 つは書き込み用、もう 1 つは書き込み後読み込み整合性を必要とする読み込み用です。そのためには、コードは次のようになります。

## Create a MongoDB client, ## open a connection to Amazon DocumentDB as a replica set and specify the readPreference as primary clientPrimary = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=primary') ## Create a MongoDB client, ## open a connection to Amazon DocumentDB as a replica set and specify the readPreference as secondaryPreferred secondaryPreferred = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')

もう 1 つのオプションは、1 つの接続プールを作成し、特定のコレクションの読み込み設定を上書きすることです。

##Specify the collection and set the read preference level for that collection col = db.review.with_options(read_preference=ReadPreference.SECONDARY_PREFERRED)

Summary

クラスター内のリソースを有効に使用するために、レプリカセットモードを使用してクラスターに接続することをお勧めします。アプリケーションに適している場合は、レプリカインスタンスに読み取りを分散することで、アプリケーションの読み取りをスケーリングできます。