一 MongoDB 复制集简介
    
    MongoDB的复制机制主要分为两种:
         Master-Slave    (主从复制)      这个已经不建议使用
         Replica Set       (复制集)           MongoDB在1.6版本中开发的新功能,官方推荐使用

       MongoDB复制集比之前的Master-Slave架构功能强大,支持在多个机器中通过异步复制的方式来实现数据库的数据冗余,大大降级了单点故障的风险,并且可以实现故障的自动切换。默认情况下,多台机器同一时间只能由一台用于读写操作,从而提供了数据的强一致性,各个DB之间数据完全一致。
   
        MongoDB复制集成员是由一组mongod进程实例组成,其实 Replica Set的结构类似于一个集群,完全可以把它当作一个集群,因为它确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他节点马上就会将业务接管过来而无须停机操作。

二 Replica Set 成员介绍

    MongoDB复制集的成员包括:主节点、从节点和仲裁节点三大类,下面一一做详细介绍。

   1.
主节点(Primary)
 
   
     主节点负责所有写请求,
主节点是复制集里唯一一个可以接受写操作请求的,主节点会将其所有的写操作记录到oplog日志上,从节点就可以复制oplog日志,将这些操作应用到自己的节点上。
     默认的情况下,客户端会将其所有读请求发给主节点,但是也可以通过配置让从节点具有读取数据能力。
     一个复制集最多只能有一个主节点,当其不可用(或者是资格不够的时候)的时候,通过选举算法从从节点中选择一个来作为新的主节点。
           
    2.从节点(Secondaries)

     从节点通过复制主节点数据(通过读取操作日志文件)l来保持数据的一致性。 另外,通过一些配置(比如说不让其拥有投票权、将其优先级设置为零)从节点还可以使其拥有某些特殊的作用。主要有以下的几种常见当配置:
   
       2.1.优先级设置为0(Priority 0):将一个从节点的优先级设置为零,失去了被选举权,该节点就不可以成为主节点了。

    注意:  a.Priority0节点虽然没有被选举权,但是拥有选举权,在选举中可以投票,另外它也会保持一份主节点的数据,可以接受读操作。
                b.Priority0节点在进行多数据中心部署的时候是十分有用的,可以将主从节点放到主数据中心,priority0放到另外一个,这样可以增加数据当安全性。

             c.此外,Priority0可以作为一个替补成员,当复制集中有成员不可用的时候,可以很快的顶替上 , 也可以把硬件比较差的机器设置为Priority0。

     2.2.Hidden成员:Hidden成员对客户端来说是不可见的,因此不对外提供
读请求,
该类从节点只是拥有一份备份数据。

   注意:a.Hidden成员同样也会保持主节点的一份数据,但是它对客户端来说是不见的,db.isMaster() 不会显示Hideen成员 。Hidden成员也是一个Priority0成员,只拥有投票权。
             b.Hidden成员与其他从节点的链路是单向通信的,其他节点不能发送请求给Hidden成员,因为Hidden对于其他节点来说也是不可见的,这样的话Hidden成员的网络通讯压力就比较小,我们可以使用它来做报告或者备份。如果要做备份的话,我们应该确保Hidden节点和主节点之间网络带宽,尽可能减小复制滞后的时间,尽量保持两者间数据高度的一致性。
          
     2.3 历史快照延迟(Delayed)成员:该类从节点不会与主节点数据保持时间上的一致,它保存了现在之前的数据,相当有一个历史快照。
      a.延迟成员反映了主节点一个更早的状态,比如说我们设置一个延迟一个小时的Delayed成员,当前是9:52,那么一个Delayed成员只记录了8:52之前的数据。由于Delayed成员记录数据的滞后性,当我们进行系统升级过程中或者一些操作导致错误的话,那么可以利用Delayed成员记录的数据来进行操作回滚。
       b.Delayed成员既是Priority0也是hidden.它同样也拥有投票权利。
       c.Delayed成员以“滞后”的方式来从主节点操作日志同步数据,所以当我们设置Delayed成员的滞后时间的时候不能太大,因为操作日志是会更新的(是一个Capped Collection),如果设置延迟时间太长的话,操作日志记录的很早的操作可能
 
就会被更新掉,但是又不能设置的太小,如果太小的话就失去了Delayed成员存在当意义(应该大于系统维护或者升级的窗口时间)。

     在下面的5个成员复制集例子中,一个主节点和4个从节点都存有一份数据,其中一个成员被设置为延迟3600秒(一个小时),注意到一个Delayed成员也是一个Priority0和Hidden成员。

   我们可以像下面这样设置一个Delayed成员:

     "_id" : <null> ,
    "host" : <hostname:port> , 
    "priority" : 0,
    "slaveDelay" : <seconds> ,
    "hidden" : true

 }

     注意:1.每一个从节点都拥有一份主节点的数据拷贝,它们通过主节点(或者是从节点,只要是该从节点操作日志比自己的操作日志记录的操作新的话)操作日志记录的信息,异步的完成写操作。
          
    3.仲裁节点(arbiter) 仲裁者可以成为复制集的成员,它不会存储数据,它的主要作用是用来投票的。例如当复制集有偶数个成员时,可以添加一个仲裁者。
  
      注意:只有当复制集中可以投票的节点数目为偶数的时候我们可以添加一个仲裁者。例如下图所示,一个复制集原来有四个成员,这个时候我们可以添加一个仲裁者,仲裁者不存储数据。



