mongoDB副本集

一. 简介

      生产环境中,如果mongoDB只起来一个单点,一个服务器进程,风险很高。如果这个服务器进程挂了,就会导致服务宕机。我们可以通过mongoDB的副本集功能,为主服务创建多个副本,如果主服务挂了,下面的副本中一个会晋升为主服务,另外,从其余副本中拷贝出一份副本,继续提供服务。

    1. 副本集里面的主节点,可以执行任何操作

    2. 默认不能在备份节点执行写操作

    3. 默认不能从备份节点读取数据,在备份节点显示执行setSlaveOk之后,才可以从备份节点读取数据

二. 设计副本集的数量

     1. 需要满足大多数的场景,主节点的上任(启动的时候上任,或者主节点挂了,继任者上任)需要得到大多数的支持。比如备份节点是3,大多数就是2. 备份节点是5,大多数就是3.

     2. 推荐将大多数成员放入一个数据中心,这样这个数据中心就能够选出一个主节点。 将另外的少数成员放入另外一个数据中心做备份,这个中心永远都选不出主节点。保证了数据安全,又保证了不会同时选出2个主节点。

    3. 不推荐配置2个副本集的数据中心,如果一个不可用了,另外一个会选不出主节点,如果已经是主节点,也会从主节点退下来。因为只有1台,不满足大多数的条件。

    3. 推荐使用奇数个成员的副本集,比如3,5,7,这样的话选举会比较容易一些。

    4. 可以设置延迟备份节点,比如有人不小心把主库删除了,或者上线的功能,有严重的bug,误删了数据。这个时候延迟备份节点还没有感应到,可以从这个节点恢复数据。

三. 数据同步

      mongoDB主节点,每一次操作都会记录到一个集合里面,备份节点可以通过这个集合(oplog)同步数据。每一个备份节点从主节点复制到数据之后,先操作,然后同步写入oplog日志(一个集合)。这样,其他节点可以选择这个备份节点来同步数据,避免都从主节点同步。

      由于oplog大小是有限制的,如果同步比较慢,可能oplog已经被删了,备份节点数据还没同步。这个时候,备份节点就会结束同步,需要进行完全同步了。

四. 选举

      当一个成员无法到达主节点的时候,就会申请成为主节点。这个时候,其他节点收到消息,会判断是否可以进行选举(比如主节点还存在,只是它不可达。 或者主节点挂了,它的数据是否最新)。心跳间隔时间是2S,也就是主节点挂了,最多2S其他节点就能够感知到,并且推举出新主节点。

五. 等待写入复制

      如果希望不管发生什么,都要将写入操作保存到副本集中,我们确保写入操作被同步到副本集的大多数就可以。

比如 db.runCommand({"getLastError":1,"w":"majority","wtimeout":1000}) 

majority 代表大多数,也可以指定为数字,比如2,表示同步到1个副本集,因为另外一个是主节点。

wtimeout 超时时间


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值