一 MongoDB 复制集简介
    
    MongoDB复制集机制主要分为两种:
         Master-Slave    (主从复制)       这个已经不建议使用
         Replica Set       (复制集)           MongoDB 在1.6版本中开发的新功能,官方推荐使用
       MongoDB复制集比之前的Master-Slave架构功能强大,支持在多个机器中通过异步复制的方式来实现数据库的数据冗余,大大降级单点故障的风险,并且可以实现故障的自动切换。默认情况下,多台机器同一时间只能由一台用于读写操作,从而提供了数据的强一致性,各个DB之间数据完全一致。
       
          
                                                              Replica Sets 部署架构图


        MongoDB复制集( Replica Set)成员是由一组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

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

              
 注意:一个复制集最多只能有12个成员,每次同时只能有7个成员可以投票,这样的限制是为了减少投票花费的时间,提高故障切换的效率。
三 总结
    复制集的使用对于用户来说是透明的。客户端也可以通过配置“读引用”从 从节点获取数据,但是此时获取的数据可能不是最新的,因为可能主节点的操作数据还未同步到从节点上,这种现象叫“最终一致性”,即如果允许从节点读取数据的话,MongoDB不能保证数据的“强一致性”。

MongoDB 复制集 (一) 成员介绍相关推荐

  1. MongoDB复制集原理、搭建及复制集简单维护

    ##一.MongoDB复制集原理 ###(一)复制集简介   Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Drive ...

  2. MongoDB复制集(Replication Sets)介绍

    近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...

  3. MongoDB复制集与Raft协议异同点分析

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.日志复制流程: a.raft leader节点在接收client请求后,先将请求写到日志中,再将日志通过 ...

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

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

  5. MongoDB 复制集节点增加移除及节点属性配置

    复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...

  6. MongoDB复制集搭建主服务器模拟切换

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

  7. MongoDB 复制集那点事儿

    何以高可用? 我们以前用Mysql的时候,经常是一台服务器走天下,如果只是用于学习,是没有问题的,但是在生产环境中,这样的风险是很大的,如果服务器因为网络原因或者崩溃了,就会导致数据库一段时间了不可用 ...

  8. 配置MongoDB复制集

    什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...

  9. MongoDB复制集技术

    为什么使用MongogDB复制集技术? mysql中:一主一从,一主多从结构存在的问题 1. fileover(故障转移)a) 选主投票b) 切换 2. 是否对就用透明化 3. 数据补偿的问题a) 两 ...

最新文章

  1. 大家都收藏了的最新开源项目Top12!CV、NLP、机器学习一应俱全
  2. iOS 跳转App的二三事
  3. eclipse手动pom本地包_环境篇--Eclipse如何远程连接Hadoop集群调试
  4. scala中的构造方法和伴生对象
  5. 为什么要重写toString()方法和hashcode()方法
  6. 信息学奥赛一本通C++语言——1045:收集瓶盖赢大奖
  7. dreamweaver开源_Dreamweaver的7种开源替代品
  8. oracle 数据结构
  9. DedeCMS 批量删除垃圾注册用户和垃圾文档
  10. 【收藏】Windows 8 Consumer Preview的108个运行命令及简要说明
  11. 高中计算机数据的基本特征,高一信息技术《信息与信息的基本特征》教案
  12. win10连接共享打印机出现0x0000011b
  13. 支教日记软件测试,教学实习每周工作计划精选 .doc
  14. python用一行代码画个迷宫_[代码全屏查看]-用turtle不断的画回字迷宫
  15. python使用selenium + PhantomJs搭建的简单漫画爬虫工具
  16. 1--STM32 ADC1与ADC2 16通道DMA采集笔记
  17. win7注册表关闭防火墙服务器,怎么样修改注册表来关闭windows防火墙?
  18. hive 常用正则表达式
  19. 可视化|历届奥运会数据可视化
  20. golang常用库之-文件操作(os、path、filepath、ioutil包)、Go 读文件、Go 写文件

热门文章

  1. Android Studio 3.0~3.x正式版填坑之路
  2. oracle erp云服务器配置,cloud介绍相关现代erp云解决方案- oracle erp cloud.pdf
  3. 2020年编程语言趋势解读:编程世界之未来握于谁手?
  4. STM32CubeIDE STM32H743实现软件触发ADC实现多通道DMA方式、过采样方式采集数据
  5. 易之 - 我是个大师(2014年3月6日)
  6. CY68013 FPGA通信联调总结
  7. Cy3花青素荧光染料,(CAS:146368-13-0 )
  8. hadoop 使用HA后java api连接获取 FileSystem
  9. 数字信号处理matlab设计滤波器
  10. 将下列计算机中文翻译成英文,急...将计算机类英文翻译成中文