分片
介绍
复制所有的写入操作到主节点
延迟的敏感数据会在主节点查询
单个副本集限制在12个节点
当请求量巨大时会出现内存不足。
本地磁盘不足
垂直扩展价格昂贵
分片三个重要东西
Shard: 用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server: mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers: 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
启动Shard Server
mongod --port 27020 --dbpath=D:/MongoDB/shard/s0 --logpath=D:/MongoDB/shard/log/s0.log --logappend --fork
mongod --port 27021 --dbpath=D:/MongoDB/shard/s1 --logpath=D:/MongoDB/shard/log/s1.log --logappend --fork
mongod --port 27022 --dbpath=D:/MongoDB/shard/s2 --logpath=D:/MongoDB/shard/log/s2.log --logappend --fork
启动Config Server
mongod --port 27100 --dbpath=D:/MongoDB/shard/config --logpath=D:/MongoDB/shard/log/config.log --logappend --fork
启动Route Process
mongos --port 40000 --configdb localhost:27100 --fork --logpath=D:/MongoDB/shard/log/route.log --chunkSize 500
chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB.
win 系统下 MongoDB 3.4之前版本好使
或创建成复制集类型使用下边是我创建复制集的博客里边有实例
mongos --port 40000 --configdb localhost:20000 --fork --logpath=D:/MongoDB/shard/log/route.log --chunkSize 500
配置Sharding
mongo admin --port 40000
db.runCommand({ addshard:"localhost:27020" })
db.runCommand({ addshard:"localhost:27021" })
db.runCommand({ addshard:"localhost:27022" })
db.runCommand({ enablesharding:"test" }) #设置分片存储的数据库
db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
MongoDB数据备份
在MongoDB中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
语法
>mongodump -h dbhost -d dbname -o dbdirectory
-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
实例
在f盘建立一个MongoDB文件夹
mongodump -h localhost:27017 -d tesdb -o f:MongoDB
MongoDB数据恢复
语法
>mongorestore -h <hostname><:port> -d dbname <path>
mongorestore -h localhost:27017 -d tdb D:/MongoDB/tdb
setdb可以换任何数据库,如果数据库中没有这个库那么新添加一个如果有替换
MongoDB 监控
mongostat 命令查看数据库增删改查等使用频率
mongotop 命令提供每个集合的水平的统计数据。
mongotop 9 后面的9是<sleeptime>参数 ,可以不使用,等待的时间长度,以秒为单位
mongotop --locks 报告每个数据库的锁的使用