正しい Atlas クラスター階層と構成を選択することは、MongoDB の本番デプロイを成功させるための重要なステップです。クラスターは後でいつでも変更できますが、データセットのサイズとネットワーク要件に基づいていくつか計算するだけで、初めから適切な構成を実現できます。
このページのガイダンスのほとんどは、Atlas Coreクラスターに適用されます。Atlas Infiniteクラスターに異なる適用するがされるセクションには、その旨が記載されています。
You can also configure your cluster to automatically scale its cluster tier, storage capacity, or both in response to cluster usage, thereby reducing the manual maintenance required for your cluster. To learn more, see Cluster Auto-Scaling.
Atlas Infinite クラスターでは、クラスター階層は、ストレージ IOPS とストレージ スループットの値も固定します。これらの値は、保存するデータ量が増えても変わりません。各階層のストレージのパフォーマンスを検討するには、Atlas Infinite Storage IOPs とスループット値 (クラスター階層ごと) を参照してください。
注意
本番環境での使用には M30 以上のクラスターを推奨
M30 以上のクラスターが本番環境には推奨されています。M10 と M20 クラスターをトラフィックの少ないアプリケーションの本番環境としてご利用いただけます。M10 および M20 階層で持続的な負荷がかかるクラスターでは、時間の経過とともにパフォーマンスが低下する可能性があります。
クラスターの自動スケーリング
専有クラスターはクラスターのオートスケーリングをサポートしています。Atlas Core クラスターでは、Atlas UI でクラスターを作成するとクラスター階層のオートスケーリングがデフォルトで有効になり、Atlas Administration API で作成するとデフォルトで無効になります。オートスケーリングを有効にすると、Atlas はクラスターの使用状況に応じて、クラスター階層、および Atlas Core クラスターの場合はストレージ容量を自動的に増やします。オートスケーリングにより、クラスターを現在のワークロードに適応させ、手動で最適化する必要性を減らすことができます。
クラスター階層のスケーリングでは、さまざまなクラスターメトリクスに応じてクラスター階層が自動的にスケールアップまたはスケールダウンされます。クラスター階層のオートスケーリングをオプトアウトするには、Auto-scale セクションの Cluster Tier Scaling チェックボックスをオフにします。
Atlas がクラスターをオートスケールする方法をコントロールするには、以下を設定します。
クラスターが自動的にスケールアップできる最大のクラスター階層。デフォルトでは、この設定は現在のクラスター階層の次のクラスター階層に設定されています。
クラスターをスケールダウンできる最小のクラスター階層。デフォルトでは、この設定は現在のクラスター階層に設定されています。
クラスター ストレージ 拡大 は Atlas Core クラスターに適用されます。ディスク容量の 90% が使用されると、クラスターストレージのキャパシティーが自動的に増加します。この設定はデフォルトで有効になっており、クラスターが突然のデータ流入に常に対応できるようにしています。クラスターストレージの拡大をオプトアウトするには、Auto-scale セクションの Storage Scaling チェックボックスのチェックを外します。
Atlas Infinite clusters don't have Atlas Core storage auto-scaling. Atlas Infinite storage is decoupled from compute and grows independently of the cluster tier. To learn more, see Compute Auto-Scaling on Atlas Infinite.
メモリ
Memory refers to the total physical RAM available on each data bearing node of your Atlas cluster. For example, an M30 Atlas Core cluster standard replica set is configured with 8 GB RAM on each of the 3 data bearing nodes.
Atlas Infinite クラスターは、Atlas Core クラスターと同じく、各クラスター階層で同じRAM量を持っています。ただし、ノード数が異なり、ストレージ層が分離されています。学ぶ詳細は、「MongoDB Atlas Infiniteのアーキテクチャ」を参照してください。
Atlas uses the WiredTiger storage engine.
デフォルトでは、M40 以上のクラスターの場合、WiredTiger は物理 RAM の 50% 以上を WiredTiger キャッシュ専用にします。残りのメモリは、次の用途のために保留されています。
ソートや計算などのインメモリ操作
基礎となるオペレーティング システムとその他のシステム サービス
デフォルトでは、M30 以下のクラスターの場合、WiredTiger により物理 RAM の 25% が WiredTiger キャッシュ専用として割り当てられます。
To learn more about memory use, see WiredTiger and Memory Use.
MongoDB では、最近使用したデータとインデックスの保持のために WiredTiger キャッシュが使用されます。ワーキングセットは、すべてのインデックスに、頻繁にアクセスされるドキュメントのセットを合わせたものです。ワーキングセットが RAM に収まる場合、MongoDB ではメモリからクエリに対応できるため、クエリの応答時間が最も短くなります。
To estimate the size of the working set, you can either perform a calculation using the information obtained from db.stats() for the total index space and assume a percentage of your data space will be accessed frequently, or you can estimate your memory requirements based on educated assumptions.
例: Atlas サンプルデータセット
Using the Atlas sample data sets, we will calculate the memory requirements to run all these databases in a single Atlas cluster. The following JavaScript program returns database information for your cluster:
var totalIndexSize = 0; var totalDataSize = 0; var reservedDBs = ["admin","config","local"]; // Switch to admin database and get list of databases. db = db.getSiblingDB("admin"); dbs = db.runCommand({ "listDatabases": 1 }).databases; // Iterate through each database and get its stats. dbs.forEach(function(database) { if (reservedDBs.includes(database.name)) return; db = db.getSiblingDB(database.name); print("Obtaining stats for " + database.name); var stats = db.stats(); totalIndexSize += (stats.indexSize / (1024*1024*1024)) ; totalDataSize += (stats.dataSize / (1024*1024*1024)) ; }); print ("Total data size in GB: " + totalDataSize.toFixed(2)); print ("Total index size in GB: " + totalIndexSize.toFixed(2));
このプログラムでは次の結果が返されます。
Obtaining stats for sample_airbnb Obtaining stats for sample_geospatial Obtaining stats for sample_mflix Obtaining stats for sample_supplies Obtaining stats for sample_training Obtaining stats for sample_weatherdata Total data size in GB: 0.32 Total index size in GB: 0.02
これらのデータベースを完全にメモリ内で実行するには、少なくとも 0.68 GB の物理 RAM が必要です。WiredTiger が物理 RAM の 50% を使用し、ワーキングセットをメモリに収めるために少なくとも 0.34 GB が必要となるためです。
実際の本番クラスターでは、データとインデックスのサイズがはるかに大きくなることがあり、データセット全体とインデックスをメモリ内で動作させるのは現実的ではないか、ビジネス上またはパフォーマンス上の要件にはならない場合もあります。別のシナリオを見てみます。
例:モバイルアプリ
ある人気のモバイルゲームには 512 GB のデータと 32 GB のインデックスがありますゲームの内部システムデータが 16 GB を占め、残りはプレイヤーのプロファイルデータです。プレイヤーがゲーム内でアクティブである間は、プレイヤーのプロファイルはメモリ内に存在している必要があります。どの時点でも、全プレイヤーのうち約 25 % がアクティブです。システムデータは常時使用されており、ゲームパフォーマンスを最適に保つため RAM 内に完全に収める必要があります。クエリの応答時間を最短に保つため、インデックスも全て RAM に収める必要があります。メモリのサイズ設定は次のとおりです。
データ | RAM要件 | WiredTiger キャッシュ用の RAM |
|---|---|---|
システム:16 GB | RAM 100 % | 16 GB |
Index: 32 GB | RAM 100 % | 32 GB |
プレイヤープロファイル:496 GB | RAM 25 % | 124 GB |
Given these requirements, you can expect an average working set to require 172 GB of RAM.
WiredTiger は物理 RAM の 50% を WiredTiger キャッシュ専用にするため、ワーキングセットを格納するために必要な物理 RAM の最小合計はワーキングセットの 2 倍になります。
この例では、WiredTiger キャッシュと 172 GB のワーキングセットを格納するために、少なくとも 344 GB の物理 RAM が必要です。次の表では適切な Atlas クラスター階層をまとめています。
サービスプロバイダー | クラスター階層の選択肢 | ノート |
|---|---|---|
Amazon Web Services |
|
|
GCP |
|
|
Azure |
|
|
注意
256 GB RAM の Azure M200 など、十分な RAM のないクラスター階層を選択した場合は、シャーディングが必要です。
ネットワークトラフィック
Atlas クラスターからのデータを消費するクラスターノード間およびクライアント間のすべてのネットワークトラフィックは、ネットワーク帯域幅に影響を与えます。クラスターのサイジングに関しては、クラスター上の任意のノードが処理することになるトラフィックの最大量を検討して、それを基に適切な Atlas クラスター階層を選択します。
Downstream data transfer rates from your cluster to client applications can be calculated as the sum of the total documents returned over a period of time. If you are reading only from the primary node, this is the only calculation you need to do. If your applications read from secondary nodes as well, you can divide this number by the number of nodes that can serve read operations.
You can find the average document size for a database with the db.stats() method. Multiply the average document size (avgObjSize) by the number of documents served per second to estimate your bandwidth requirements.
例
平均ドキュメントサイズ 10 KB
毎秒 100,000 ドキュメントを提供
10 KB * 100,000 = 1 GB/秒
Atlas インスタンスでは、上位階層ほど帯域幅速度が向上します。AWS によってサポートされるインスタンスでは、 M30 レベルで最大 10 ギガビット / 秒をを実現し、 M200 レベルでは最大 25 ギガビット / 秒を提供します。
前述の数値は Atlas Core クラスターに適用されます。Atlas Infinite クラスターでは、ストレージ IOPS およびストレージ スループットは各クラスター階層で固定されています。階層ごとの値については、Atlas Infinite ストレージ IOPs and スループット Values per クラスター階層を参照してください。Atlas Infinite クラスターには、読み取り専用ノードまたは分析ノードを追加しない限り、1 つのスタンバイ ノードも含まれています。読み取り帯域幅を見積もる場合は、読み取りに勤めることができるノードで合計数値を分割します。
接続
1つの Atlas クラスターがサポートできるクライアント接続の数は、クラスター階層に応じて決まっています。 たとえば、 M30クラスターは最大3000の同時接続をサポートし、 M200クラスターは最大128 、 000の同時接続をサポートします。 詳細については、「接続制限とクラスター階層 」を参照してください。
Atlas Infinite はパブリックプレビューで M10 から M60 のクラスター階層をサポートしているため、M200 の数値は Atlas Infinite クラスターには適用されません。