zoukankan      html  css  js  c++  java
  • MongoDB副本集功能及节点属性梳理

    副本集的主要功能

    副本集是MongoDB高可用的基础,其主要作用 归纳为以下几点:

    (1)高可用,防止设备(服务器、网络)故障。提供自动FailOver功能。

    (2)无需配置高可用性虚拟节点;无论是SQL Server 的AlwaysOn 还是 MySQL 的 MHA方案 都需要有可用性组 或集群的虚拟IP,要求程序连接使用这个虚拟IP。但是MongoDB 副本集不需要  配置虚拟IP,而是当我们在连接字符串中指定replicaSet 参数设置 后,会自动识别查找master节点。这样 可以省去 DBA 对虚拟高可用IP的配置和管理。另外,还有一点 可以保证  主节点、辅助节点切换 对程序的影响,比如丢数据的影响。就是 程序驱动到每个几点都预先建立了一个连接,这个连接 会实时监控节点状态。当主节点切换时,会很快就识别出,这种机制保证了切换对程序的影响。

    (3)灾难恢复,当发生故障时,可以从其它节点快速恢复。

    (4)功能隔离,用于分析、报表,数据挖掘,系统任务等。用于备份。

    副本集节点属性介绍

    复制集成员最多50个。参与Primary选举投票的成员最多7个,其他成员的votes属性必须设置为0,即不参与投票。

    下面我们对副本集的节点做下梳理。

    一般而言,副本集节点有3中类型,主节点(Primary)、辅助节点(Secondary)、见证节点(Arbiter)。

    主节点(Primary)

     这个节点也比较容易理解。和其他数据库上的主节点一样,可以提供读写。再次不再赘述。

    见证节点(Arbiter

    没有数据副本,不会成为Primary节点,主要用来选举投票。

    当副本集的节点数据为偶数时,可以考虑添加一个见证节点。

    见证节点因为没有数据,只是投票,所以见证节点需要的资源很小,可以和其他应用公用一台服务器,但是不建议将见证节点部署在副本集的主节点或辅助节点节点上。

    辅助节点(Secondary)

    辅助节点也基本上和其他类型数据库的辅助节点一样,可以充当备胎。我们在此主要讲一讲 辅助节点可以设置的几个属性。

    设置为优先级为0的节点

    优先级为0的节点的特点

    1)不会升级为主节点。但是却可以投票。

    2)此节点正常参与Primary产生的oplog的读取,进行数据备份和命令执行。

    3)此节点可正常参与客户端对于数据的读取,进行担当负载均衡的工作。

    4)在write concern 设置中,此节点是可见的,在决定<number>.时,是有用节点。与属性votes =0 不同。

    Priority=0在mongoDB中的解释就是一个Standby,可投票不可参选,又干活又负载。对于Priority为0节点的情况,通常作为一个standby,或由于硬件配置较差,设置为0以使用不可能成为主。

    此节点在数据多中心时很有用。可以将异地的数据节点添加这种属性。

    隐藏节点(Hidden

     

    字面上来说,隐藏。这个隐藏式对客户端的隐藏,客户端如果要读取Secondary的数据,永远无法读取Hidden节点的数据,因为设置了Hidden的这个节点对于客户端是透明的,不可见。但是,对于自己的Secondary的群体和Primary来说都是可见的,所以,Hidden依然可以投票,依然要按照oplog进行命令的复制,只是,不参与负载了。

    Hidden属性的前提是必须是一个Priority=0的节点,所以会具备一些优先级=0的特点。

    1)Hidden节点不能被选为主(Priority为0),并且对Driver不可见。

    2)但在Hidden节点上,可做一些数据备份、离线计算的任务,不会影响复制集的服务

    3)隐藏节点成员建议总是将其优先级设置为0(priority 0)

    4)由于对Driver不可见,因此不会作为read preference节点,隐藏节点可以作为投票节点

    5)在分片集群当中,mongos不会同隐藏节点交互。

    延迟节点(Delayed

    延迟比较容易理解,代表此节点的数据与Primary的数据有一定的迟延,通过设定一个迟延的属性来确定。

    1)此节点必须是一个Priority=0且为Hidden的节点。

    2)此节点虽然又迟延又Hidden,但是还是可以投票。

    3)延迟单位设置为秒。

    节点属性如下:

    {
       "_id" : <num>,
       "host" : <hostname:port>,
       "priority" : 0,
       "slaveDelay" : <seconds>,
       "hidden" : true
    }

     非投票节点(votes:0)

    我们在前面已经接受了,一个副本集最多有7个投票节点,如果还有其它的节点,需要设置为非投票节点。

    非投票节点拥有数据副本,但是不参与投票。另外,非投票节点,其 priority 必须设置为 0。

  • 相关阅读:
    C语言基础课程 第二课 HelloWorld不为菜鸟所知的秘密
    C语言基础课程 第一课 Linux环境配置小实战httpserver
    Linux企业级开发技术(6)——libevent企业级开发之内存管理
    Linux企业级开发技术(7)——libevent企业级开发之锁和线程
    Linux内存管理学习笔记--概述
    5月16日云栖精选夜读:从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举
    luoguP1063 能量项链
    bzoj1060 [ZJOI2007]时态同步
    bzoj1864 [Zjoi2006]三色二叉树
    bzoj1864 [Zjoi2006]三色二叉树
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/9683889.html
Copyright © 2011-2022 走看看