MongoDB シャーディング
シャーディング
MongoDB には別のタイプのクラスターがあります。これはシャーディング テクノロジであり、MongoDB のデータ量の大幅な増加のニーズを満たすことができます。
MongoDB が大量のデータを保存する場合、1 台のマシンではデータを保存したり、許容可能な読み取りおよび書き込みスループットを提供したりするのに十分ではない可能性があります。現時点では、データベース システムがより多くのデータを保存および処理できるように、データを複数のマシンに分割できます。
シャーディングを使用する理由
すべての書き込み操作をプライマリノードに複製します
レイテンシーに敏感なデータはプライマリノードでクエリされます
単一のレプリカセットは12ノードに制限されています
古代リクエスト量が膨大な場合、メモリが発生する可能性があります。
ローカルディスクが不足しています
垂直拡張はコストがかかります
MongoDBのシャーディング
次の図は、MongoDBのシャードクラスター構造の分布を示しています:
上の図では3 つの主要なコンポーネントは次のとおりです:
シャード:
は、実際の運用環境では、複数のマシンとレリカ セットが単一のシャード サーバーの役割を引き受けることができます。ホスト障害のポイント
Config Server:
mongod インスタンス。チャンク情報を含む ClusterMetadata 全体が保存されます。
クエリルーター:
フロントエンドルーティング、クライアントはここからアクセスし、クラスター全体を単一のデータベースのように見せ、フロントエンドアプリケーションを透過的に使用できます。
シャードインスタンス
シャード構造のポート分布は次のとおりです:
Shard Server 1:27020 Shard Server 2:27021 Shard Server 3:27022 Shard Server 4:27023 Config Server :27100 Route Process:40000
ステップ 1: シャードサーバーを開始します
[root@100 /]# mkdir -p /www/mongoDB/shard/s0 [root@100 /]# mkdir -p /www/mongoDB/shard/s1 [root@100 /]# mkdir -p /www/mongoDB/shard/s2 [root@100 /]# mkdir -p /www/mongoDB/shard/s3 [root@100 /]# mkdir -p /www/mongoDB/shard/log [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork .... [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork
ステップ 2: Config Server を開始します
[root@100 /]# mkdir -p /www/mongoDB/shard/config [root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork
注:ここでは、-shardsvr パラメーターと configsvr パラメーターを追加せずに、通常の mongodb サービスを開始するのとまったく同じように開始できます。これら 2 つのパラメータの機能は起動ポートを変更することであるため、ポートを自分で指定するだけで済みます。
ステップ 3: ルートプロセスを開始します
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
mongos の起動パラメータでは、chunkSize 項目を使用してチャンクのサイズを指定します。単位は MB です。デフォルトのサイズは 200MB です。
ステップ 4: シャーディングを構成します
次に、MongoDB シェルを使用して mongos にログインし、シャード ノードを追加します
[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000 MongoDB shell version: 2.0.7 connecting to: 127.0.0.1:40000/admin mongos> db.runCommand({ addshard:"localhost:27020" }) { "shardAdded" : "shard0000", "ok" : 1 } ...... mongos> db.runCommand({ addshard:"localhost:27029" }) { "shardAdded" : "shard0009", "ok" : 1 } mongos> db.runCommand({ enablesharding:"test" }) #设置分片存储的数据库 { "ok" : 1 } mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}}) { "collectionsharded" : "test.log", "ok" : 1 }
ステップ 5: 通常の mongo データベースに接続するのと同じように、データベースをインターフェイス 40000