小编给大家分享一下mongodb副本集指的是什么意思,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
mongodb副本集由一组Mongod实例(进程)组成,包含一个主要节点和多个二级节点,mongodb司机(客户端)的所有数据都写入小学,中学从主要同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。副本集带来的架构优点主要有:
集群高可用
读写可分离
1。<强>主:强>副本集的主节点,可读写,唯一可以进行写操作的节点,由集群自行选举出来。
2。<强>二级:强>正常情况下,Seconary会参与主要选举(自身也可能会被选为主要),并从主同步最新写入的数据,以保证与主存储相同的数据.Secondary可以提供读服务,增加二级节点可以提供副本集的读服务能力,提升副本集的可用性。
3。<强>仲裁者:强>仲裁者节点只参与投票,不能被选为初选,并且不从主要同步数据。非常轻量级的服务,当复制集成员为偶数时,最好加入一个仲裁者节点,以提升复制集可用性。
4。<强> Priority0: 强> Priority0节点的选举优先级为0,不会被选举为主要,且不能发起选举。
5。<强> Vote0: >强副本集成员最多50个,参与主要选举投票的成员最多7个,其他成员(Vote0)的投票属性必须设置为0,即不参与投票。
6。<强>隐藏:强>隐藏节点不能被选为主(优先级为0),并且对司机不可见。因隐藏节点不会接受司机的请求,可使用隐藏节点做一些数据备份,离线计算的任务,不会影响复制集的服务。
7。<强>延迟:强>延迟节点必须是隐藏节点,并且其数据落后与主一段时间(可配置,比如1个小时)。因延迟节点的数据比主要落后一段时间,当错误或者无效的数据写入小学时,可通过延迟节点来做数据恢复。
选举过程需要消耗一些时间,在此期间,集群将不能接收写操作(即使旧的主仍然存活,但因为“网络分区”问题导致它不能与其他辅助通讯),所有的成员(包括旧的主)都处于只读状态,选举对业务影响很大,所以需要尽量避免选举的发生。
<强>需要进行主要选举的场景:强>
(1)副本集初始化时,
(2)副本集被reconfig;
(3)第二节点检测到初级宕机时;
(4)当有主节点主动降压的(主动降级为二级)时,
主要的选举受节点间心跳,优先级,最新的oplog时间等多种因素影响。
1。<>强心跳:>强复制集中的所有成员之间都互相建立心跳连接,且每隔两秒发送一次心跳,如果未在10秒内收到回复,则此成员将会被标记为“不可用”,二级(前提是可被选为主要)会发起新的主要选举,而其他能正常收到心跳反馈的二级能否决新的主要选举。
2。<>强优先级:>强优先级即优先级值,每个成员都有权重值,默认为都为1,成员倾向于选举权重最高者。上述提到,优先级为0的成员不能被选举为主要且不能发起选举,只要当前主要的权重最高或者持有最新oplog数据的辅助没有比它更高的权重时,集群不会触发选举。当主发现有优先级更高中学,并且该二级的数据落后在10秒内,则主会主动降级,让优先级更高的次要有成为主要的机会。
3。<强> Optime: 强>当前成员已经从初级的oplog中应用的最后一个操作的时间戳(此时间戳由初级生成,在oplog中每个操作记录都有);一个成员能成为主要的首要条件就是在所有有效的成员中它持有最新的Optime。
4。<强>多数派连接:强>一个成员要成为主要,它必须与“多数派”的其他成员建立连接,如果未能与足够多的成员建立连接,事实上它本身也无法被选举为主要;多数派参考的是“总票数”,而不是成员的个数,因为我们可以给每个成员设定不同的“票数”。假设复制集内投票成员数量为N,则大多数为N/2 + 1 .
综上所述,在发起选举以后,能成为主要的节点需要的条件有:
能够与“多数派”建立连接
在所有有效的成员中它持有最新的optime
前两个条件相同的,优先优先级高的成为主要
optime与优先级都相等时,谁发起选举,谁当选主
3.0版本以后副本集成员最多50个,参与主要选举投票的成员最多7个,其他成员(Vote0)的投票属性必须设置为0,即不参与投票。
副本集中各类角色的特点总结如下:
<强>备注:强>
上述二级为默认第二,即优先!=0,投票!=0等;