1.mongodb副本集概念
mongodb的复制至少需要两个节点。其中一个是主节点,负责数据库写操作,其余的都是从节点,负责复制主节点上的数据以及可以进行读操作。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
mongodb在副本集中可以有arbiter节点,arbiter节点主要负责选举主节点,本身不存储数据
mongodb副本集如果正常工作至少需要n/2+1个节点存活,n/2是向下取整数
1.1.mongodb副本集搭建
现在搭建含有3个mongodb节点的副本集,一个主节点、一个从节点、一个arbiter节点,主要参数如下:
--dbpath 数据文件路径
--logpath 日志文件路径
--port 端口号,默认是27017.我这里使用的也是这个端口号.
--replSet 复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字
--maxConns 最大连接数
--fork 后台运行
--logappend 日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。
1.1.1 启动mongodb节点1
mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend
1.1.2 启动mongodb节点2
mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend
1.1.3 启动mongodb节点3
mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend
1.1.4 集群节点配置
step1:mongo.exe 连接到mongod服务器
step2:假设hosts中配置了当前的ip指向的host为zhq.test.com
rs.initiate()
rs.add("zhq.test.com:27018")
rs.addArb("zhq.test.com:27019")
rs.status()就可以查看副本集状态
2.mongodb分片的概念
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量,或许一个主节点不能提供足够的写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据,使用分片的结构如下:
Shard:用于存储真实的分片数据,每个分片可以使用一个副本集来作为一个集群冗余存储数据
Config Server: mongod实例,存储了整个集群的元数据
Router:路由服务,应用服务器通过接入路由服务就可以使用mongodb的分片功能
2.1 建立两个mongodb复制集
按照那个步骤我们建立test和test1复制集,不同的是需要添加--shardsvr参数:
2.1.1 启动test和test1集群的mongodb节点1
mongod.exe --port 27017 --dbpath D:\work\mongodb\1 --replSet test --logpath D:\work\mongodb\1\log1\log.txt --logappend --shardsvr
mongod.exe --port 27020 --dbpath D:\work\mongodb\4 --replSet test1 --logpath D:\work\mongodb\4\log4\log.txt --logappend --shardsvr
2.1.2 启动test和test1集群的mongodb节点2
mongod.exe --port 27018 --dbpath D:\work\mongodb\2 --replSet test --logpath D:\work\mongodb\2\log2\log.txt --logappend --shardsvr
mongod.exe --port 27021 --dbpath D:\work\mongodb\5 --replSet test1 --logpath D:\work\mongodb\5\log5\log.txt --logappend --shardsvr
2.1.3 启动test和test1集群的mongodb节点3
mongod.exe --port 27019 --dbpath D:\work\mongodb\3 --replSet test --logpath D:\work\mongodb\3\log3\log.txt --logappend --shardsvr
mongod.exe --port 27022 --dbpath D:\work\mongodb\6 --replSet test1 --logpath D:\work\mongodb\6\log6\log.txt --logappend --shardsvr
2.1.4 集群节点配置
step1:mongo.exe --port 27020连接到mongod服务器
step2:假设hosts中配置了当前的ip指向的host为zhq.test.com
rs.initiate()
rs.add("zhq.test.com:27021")
rs.addArb("zhq.test.com:27022")
rs.status()就可以查看副本集状态
2.2 建立两个mongodb config server组成的集群(这个是按照mongodb3.2版本来的,mongodb3.0以下版本只需要启动两个mongod节点,不需要建立集群)
mongod.exe --port 27023 --dbpath D:\work\mongodb\config1 --logpath D:\work\mongodb\config1\config.log --logappend --replSet config --configsvr
mongod.exe --port 27024 --dbpath D:\work\mongodb\config2 --logpath D:\work\mongodb\config2\config.log --logappend --replSet config --configsvr
mongo.exe --port 27023连接到mongod服务器
假设hosts中配置了当前的ip指向的host为zhq.test.com
rs.initiate()
rs.add("zhq.test.com:27024")
rs.status()就可以查看副本集状态
2.3 建立两个mongos节点
mongos.exe --port 27025 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route1\route.log
mongos.exe --port 27026 --configdb config/zhq.test.com:27024,zhq.test.com:27023 --fork --logpath D:\work\mongodb\route2\route.log
2.4 连接一个mongos节点并配置分片(只需要连接一个mongos添加这些配置即可,其他的mongos的配置会通过config server自动同步过去)
mongo.exe --port 27025
db.runCommand({addshard:"test/zhq.test.com:27017,zhq.test.com:27018,zhq.test.com:27019"})//添加分片1集群
db.runCommand({addshard:"test1/zhq.test.com:27020,zhq.test.com:27021,zhq.test.com:27022"})//添加分片2集群
db.runCommand({ enablesharding:"test" }) //设置分片的数据库
db.runCommand({ shardcollection: "test.log", key: { title:1}})//设置使用表log的字段title进行分片
sh.status({verbose:true})可以查看当前分片的状态
2.5 如何选择分片字段
a.每条记录必须要包含分片的字段,分片字段设置之后,mongodb会自动为该字段建立索引
a.分片字段需要拥有很多不同的值。 便于数据的切分和迁移
b.分片字段要和应用程序相结合,便于应用程序查询的时候尽量查询到一个分片上去,不需要多个分片组合结果
c.分片字段的值要尽量的分散、随机,这样在插入数据的时候可以插入到不同的分片中去,避免造成一个分片压力过大
https://my.oschina.net/seektechnology/blog/870316
相关推荐
mongodb副本集加分片集群安全认证使用账号密码登录
主要给大家介绍了关于Mongodb副本集和分片的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mongodb具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
1.创建目录 在s1h1上创建如下目录 [root@node3 db]# mkdir -p /db/s1/conf [root@node3 db]# mkdir -p /db/s1/data [root@node3 db]# mkdir -p /db/s1/log 在在s1h2上创建如下目录 [root@node4 db]# mkdir -p /db/s1...
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)
MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置
副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当...
该文档详细讲述了对三个服务器的mongodb进行副本集与分片的部署。并给出测试方案和架构图。
7 MongoDB副本集的搭建.mp4 8 MongoDB副本集故障自动切换.mp4 9 MongoDB副本集各实例的优先级设置.mp4 10 MongoDB副本集的伸缩.mp4 11 MongoDB数据的备份和恢复.mp4 12 Python简单操作MongoDB.mp4 13 Python获取...
mongodb4.22分片及副本集搭建
搭建Mongodb分片集群的步骤文档,度娘上很多坑,被坑的可以看看,本文档专门埋坑。
mongodb 分片集群搭建过程(无副本),详细操作步骤,linux命令
Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程之中所要用到的所有软件都有
centos7.0+mongodb 3.4 集群搭建:分片+副本集。3台虚拟机。如有问题可留言。
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
公司单节点升级到分片下,搜索了一圈大多数 MongoDB 集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解 决,以备后查。内容包含复制...
mongos,数据库集群请求的入口,...mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后....
MongoDB分片集群技术用于解决海量数据的存储问题;而MongoDB副本集是一组维护相同数据集的mongod...由此可以看出课程的内容将带领同学们进行MongoDB容灾备份方面的实战,通过MongoDB分片集群技术和MongoDB副本集实战。
Cent OS安装 + MongoDB安装部署(单节点+副本集+分片) 详细教程 的 MARKDOWN文档更加方便安装