MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题

关注我,可以获取最新知识、经典面试题以及微服务技术分享

  MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用性。

那为什么要设置复制集(replica set)呢?

  • 由于复制集是通过在不同服务器上保存来副本,可保证数据在生产部署的冗余和可靠性,不会因为单点问题而丢失数据。
  • 可以通过访问不同服务器副本数据来提高数据读取能力,从而提高整个系统的负载能力。

1. 复制集架构原理

    副本集包含多个数据节点可选的一个仲裁节点。 而在数据节点中:只有一个主节点(primary node),其他节点为为从节点(secondary nodes)
  各个节点成员通过心跳机制进行通信,当主节点与从节点的通信的时间超过配置的electionTimeoutMillis期间(默认为10秒)时,符合条件的从节点要求选举将自己指定为新主节点,群集尝试完成新主节点的选举并恢复正常操作。


主节点: 副本集只能有一个主节点能够确认写入操作来接收所有写操作,并记录其操作日志中的数据集的所有更改(记录在oplog中)。

oplog: 它保存了修改存储在数据库中的数据的所有操作的滚动记录,MongoDB在主节点服务器上应用数据库操作,然后在主节点服务器的oplog上记录操作,然后从节点成员在异步过程中通过心跳机制从任何其他成员导入oplog并应用这些操作,oplog中的每个操作都是幂等的。所有副本集成员都在local.oplog.rs集合中包含oplog的副本,这允许它们维护数据库的当前状态。

从节点: 复制主节点的oplog并将oplog记录的操作应用于其数据集,如果主节点宕机了,将从符合条件的从节点选举选出新的主节点,。 而且你可以通过配置实现特定的功能,比如:

  • 防止从节点成为选举中的主节点Primary,指定节点优先级。
  • 阻止应用程序从节点读取数据,从而允许应用程序运行需要与正常流量分离的应用程序,隐藏节点。
  • 保留正在运行的“历史”快照,以用于从某些错误中恢复,例如无意中删除的数据库,延迟节点

仲裁节点: 仲裁节点不维护数据集。 仲裁节点的目的是通过响应其他副本集节点的心跳和选举请求来维护副本集中的仲裁。 因为它们不存储数据集,所以仲裁节点可以是提供副本集仲裁功能的好方法,其资源成本比具有数据集的全功能副本集成员更便宜。 如果您的副本集具有偶数个成员,请添加仲裁节点以获得主要选举中的大多数投票。而且仲裁节点总是只有1次选举投票,因此允许副本集具有不均匀的投票成员数,而没有复制数据的额外成员的开销。


心跳机制(Hearbeat): 复制集成员间默认每2s会发送一次心跳信息,如果10s未收到某个节点的心跳,则认为该节点已宕机不可以访问;如果宕机的节点为Primary,Secondary(前提是可被选为Primary)会发起新的Primary选举。仲裁员与其他集合成员之间的唯一沟通是:选举期间的投票,心跳和配置数据,而且这些交换未加密。

数据同步: 为了维护共享数据集的最新副本,副本的从节点设置同步或复制来自其他节点的数据。 MongoDB使用两种形式的数据同步:初始化同步新节点同步完整的数据集,以及整个集群节点同步后续数据更改。

其中,初始化同步(Initial Sync)过程:

  • 克隆除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值