我们组用mongodb已经一年度多了,这个实验是很久之前就记录在evernote了的,最近想建一个博客,所以就搬进来,可能有同学会搜到能有帮助吧。
mkdir -p /data/mongodata/shard1_0_pri && mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongod --port 11001 --dbpath /data/mongodata/shard1_0_pri --logpath /data/mongodata/dblog/shard1_0_pri --replSet shard1_0 --fork --shardsvr --logappend
mkdir -p /data/mongodata/shard1_1_pri && mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongod --port 13001 --dbpath /data/mongodata/shard1_1_pri --logpath /data/mongodata/dblog/shard1_1_pri --replSet shard1_1 --fork --shardsvr --logappend
mkdir -p /data/mongodata/conf1 && mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongod --port 9001 --dbpath /data/mongodata/conf1 --logpath /data/mongodata/dblog/conf1 --fork --logappend --oplogSize 1024 --configsvr --rest
【为什么连接上mongos可以设置shard的机器?答:因为mongos的启动需要指定一台已经启动的conf机器】
mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongos --port 27227 --configdb 192.168.45.232:9001 --logpath /data/mongodata/dblog/mongos1 --fork --maxConns 500 --chunkSize 128 --logappend --noAutoSplit
mkdir -p /data/mongodata/shard1_0_sed && mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongod --port 11002 --dbpath /data/mongodata/shard1_0_sed --logpath /data/mongodata/dblog/shard1_0_sed --replSet shard1_0 --fork --shardsvr --logappend
mkdir -p /data/mongodata/shard1_1_sed && mkdir -p /data/mongodata/dblog && numactl --interleave=all /usr/bin/mongodb/mongod --port 13002 --dbpath /data/mongodata/shard1_1_sed --logpath /data/mongodata/dblog/shard1_1_sed --replSet shard1_1 --fork --shardsvr --logappend
yyy@yyy-VirtualBox:~$ /usr/bin/mongodb/mongo 127.0.0.1:11001> config={_id:"shard1_0", members:[... {_id:0, host:"192.168.45.232:11001"},... {_id:1, host:"192.168.45.224:11002"}]}> rs.initiate(config)> rs.status() 过稍微一会就发现已经组成了shard了shard1_0:SECONDARY> rs.status() 现在已经组成shard了,而且光标前面也有了shard1_0:SECONDARY,在另外一台机器上也有>exit
yyy@yyy-VirtualBox:~$ /usr/bin/mongodb/mongo 127.0.0.1:13001> config={_id:"shard1_1", members:[... {_id:0, host:"192.168.45.232:13001"},... {_id:1, host:"192.168.45.224:13002"}]}> rs.initiate(config)> rs.status()shard1_1:PRIMARY> exit
9、接着我们要告知集群,哪个数据库是要做分片的yyy@yyy-VirtualBox:~$ /usr/bin/mongodb/mongo 127.0.0.1:27227mongos> use adminmongos> sh.addShard("shard1_0/192.168.45.232:11001,192.168.45.224:11002")mongos> sh.addShard("shard1_1/192.168.45.232:13001,192.168.45.224:13002")接着打印一下shard列表是什么样子的,发现确实已经加到集群里面了,mongos已经感知到shard的存在了:mongos> db.runCommand({"listshards":1}){"shards" : [{"_id" : "shard1_0","host" : "shard1_0/192.168.45.224:11002,192.168.45.232:11001"},{"_id" : "shard1_1","host" : "shard1_1/192.168.45.224:13002,192.168.45.232:13001"}],"ok" : 1}
mongos> db.runCommand({enableSharding:"user"})
mongos> db.runCommand( { shardCollection: "user.user", key: {"_id":1} })
13、注意在机器1上面mongos> db.user.insert({"_id":0, "name":"jack"})mongos> db.user.insert({"_id":10000, "name":"john"})mongos> db.user.insert({"_id":-100, "name":"jack-100"})在机器2上面,进入一个mongodyyy@yyy-VirtualBox:~$ /usr/bin/mongodb/mongo 127.0.0.1:13002shard1_1:SECONDARY> db.user.find(){ "_id" : 0, "name" : "jack" }{ "_id" : 10000, "name" : "john" }{ "_id" : 100, "name" : "jack+100" }在机器2上面,进入另外一个mongodyyy@yyy-VirtualBox:~$ /usr/bin/mongodb/mongo 127.0.0.1:11002shard1_0:SECONDARY> db.user.find(){ "_id" : -100, "name" : "jack-100" }果然分片成功!
在rs中,如果报错 error: { "$err" : "not master and slaveOk=false", "code" : 13435 }则执行 db.getMongo().setSlaveOk()