mongodb复制集

mongo提供了两种复制风格:主从复制以及复制集,在生产环境下推荐使用复制集。因此下面主要介绍复制集

MongoDB复制集的主要意义在于实现服务高可用

它的实现依赖于两个方面的功能:
1.数据写入时将数据迅速复制到另一个独立节点上
2.在接受写入的节点发生故障时自动选举出一个新的替代节点

高可用的同时也带来了如下几个优点:

1.数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟
2.读写分离:不同类型的压力分别在不同的节点上执行
3.异地容灾:在数据中心故障的时候快速切换到异地

数据复制原理

主从节点都有一个固定集合oplog,位于每个复制节点的local数据库里,记录了每次对数据变更的操作,通过这个集合可以直接再现数据。
当向主节点发起写操作时,操作会被记录到主节点的oplog中。从节点使用长轮询,它每次要更新时,查看自己本地的oplog的最新的时间戳,然后去把主节点oplog中大于该时间戳的条目添加到自己的oplog中

提交与回滚

向主节点做写操作,这些写操作被复制到大多数节点之前,都不会被认为是已提交的。
举个例子:假设主节点中的写操作还没来的及复制到从节点,这时主节点下线了,从而选举出另一个主节点,向这个新的主节点写入数据后,老的主节点再次上线,会尝试从新的主节点做复制,但是老的节点的一些操作没有出现在新的主节点上,这时就会触发回滚。
在回滚时,所有未复制到大多数节点的写操作都会被撤销,就是说会将它们从从节点的oplog和它们所在的集合里删掉。针对每个有回滚写操作的集合,会创建一个单独的BSON文件,如果需要恢复被回滚的文档,可以用bsondump工具查看文件,用mongorestore手工进行恢复。

选举策略

1.默认情况下,每个副本集成员每2s ping一次其他所有成员
2.如果ping失败次数到达指定数目就判定为节点失联
3.当主节点失联时,会推举状态最新的从节点提升为主节点
4.选举成功的必要条件是大多数投票节点存活
5.复制集中最多有50个节点,但具有投票权的节点最多7个

如何启动复制集

推荐复制集集配置最少由3个节点组成。需要3个mongod服务分别使用不同的log,data文件监听不同的port
1.首先创建3个需要存放data文件以及log文件的目录
2.通过mongod -f mongod.conf启动, mongod.conf 是启动配置文件
配置文件参数可参考官方

## mongod.conf
systemLog:
   destination: file
   path: "log/db3/mongod.log"
   logAppend: true
storage:
   dbPath: data/db3
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0  # 如果要连接外网 就不能使用127.0.0.1
   port: 28019
replication:
   replSetName: rs0
   enableMajorityReadConcern: true

3个mongod进程成功运行后,使用mongo命令连接其中任意一个实例,进入shell中,此时3个mongod彼此不知道互相的存在需要使用命令或者配置文件来连接他们。
使用命令的方式:

rs.initiate() 
// 初始化副本集,执行完后过一会便拥有了一个单成员的复制集
rs.status()
// 查看复制集的状态信息
// 接着使用rs.add()可以将后续节点加入该复制集中
rs.add("localhost.localdomain:28018")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值