MongoDBシャードクラスターは、複数のサーバーまたはシャードにデータを配布することにより、大きなデータセットを水平にスケーリングするための強力な方法を提供し、データベースが高スループットと大量のデータを効率的に処理できるようにします。
MongoDBシャードクラスターは、主に3つの主要なコンポーネント、シャード、構成サーバー、およびMongosルーターで構成されています。各シャードは、クラスターのデータのサブセットを含むレプリカセットです。レプリカセットにより、各シャードのデータのデータ冗長性と高可用性が保証されます。構成サーバーは、メタデータとクラスターに関する構成の詳細を保存します。これには、データのチャンクのマッピングが含まれています。 Mongosは、クライアントアプリケーションとインターフェイスし、Shardキーに基づいて適切なシャードにクエリを向けるルーティングサービスとして機能します。
MongoDBのシャードは、選択したシャードキーを介してシャード全体にデータを分割することにより、水平スケーリングを可能にするように設計されています。このパーティション化により、シャード間で均等に分布したデータチャンクが作成され、MongoDBが読み取りと書き込みの負荷を広げることができます。複合シャードキーのシャードキーまたは接頭辞を含むクエリは、Mongosによって特定のシャードに効率的にルーティングし、クエリのオーバーヘッドを削減し、パフォーマンスを向上させることができます。クエリにShardキーが含まれていない場合、Mongosはクエリをすべてのシャードにブロードキャストする場合がありますが、これは効率が低くなります。
クラスター内の破片はスケーラブルです。ダウンタイムなしでデータボリュームまたはクエリ負荷の成長に対応するために、追加のシャードを動的に追加できます。各シャードは、フォールトトレランスを確保するためのレプリカセットであり、クラスター設計全体が高可用性をサポートしています。 MongoDBは自動的にデータをバランスし、必要に応じてデータチャンクを再配布して、破片間で均等なワークロードを維持します。
構成サーバークラスターのメタデータを管理し、クラスターの構造とデータ分布に関する情報を保存する上で重要な役割を果たします。構成サーバーは、高可用性のためにレプリカセットとして展開する必要があります。それらは、メタデータをローカルにキャッシュしてクエリを効率的にルーティングするMongosルーターと同期します。構成サーバー内のメタデータの一貫した状態は、シャードクラスターの正しい操作に不可欠です。
Mongosインスタンスは、クライアントアプリケーションとシャードクラスターの間のインターフェイスレイヤーを提供するクエリルーターとして機能します。それらは、構成サーバーのメタデータに基づいて正しいシャードに操作をルーティングすることにより、シャード環境の複雑さを抽象化します。複数のMongosインスタンスを展開してロードバランスと高可用性のために展開でき、ネットワークレイテンシを減らすためにアプリケーションサーバーの近くに配置する必要があります。
シャードクラスターの重要な側面は、シャードキーの選択です。シャードキーは、データの分割方法を管理し、クラスターのパフォーマンスとデータ分布に直接影響します。適切なシャードキーを選択するには、ワークロードを分析して、シャード全体で読み取り操作の均等な配布を確保する必要があります。特定のシャードキーを使用してシャードコレクションが作成されると、シャードキーの変更は複雑であり、通常、時間のかかるデータ移行プロセスが含まれます。したがって、慎重なシャードキーの選択が重要です。
生産環境では、シェードクラスターの優れたプラクティスには、複数のデータセンターのレプリカセットとして構成サーバーとシャードの展開が含まれ、障害のトレランスと高可用性を確保することが含まれます。各シャードは、3ノードのレプリカセットにすることをお勧めします。クラスターには少なくとも2つの破片が必要ですが、シングルシャードシャードクラスターが将来計画されている場合は使用できます。
シェルディングは、シェード全体の分散データストレージを介してストレージ制限を増やすことにより、データベース容量を改善します。また、読み取りと書き込みを配布することでパフォーマンスを向上させます。これにより、より高いスループットワークロードの処理が可能になります。さらに、シャードクラスターは、シャードの停止中に部分的な可用性を維持できます。影響を受けるシャードのデータはアクセスできない場合がありますが、クラスターは利用可能な破片でのサービスリクエストを継続します。
シャードクラスターでは、データはシャードキーによって定義された範囲内のチャンクに分割されます。 MongoDBは、データの分割方法に影響を与えるチャンクサイズを構成します。チャンク移行とリバランスプロセスは、クラスターによって自動的に処理され、データ分布と最適なパフォーマンスさえも維持されます。この自動バランスにより、単一のシャードがパフォーマンスボトルネックやストレージホットスポットになることはありません。
シャードクラスターは、ゾーン(タグとアウェアのシャード)もサポートしており、データをグループ化し、ゾーン関連に基づいて特定のシャードに限定できるようにします。この機能により、より制御されたデータのローカリティが可能になり、コンプライアンスまたは地理的配布要件に役立ちます。ゾーンには、シャードキー値の範囲が割り当てられており、データの配置をより詳細に制御するためのシャードに関連付けられています。
制限と運用上の考慮事項には、複数のシャードを管理し、運用上のオーバーヘッドの増加の複雑さが含まれます。コンポーネント間のネットワーク遅延と、構成サーバーメタデータとルーティングの維持のオーバーヘッドとルーティングは、適切に管理されていないとパフォーマンスに影響を与える可能性があります。複数のMongosルーターと構成サーバーを展開し、その健康を監視することは、パフォーマンスの劣化を避けるために不可欠です。 Mongosインスタンスの数は、過剰なMongosインスタンスが構成サーバーとの頻繁な通信とクラスターのパフォーマンスへの影響の可能性につながる可能性があるため、バランスが取れている必要があります。
MongoDB API用のAzure Cosmos DBなどのMongoDB Shardedクラスターのホストまたはマネージドバージョンのいくつかの制限は、シャードカウント、ストレージ、およびシャードまたはクラスターあたりのリソース制限を含む。これらのプラットフォーム固有の制限は異なり、プレミアムティアでは高くなる可能性があります。
全体として、MongoDBシャードクラスターは、複数のノードに透過的にデータと操作を分散し、パフォーマンス、フォールトトレランス、およびインテリジェントデータのパーティションとレプリカセットの展開を通じてスケーラビリティを確保することにより、大規模な成長データセットで最新のアプリケーションをスケーリングするための堅牢な基盤を提供します。