Sync all

Webエンジニアの気になる事。困った事もろもろ。

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の状態は徐々に変わっていきます。

因にシャーディングの設定は一度設定すると変更出来ないので要注意です。