mongoDB在windows单机环境下配置分片及复制集

1,971 阅读3分钟

1.什么是分片:类似服务器中代理模式;

2.什么是复制集:

通过不同的机器保存副本用于保证数据的不会因为单点损失而丢失,
主要用于应对数据丢失,机器损坏带来的风险;同时可以提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且不同服务器为不同的用户提供服务,提高整个系统的负载。
3.分片的结构

4.什么是chunk:数据在shard中存储的单位
主要有两个用途:

splitting:当chunk大小超过配置的chunk size,mongoDB的后台进程会把它切割成更小的chunk; 但是这个操作十分消耗IO资源

balancing:主要负责chunk的迁移,从而均衡各个shard server的负载;

5.部署复制集及分片:
(1)安装MongoDB:目录D:\Program Files\MongoDB\Server\4.0\bin
(2)创建数据目录:
data

log

(3)cmd进入bin目录下,创建实例,分别运行:

mongod --port 3000 --shardsvr --replSet rs-a --dbpath "E:\SQL\MongoDB\shard\data\rs-a-0" --logpath "E:\SQL\MongoDB\shard\log\rs-a-0.log"  

mongod --port 3001 --shardsvr --replSet rs-a --dbpath "E:\SQL\MongoDB\shard\data\rs-a-1" --logpath "E:\SQL\MongoDB\shard\log\rs-a-1.log"  

mongod --port 3002 --shardsvr --replSet rs-a --dbpath "E:\SQL\MongoDB\shard\data\rs-a-2" --logpath "E:\SQL\MongoDB\shard\log\rs-a-2.log"

这里 --shardsvr要求使用分片,--replSet要是使用复制集,复制集名称为 rs-a,这是我们便创建了包含三个复制集的一个分片,注意复制集名字要一致,同时 --logpath的参数要求是一个文件而不是目录 上面只是创建了三个可以分片和使用复制集的服务器,我们需要对其初始化设置复制集中的primary和secondary;
(4)登录mongos: mongo --port 3000

mongo --port 3000
rs.initiate()
rs.isMaster()
rs.status()
添加其他为slave
rs.add("localhost:3001")
rs.add("localhost:3002")
带有分片的复制集便建立完成,使用rs.status()查看信息 

(5)配置config server复制集(MongoDB版本3.4以上必须为复制集,即mongos 要求config server是复制集并且在前面加上复制集的名称,此处配置包含2个实例的复制集)同创建复制集rs-conf:

mongod --port 27019 --configsvr --replSet rs-conf --dbpath "E:\SQL\MongoDB\shard\data\config0" --logpath "E:\SQL\MongoDB\shard\log\config0.log"

mongod --port 27020 --configsvr --replSet rs-conf --dbpath "E:\SQL\MongoDB\shard\data\config1" --logpath "E:\SQL\MongoDB\shard\log\config1.log"
mongo --port 27019
rs.initiate()
rs.isMaster()
rs.status()
添加其他为slave
rs.add("localhost:27020")
使用rs.status()查看信息 

(6)配置router server

mongos --configdb rs-conf/localhost:27019,localhost:27020 --logpath "E:\SQL\MongoDB\shard\log\mongos.log" --port 27010

(7)登录mongos:

mongo --port 27010

mongos> sh.addShard("rs-a/localhost:3000,localhost:3001,localhost:3002")
mongos> sh.status()
为数据库添加sharding abled
mongos> sh.enableSharding("testSharding") 


问题:在启动mongos路由服务的时候,碰到一开就自动关闭,然后打印日志:

发现是碰到端口占用,换了端口就可以了。 搞了一下午,本来以为很简单的事,没想着中间碰到各类问题,有一个比较重要的就是MongoDB3.4版本之后的配置分片和3.2版本的命令都不一样,主要就是需要基于复制集创建sharding