MongoDBシャーディング
MongoDB Sharding 手順
mongodの起動
mongod --shardsvr --port 27018 --dbpath /data/mongo/sharding --logpath /var/log/mongo/mongod-sharding.log --fork
基本的にポートは27018が一般的。
numactl --interleave=all をサーバー構成によっては前につける場合が有ります。
config serverの起動
mongod --configsvr --port 27019 --dbpath /data/mongo/config --logpath /var/log/mongo/config.log --fork
基本的にポートは27019が一般的。
mongod同様 numactl --interleave=all をサーバー構成によっては前につける場合が有ります。
mongosの起動
mongos --configdb hoge01.jp:27019,hoge02.jp:27019,hoge03.jp:27019 --port 27017 --logpath /var/log/mongo/mongos.log --fork
ポートは27017がMongoのデフォルトですが、お好みでどうぞ。
mongod同様 numactl --interleave=all をサーバー構成によっては前につける場合が有ります。
※サーバー間で時間がずれているとMongosが起動が出来ないので注意
--configd
config serverのhostを指定
Shardingの設定
mongosに接続
$ mongo -port 27017
admin DBに切り替え
>use admin
shard設定
sh.addShard("hoge01.jp:27018") sh.addShard("hoge02.jp:27018") sh.addShard("hoge03.jp:27018")
shardingの有効化
> sh.enableSharding("test")
CollectionにShardKeyを設定
今回はInsexをkeyに設定
> db.runCommand({shardcollection:"test.hogehoge",key:{"_id" : 1}})
設定が出来ると
--- Sharding Status --- sharding version: { "_id" : 1, "version" : 4, "minCompatibleVersion" : 4, "currentVersion" : 5, "clusterId" : ObjectId("534b467a62879b5378416f51") } shards: { "_id" : "shard0000", "host" : "hoge01.jp:27018" } { "_id" : "shard0001", "host" : "hoge03.jp:27018" } { "_id" : "shard0002", "host" : "hoge03.jp:27018" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } test.hogehoge shard key: { "_id" : 1 } chunks: shard0001 17 shard0002 17 shard0000 417 too many chunks to print, use verbose if you want to force print
これでシャーディングが動いているのでchunksの状態は徐々に変わっていきます。
因にシャーディングの設定は一度設定すると変更出来ないので要注意です。