注意:一个复制集最多只能有12个成员,每次同时只能有7个成员可以投票,这样的限制是为了减少投票话费的时间,提高故障切换的效率。


三 总结

    复制集的使用对于用户来说是透明的。
客户端也可以通过配置“读引用”从 从节点获取数据,但是此时获取的数据可能不是最新的,因为可能主节点的操作数据还未同步到从节点上,这种现象叫“最终一致性”,即如果允许从节点读取数据的话,MongoDB不能保证数据的“强一致性”。



 

MongoDB 复制集 (一) 成员介绍的更多相关文章

  1. MongoDB复制集成员及架构介绍(一)

    MongoDB复制集介绍 MongoDB支持在多个机器中通过异步复制达到提供了冗余,增加了数据的可用性.MongoDB有两种类型的复制,第一种是同于MySQL的主从复制模式(MongoDB已不再推荐此 ...

  2. MongoDB复制集成员及状态转换

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 复制集(Replica Set)是MongoDB核心组件,相比早期版本采用的主从(Master-Slave) ...

  3. MongoDB复制集的工作原理介绍(二)

    复制集工作原理 1)数据复制原理 开启复制集后,主节点会在 local 库下生成一个集合叫 oplog.rs,这是一个有限集合,也就是大小是固定的.其中记录的是整个mongod实例一段时间内数据库的所 ...

  4. MongoDB实战指南(七):MongoDB复制集之复制集工作机制

    http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据 ...

  5. mongodb 复制集

    mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...

  6. MongoDB复制集

    1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...

  7. MongoDB复制集高可用选举机制(三)

    复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...

  8. MongoDb复制集实现故障转移,读写分离

    前言 数据库技术是信息系统的一个核心技术,发展很快,各种功能类型数据库层出不穷,之前工作中使用过关系型数据库(mysql.oracle等).面相对象数据库(db4o).key-value存储(Memc ...

  9. Raft与MongoDB复制集协议比较

    在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...

随机推荐

  1. 浏览器中输入URL到返回页面的全过程

    第一步,解析域名,找到主机IP (1)浏览器会缓存DNS一段时间,一般2-30分钟不等.如果有缓存,直接返回IP,否则下一步. (2)缓存中无法找到IP,浏览器会进行一个系统调用,查询hosts文件. ...

  2. designated initializer和secondary initializer是什么?

    仅在此简单记录概念,方便以后回顾... ===================================== designated initializer是指定初始化方法,提供所有参数: sec ...

  3. bzoj 1195: [HNOI2006]最短母串 爆搜

    1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 894  Solved: 288[Submit][Status] ...

  4. PS字体工具字体显示不出来

    显示一个小点:搜索了各种答案,扩大字号(最大72)更改前景色和背景色,最正确的解释就是分辨率太低,我发现分辨率是1,一般的设置成300,1分辨率情况下可以在图层那选择文字图层,然后按ctrl+t,拉大 ...

  5. Word删除空白页

    1.常见的就是在前一页最后按delete 2.我遇到的问题是,共两页第一页是平常的A4,是表格,第二页也是A4,只不过横着显示(后来才知道的),中间是分节符,不能直接删除的,否则表格各个部分分开在好几 ...

  6. HTML5解决跨域问题

    HTML5解决跨域问题 由于浏览器的同源策略,网络连接的跨域访问是不被允许的,XHR对象不能直接与非同源的网站处理数据交互.而同源指的是什么呢?同源的范畴包括:规则(协议),主机号(域名.ip等),端 ...

  7. 关于多域名EXCHANGE如何设置PTR的问题

    找了很多网页, 有效的是MX可以设置不同的域名,但PTR只设置一个即可... 如果设置为一个IP为两个PTR,则在进行测试时,会发生DNS ROBBINS,即一次找这个,一次找那个. 切记. .... ...

  8. The APR based Apache Tomcat Native library

    Tomcat启动的时候出现下面这样的提示: 2015-11-06 14:24:12 org.apache.catalina.core.AprLifecycleListener init 信息: The ...

  9. awsomeplayer结构认识

    把这个搞明白,算是顿悟的一个真实例子.怎么也搞不懂的架构,突然就想明白了.不过这其实是一个思维的过程. 当然如果你想明白这些东西,至少要非常清楚一个概念:接口. 我只是一个半路出家的开发者,我真正明白 ...

  10. [转贴]C++调用openssl 的AES加密例子

    #include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h ...