一 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. python调用Moxa PCOMM Lite通过串口Ymodem协议发送文件

    本文采用python 2.7编写. 经过长期搜寻,终于找到了Moxa PCOMM Lite.调用PCOMM.DLL可以非常方便的通过串口的Xmodem.Ymodem.Zmodem等协议传输文件,而无需 ...

  2. iOS项目架构文档

    设计的项目架构主要引用MVVM+MVC架构,并以功能模块分级.以下为目录结构. 初级目录: 我们只需要关注SGZH文件夹下的目录,其他为Xcode管理的目录.可以看到此目录为项目初级目录,我们开发过程 ...

  3. 理解和熟练运用js中的call及apply

    call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向. 因为 JavaScript 的函数存在「定义时上下文」和 ...

  4. PS仿制图章

    颜色总不对,和周围不太搭配,这时候把流量调小点,然后用渐变工具.自己实践所得.

  5. Web-Scale IT:对企业的影响

    本文翻译自文章Web-Scale IT: The Enterprise Impact. 作者Brendan Ziolo 在通信.网络和安全行业有着近20年的经验,在 Sipera Systems,Ce ...

  6. 更改JENKINS主目录

    在部署时,发现直接启动WAR包没办法改主目录,而此主目录空间太小, 唯有安装TOMCAT之后进行更改... 参考文档: 工作中,由于Jenkins默认的主目录空间太小,导致需要将Jenkins默认的主 ...

  7. 【codeforce 219D】 Choosing Capital for Treeland (树形DP)

    Choosing Capital for Treeland Description The country Treeland consists of n cities, some pairs of t ...

  8. C#编译器对于dynamic对象到底做了什么

    private static void TestMethod() { //dynamic 仅仅是个占位符而已 dynamic p1 = , Y = }; //对dynamic对象p1的X属性访问通过C ...

  9. CAS单点登录配置[1]:准备工作

    关于CAS是什么这里就不在赘述,网友将它比喻成旅游景点的套票,买了一个套票就可以观看所有景点,不需要一个景点买一次票...我们重点介绍CAS单点登录的配置. 工具/原料 1.配置好JDK环境,否则不方 ...

  10. FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)

    http://blog.csdn.net/yuan892173701/article/details/8702333 AVCodecContext  这是一个描述编解码器上下文的数据结构,包含了众多编 ...