一,分片
1,启动shard、config、mongos节点
(1),启动需要分片的节点
启动3个mongodb的实例
mongod --shardsvr --dbpath=/usr/local/mongodb/data1 --logpath=/usr/local/mongodb/log/data1.log --port=27081 --fork
mongod --shardsvr --dbpath=/usr/local/mongodb/data2 --logpath=/usr/local/mongodb/log/data2.log --port=27082 --fork
mongod --shardsvr --dbpath=/usr/local/mongodb/data3 --logpath=/usr/local/mongodb/log/data3.log --port=27083 --fork
(2),启动config
启动1个mongodb的实例,这里其实也是普通的DB,不过是新建了config库,里面保存了路由的信息
mongod --configsvr --dbpath=/usr/local/mongodb/config --logpath=/usr/local/mongodb/log/config.log --port=27001 --fork
(3),启动mongos
这里启动一个mongos进程,用来做数据的路由,访问的入口,而数据是保存在config里的。
mongos --configdb 10.1.2.197:27001 --logpath=/usr/local/mongodb/log/configdb.log --port=27002 --fork
也可以使用配置文件启动
(1),启动需要分片的节点
(2),启动config
(3),启动mongos
配置文件
2,配置分片
(1),进入mongos
mongo admin --port 27002
(2),用addshard添加到路由器中
db.runCommand({addshard:"10.1.2.197:27081"})
db.runCommand({addshard:"10.1.2.197:27082"})
db.runCommand({addshard:"10.1.2.197:27083"})
(3),指定分片的数据库
db.runCommand({"enablesharding":"userdb"})
(4),指定分片的键
db.runCommand({shardcollection:"userdb.order",key:{_id:1}})
3,查看状态
db.printShardingStatus()
第一:shards 从图中可以看到:分成三片了,shard0000、shard0001、shard0002。
第二:databases:partitioned表示是否分区,可以看到userdb已分区。
第三:chunks:分成了一段。都在shard0000。
db.order.stats()
4,测试
mongos> for(var i =1;i<10000;i++){ db.order.insert({id:100+i,name:"name"+i,age:i}) }
可以看到,自动分片的结果并不是平均的。