MongoDB搭建分片集
这里介绍如何在本地搭建MongoDB的副片集。首先创建3个目录:
mkdir rs0 rs1 rs2
然后启动3个终端各自进行相应的服务:
mongod --port 27017 --dbpath ../rs0 --replSet rs0 mongod --port 27018 --dbpath ../rs1 --replSet rs0 mongod --port 27019 --dbpath ../rs2 --replSet rs0
进入27017端口进行初始化操作:
use admin;
rs.initiate();
rs.add("localhost:27018")
rs.add("localhost:27019")
插入一条数据:
use demo;
db.username.insert({"name":"xxxx","age":20})
进入分片集比如27018中进行查看:
mongo --port 27018 rs.statusOk() use demo; db.username.find()
此时就可以看到主服务器写入的数据。
而分片集创建类似副片集,其过程为:
mongod --shardsvr --replSet rs0 --port 27017 --dbpath ../rs0 mongod --shardsvr --replSet rs0 --port 27018 --dbpath ../rs1
进行初始化:
> rs.initiate({_id:"rs0",members:[{_id:0,host:"localhost:27017"},{_id:1,host:"localhost:27018"}]})
{ "ok" : 1 }
进行配置服务器配置:
mongod --configsvr --replSet config --port 28021 --dbpath ../config1 mongod --configsvr --replSet config --port 28022 --dbpath ../config2 mongod --configsvr --replSet config --port 28023 --dbpath ../config3
再初始化配置服务器:
rs.initiate({_id:"config1",members:[{_id:0,host:"localhost:28021"},{_id:1,host:"localhost:28022"},{_id:2,host:"localhost:28023"}]})
创建mongos服务:
mongos --configdb config1/localhost:28021,localhost:28022,localhost:28023 --port 40000 mongo --port 40000
添加分片:
sh.addShard("rs0/localhost:27017,localhost:27018")
sh.enableSharding("demo")
sh.shardCollection("demo.username", {userId: "hashed"})
sh.shardCollection("demo.logs", {timestamp: 1})
创建数据并写入:
mongos> db.username.insertMany([{"name":"zhangsan","age":20,"userId":1},{"name":"lisi","age":25,"userId":2},{"name":"wangwu","age":21,"userId":3}])
db.username.getShardDistribution()
由于只有一个分片,因此数据不会切分。如果创建多个分片且大于指定大小就会触发分片操作。