mongodb版本为3.6.21
分片是分布式存储的体现,数据存储于不同的复制集,
可以处理更加庞大的数据。
每个分片就是一个复制集,每个分片之间的数据不同,
数据分布于各个分片之间。
分片主要包含有三个组件
shard:实际存储数据的模块;
config-server:存储分片的集群信息;
router-server:前段路由,提供外部访问入口。
配置文件
D:\mongoShards\shard1\config\rs1.conf
dbpath=D:\mongoShards\shard1\data\db\rs1
logpath=D:\mongoShards\shard1\log\rs1.log
journal=true
port=10001
replSet=shard1
D:\mongoShards\shard1\config\rs2.conf
dbpath=D:\mongoShards\shard1\data\db\rs2
logpath=D:\mongoShards\shard1\log\rs2.log
journal=true
port=10002
replSet=shard1
数据目录
D:\mongoShards\shard1\data\db\rs1
D:\mongoShards\shard1\data\db\rs2
日志目录
D:\mongoShards\shard1\log
节点1
mongod --shardsvr --config D:\mongoShards\shard1\config\rs1.conf
mongod --shardsvr --config D:\mongoShards\shard1\config\rs2.conf
mongo --port 10001
rs.initiate()
rs.add("localhost:10002")
配置文件
D:\mongoShards\shard2\config\rs1.conf
dbpath=D:\mongoShards\shard2\data\db\rs1
logpath=D:\mongoShards\shard2\log\rs1.log
journal=true
port=20001
replSet=shard2
D:\mongoShards\shard2\config\rs2.conf
dbpath=D:\mongoShards\shard2\data\db\rs2
logpath=D:\mongoShards\shard2\log\rs2.log
journal=true
port=20002
replSet=shard2
数据目录
D:\mongoShards\shard2\data\db\rs1
D:\mongoShards\shard2\data\db\rs2
日志目录
D:\mongoShards\shard2\log
节点1
mongod --shardsvr --config D:\mongoShards\shard2\config\rs1.conf
节点2
mongod --shardsvr --config D:\mongoShards\shard2\config\rs2.conf
mongo --port 20001
rs.initiate()
rs.add("localhost:20002")
配置文件
D:\mongoShards\configsvr\config\config-server1.config
dbpath=D:\mongoShards\configsvr\data\db\server1
logpath=D:\mongoShards\configsvr\log\server1.log
journal=true
port=30001
replSet=config-server
D:\mongoShards\configsvr\config\config-server2.config
dbpath=D:\mongoShards\configsvr\data\db\server2
logpath=D:\mongoShards\configsvr\log\server2.log
journal=true
port=30002
replSet=config-server
数据目录
D:\mongoShards\configsvr\data\db\server1
D:\mongoShards\configsvr\data\db\server2
日志目录
D:\mongoShards\configsvr\log
(注意mongod后添加了"–configsvr",标识为配置服务。)
mongod --configsvr --config D:\mongoShards\configsvr\config\config-server1.config
mongod --configsvr --config D:\mongoShards\configsvr\config\config-server2.config
mongo --port 30001
rs.initiate()
rs.add("localhost:30002")
配置文件
D:\mongoShards\routersvr\config\router-server.config
port=40001
logpath=D:\mongoShards\routersvr\log\server.log
日志目录
D:\mongoShards\routersvr\log
(这里的命令为mongos,config-server是上边配置服务复制集的名字。)
mongos --configdb "config-server/localhost:30001,localhost:30002" --config D:\mongoShards\routersvr\config\router-server.config
mongo --port 40001
(要在admin库配置)
use admin
添加分片1
db.runCommand({addshard:"shard1/localhost:10001,localhost:10002",allowLocal:true})
db.runCommand({addshard:"shard2/localhost:20001,localhost:20002",allowLocal:true})
(切换到config库)
use config
db.shards.find()
(切换到admin数据库)
use admin
db.runCommand({"enablesharding":"test"})
(根据"_id"的hash进行分片存储)
db.runCommand({"shardcollection":"test.users","key":{"_id":"hashed"}})
use test
(users是上边设置集合片键中的"test.users")
db.users.insert({"name": "abc"})
上边insert执行三次,插入三条数据。
db.users.find({})
db.users.stats()
分片shard1中两条数据
分片shard2中一条数据
参考资料:
菜鸟教程:MongoDB 分片
bfdnmy:windows下mongodb分片设置与集群搭建
小透明的一天:windows下mongodb集群搭建