MongoDBスライス導入の実践
6678 ワード
この記事では、MongoDB高可用性モードの導入手順を記録します.その他の導入方法については、前の記事を参照してください.
まず機械を用意して、私はここで会社のクラウドプラットフォームで3台のDB serverを作成して、ipはそれぞれ10.199.14.84、10.199.14.89、10.199.14.90です.
mongodbの最新の安定バージョンをそれぞれインストールします.
ソフト接続をしたり、公式の方法でmongo shellを環境変数に追加したりします.
データを格納するディレクトリを個別に作成します.
起動configサーバを別々に構成するには、次の手順に従います.
configサービスがすべて起動したことを確認した後、ルーティングサーバ(mongos)を起動します.
それぞれ配置して各スライスコピーセットを起動し、ここでコピーセット名はそれぞれ
次に、各物理マシンにプライマリノード、レプリカノード、および仲裁ノードがあると仮定するレプリカセットを構成します.
shard 1の設定(登録84、マスターノードが明示的に指定されていない場合、登録されたマシンマスターノードが選択されます):
shard 2の構成(ログイン89):
shard 3の構成(ログイン90):
次に、ルーティングをスライスクラスタ構成に設定し、84と仮定して1台のマシンに勝手にログインします.
構成されたshardを表示するには、次の手順に従います.
結果:
このうち仲裁(ARBITER)ノードは列挙されていない.
スライスをテストします.
dbtestが既に存在する場合は、
一定時間経過後、運転
ここでスライスは有効になっているが,割り当てが不均一であるだけで,すべてのデータがshard 2に存在していることがわかる.スライスkeyの選択ポリシーは、公式ドキュメントを参照できます.2.4リリースでは、hashed shard keyアルゴリズムを使用して、ドキュメントの均一な分布を保証します.
hashedアルゴリズムを使用した後、同じテストを行い、挿入されたデータはほぼ均一に分布します.
詳細については、MongoDB Shardingを参照してください.
アプリケーションでは、
本編元住所:https://github.com/chemdemo/chemdemo.github.io/issues/9
まず機械を用意して、私はここで会社のクラウドプラットフォームで3台のDB serverを作成して、ipはそれぞれ10.199.14.84、10.199.14.89、10.199.14.90です.
mongodbの最新の安定バージョンをそれぞれインストールします.
bash
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.12.tgz tar -xzvf mongodb-linux-x86_64-2.4.12.tgz mv mongodb-linux-x86_64-2.4.12 /usr/lib
ソフト接続をしたり、公式の方法でmongo shellを環境変数に追加したりします.
bash
ln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongo /usr/bin/mongo ln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongos /usr/bin/mongos ln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongod /usr/bin/mongod
データを格納するディレクトリを個別に作成します.
bash
mkdir -p /data/mongodb && cd /data/mongodb/ && mkdir -p conf/data conf/log mongos/log shard{1..3}/data shard{1..3}/log
起動configサーバを別々に構成するには、次の手順に従います.
bash
mongod --configsvr --dbpath /data/mongodb/conf/data --port 27100 --logpath /data/mongodb/conf/confdb.log --fork --directoryperdb
configサービスがすべて起動したことを確認した後、ルーティングサーバ(mongos)を起動します.
bash
mongos --configdb 10.199.144.84:27100,10.199.144.89:27100,10.199.144.90:27100 --port 27000 --logpath /data/mongodb/mongos/mongos.log --fork
それぞれ配置して各スライスコピーセットを起動し、ここでコピーセット名はそれぞれ
shard1
、shard2
、shard3
:bash
mongod --shardsvr --replSet shard1 --port 27001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --directoryperdb --fork mongod --shardsvr --replSet shard2 --port 27002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --directoryperdb --fork mongod --shardsvr --replSet shard3 --port 27003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --directoryperdb --fork
次に、各物理マシンにプライマリノード、レプリカノード、および仲裁ノードがあると仮定するレプリカセットを構成します.
shard 1の設定(登録84、マスターノードが明示的に指定されていない場合、登録されたマシンマスターノードが選択されます):
bash
mongo --port 27001 use admin rs.initiate({ _id: 'shard1', members: [ {_id: 84, host: '10.199.144.84:27001'}, {_id: 89, host: '10.199.144.89:27001'}, {_id: 90, host: '10.199.144.90:27001', arbiterOnly: true} ] });
shard 2の構成(ログイン89):
bash
mongo --port 27001 use admin rs.initiate({ _id: 'shard2', members: [ {_id: 84, host: '10.199.144.84:27002', arbiterOnly: true}, {_id: 89, host: '10.199.144.89:27002'}, {_id: 90, host: '10.199.144.90:27002'} ] });
shard 3の構成(ログイン90):
bash
mongo --port 27001 use admin rs.initiate({ _id: 'shard3', members: [ {_id: 84, host: '10.199.144.84:27002'}, {_id: 89, host: '10.199.144.89:27002', arbiterOnly: true}, {_id: 90, host: '10.199.144.90:27002'} ] });
次に、ルーティングをスライスクラスタ構成に設定し、84と仮定して1台のマシンに勝手にログインします.
bash
mongo --port 27000 use admin db.runCommand({addShard: 'shard1/10.199.144.84:27001,10.199.144.89:27001,10.199.144.90:27001'}); db.runCommand({addShard: 'shard2/10.199.144.84:27002,10.199.144.89:27002,10.199.144.90:27002'}); db.runCommand({addShard: 'shard3/10.199.144.84:27003,10.199.144.89:27003,10.199.144.90:27003'});
構成されたshardを表示するには、次の手順に従います.
bash
mongo --port 27000 use admin db.runCommand({listshards: 1});
結果:
bash
{ "shards" : [ { "_id" : "shard1", "host" : "shard1/10.199.144.84:27001,10.199.144.89:27001" }, { "_id" : "shard2", "host" : "shard2/10.199.144.89:27002,10.199.144.90:27002" }, { "_id" : "shard3", "host" : "shard3/10.199.144.90:27003,10.199.144.84:27003" } ], "ok" : 1 }
このうち仲裁(ARBITER)ノードは列挙されていない.
スライスをテストします.
bash
mongo --port 27000 use admin db.runCommand({enablesharding: 'dbtest'}); db.runCommand({shardcollection: 'dbtest.coll1', key: {id: 1}}); use dbtest; for(var i=0; i<10000; i++) db.coll1.insert({id: i, s: 'str_' + i});
dbtestが既に存在する場合は、
id
インデックスが確立されていることを確認する必要があります!一定時間経過後、運転
db.coll1.stats()
明示スライス状態:bash
{ "sharded" : true, "ns" : "dbtest.coll1", "count" : 10000, ... "shards" : { "shard1" : { "ns" : "dbtest.coll1", "count" : 0, "size" : 0, ... }, "shard2" : { "ns" : "dbtest.coll1", "count" : 10000, "size" : 559200, ... } } ... }
ここでスライスは有効になっているが,割り当てが不均一であるだけで,すべてのデータがshard 2に存在していることがわかる.スライスkeyの選択ポリシーは、公式ドキュメントを参照できます.2.4リリースでは、hashed shard keyアルゴリズムを使用して、ドキュメントの均一な分布を保証します.
bash
mongo --port 27000 use admin sh.shardCollection('dbtest.coll1', {id: 'hashed'});
hashedアルゴリズムを使用した後、同じテストを行い、挿入されたデータはほぼ均一に分布します.
bash
{ "sharded" : true, "ns" : "dbtest.coll1", "count" : 10000, ... "shards" : { "shard1" : { "ns" : "dbtest.coll1", "count" : 3285, "size" : 183672, ... }, "shard2" : { "ns" : "dbtest.coll1", "count" : 3349, "size" : 187360, ... }, "shard3" : { "ns" : "dbtest.coll1", "count" : 3366, "size" : 188168, ... } } }
詳細については、MongoDB Shardingを参照してください.
アプリケーションでは、
MongoClient
db接続を作成します.javascript
MongoClient.connect('mongodb://10.199.144.84:27000,10.199.144.89:27000,10.199.144.90:27000/dbtest?w=1', function(err, db) { ; });
本編元住所:https://github.com/chemdemo/chemdemo.github.io/issues/9