Docs Menu
Docs Home
/
MongoDB Atlas
/

Atlas クラスターのサイズ設定と階層の選択

項目一覧

  • クラスターの自動スケーリング
  • メモリ
  • ネットワークトラフィック

重要

サーバーレスインスタンスで使用できない機能

サーバーレスインスタンスは現時点ではこの機能をサポートしていません。詳細については、 サーバーレスインスタンスの制限を参照してください。

正しい Atlas クラスター階層と構成を選択することは、MongoDB の本番デプロイを成功させるための重要なステップです。クラスターは後でいつでも変更できますが、データセットのサイズとネットワーク要件に基づいていくつか計算するだけで、初めから適切な構成を実現できます。

また、クラスターの使用状況に応じてクラスター階層、ストレージ容量、またはその両方を自動的にスケーリングするようにクラスターを構成して、クラスターに必要な手動メンテナンスを減らすこともできます。詳細については、 クラスターのオートスケーリングを参照してください。

注意

本番環境での使用には M30 以上のクラスターを推奨

本番環境には M30 以上のクラスターが推奨されています。M10 および M20 クラスターは、低トラフィックアプリケーションの実稼働環境として使用できます。 M10 および M20 で持続的な負荷がかかるクラスターでは、時間の経過とともにパフォーマンスが低下する可能性があります。

専有クラスターはクラスターのオートスケーリングをサポートします 。クラスター階層のオートスケーリングは、ユーザー インターフェイスで新しいクラスターを作成するとデフォルトで有効になります。 APIで新しいクラスタを作成する場合は、デフォルトで無効になります。 オートスケーリングを有効にすると、Atlas ではクラスターの使用状況に応じて、クラスター層、ストレージキャパシティー、またはその両方が自動的にスケーリングされます。 オートスケーリングにより、クラスターを現在のワークロードに適応させ、手動で最適化する必要性を減らすことができます。

  • クラスターストレージのスケーリングでは、ディスクキャパシティーの 90% が使用されると、クラスターストレージのキャパシティーが自動的に追加されます。この設定はデフォルトで有効になっており、クラスターが突然のデータの流入にいつでも対応できるようにしています。クラスターストレージのスケーリングをオプトアウトするには、Auto-scale セクションの Storage Scaling チェックボックスのチェックを外します。

  • クラスター階層のスケーリングでは、さまざまなクラスターメトリクスに応じてクラスター階層が自動的にスケールアップまたはスケールダウンされます。クラスター階層のオートスケーリングをオプトアウトするには、Auto-scale セクションの Cluster Tier Scaling チェックボックスをオフにします。

    Atlas がクラスターをオートスケールする方法をコントロールするには、以下を設定します。

    • クラスターが自動的にスケールアップできる最大のクラスター階層。デフォルトでは、この設定は現在のクラスター階層の次のクラスター階層に設定されています。

    • クラスターをスケールダウンできる最小のクラスター階層。デフォルトでは、この設定は現在のクラスター階層に設定されています。

メモリとは、Atlas クラスターの各 データを保持するノードで使用可能な物理RAMの合計を指します。例、 M30 標準レプリカセットは、3 データを保持するノードのそれぞれに 8 GBのRAMを使用して構成されます。

Atlasは WiredTiger ストレージ エンジン を使用します。

  • デフォルトでは、M40 以上のクラスターの場合、WiredTiger は物理 RAM の 50% 以上を WiredTiger キャッシュ専用にします。残りのメモリは、次の用途のために保留されています。

    • ソートや計算などのインメモリ操作

    • 基礎となるオペレーティング システムとその他のシステム サービス

  • デフォルトでは、M30 以下のクラスターの場合、WiredTiger により物理 RAM の 25% が WiredTiger キャッシュ専用として割り当てられます。

メモリ使用量について詳しくは「WiredTiger とメモリ使用量」を参照してください。

MongoDB では、最近使用したデータとインデックスの保持のために WiredTiger キャッシュが使用されます。ワーキングセットは、すべてのインデックスに、頻繁にアクセスされるドキュメントのセットを合わせたものです。ワーキングセットが RAM に収まる場合、MongoDB ではメモリからクエリに対応できるため、クエリの応答時間が最も短くなります。

ワーキングセットのサイズを見積もるには、db.stats() から取得した情報を使用して合計インデックススペースを算出した上で頻繁にアクセスされるデータスペースの割合を想定するか、前例に基づいてメモリ要件を見積もります。

Atlas サンプルデータセットを使用して、これらすべてのデータベースを単独の Atlas クラスターで実行するためのメモリ要件を計算します。次の JavaScript プログラムでは、クラスターのデータベース情報が返されます:

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

これらの要件を考慮すると、平均的なワーキングセットには 172 GB の RAM が必要になることが予想されます。

WiredTiger は物理 RAM の 50% を WiredTiger キャッシュ専用にするため、ワーキングセットを格納するために必要な物理 RAM の最小合計はワーキングセットの 2 倍になります。

この例では、WiredTiger キャッシュと 172 GB のワーキングセットを格納するために、少なくとも 344 GB の物理 RAM が必要です。次の表では適切な Atlas クラスター階層をまとめています。

サービスプロバイダー
クラスター階層の選択肢
ノート
Amazon Web Services
  • M300 384 GB RAM

  • M400 488 GB RAM

  • M700 768 GB RAM

M300 十分な RAM があり、より高いクラスター階層への垂直スケーリングの余地があります。
GCP
  • M300 360 GB RAM

M300 十分な RAM がありますが、垂直スケーリングが必要な場合に利用できる上位階層はありません。
Azure
  • M300 384 GB RAM

  • M400 432 GB RAM

M300 十分な RAM があり、より高いクラスター階層への垂直スケーリングの余地があります。

注意

256 GB RAM の Azure M200 など、十分な RAM のないクラスター階層を選択した場合は、シャーディングが必要です。

Atlas クラスターからのデータを消費するクラスターノード間およびクライアント間のすべてのネットワークトラフィックは、ネットワーク帯域幅に影響を与えます。クラスターのサイジングに関しては、クラスター上の任意のノードが処理することになるトラフィックの最大量を検討して、それを基に適切な Atlas クラスター階層を選択します。

クラスターからクライアント アプリケーションという下流へのデータ転送速度は、一定期間に返されたドキュメントの合計として計算できます。プライマリ ノードからのみ読み取る場合は、この計算のみを実行する必要があります。アプリケーションがセカンダリ ノードからも読み取る場合は、この数を読み取り操作を処理できるノードの数で割ることができます。

db.stats() メソッドを使用して、データベースの平均ドキュメント サイズを調べることができます。平均ドキュメントサイズ (avgObjSize) に、1 秒あたりに提供されるドキュメントの数を掛けて、必要な帯域幅を見積もります。

平均ドキュメントサイズ 10 KB

毎秒 100,000 ドキュメントを提供

10 KB * 100,000 = 1 GB/秒

Atlas インスタンスでは、上位階層ほど帯域幅速度が向上します。AWS によってサポートされるインスタンスでは、 M30 レベルで最大 10 ギガビット / 秒をを実現し、 M200 レベルでは最大 25 ギガビット / 秒を提供します。

1つの Atlas クラスターがサポートできるクライアント接続の数は、クラスター階層に応じて決まっています。 たとえば、 M30クラスターは最大3000の同時接続をサポートし、 M200クラスターは最大128 、 000の同時接続をサポートします。 詳細については、「接続制限とクラスター階層 」を参照してください。

戻る

プロダクション ノート