MongoDB副本集、主从

1、MongoDB副本集是通过什么方法做到数据同步的?

答:支持在多个机器中通过异步复制实现数据同步,然而这会导致副本集无法返回最新的数据给客户端程序。主节点负责处理客户端请求,读写数据,将主节点上所有的操作记录在oplog中;从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点的数据一致。默认情况下,从节点不支持外部读数据,但是可以设置。

2、MongoDB主从及相关概念

1)主从复制(Master-Slaver):现在已经不推荐使用这种方式了

2)副本集:主从复制是一个单副本的应用,没有很好的扩展性和容错性。副本集就算一个副本挂掉了,还有很多副本存在,并且解决了“主节点挂掉后,整个集群内会自动切换”的问题。他还可以进行故障的自动转移,如果停掉副本集中的一个成员,那么剩余的成员会在自动选举一个成员作为主库。

3)自动故障转移:如果主节点10秒以上与其他节点失去通信,其他节点将会选举新的及节点作为主节点。

4)心跳检测:整个集群需要保持一定的通信才能知道哪些节点挂掉,主节点每2秒会给从节点发送一次pings包,如果其他节点在10秒之内没有返回就标示为不能访问。

5)数据同步:副本集同步分为初始化同步和keep复制。初始化同步指全量从主节点同步数据,如果主节点数据量比较大同步时间会比较长。而keep复制指初始化同步过后,节点之间的实时同步一般是增量同步。初始化同步不只是第一次才会被触发,以下两种情况会触发:

    ①secondary第一次加入,这是肯定会触发的。

    ②secondary落后的数量超过了oplog的大小,这样也会被全量复制。

6)副本集包括三种节点:主节点,从节点,仲裁节点:仲裁节点:不复制数据,仅参与投票。

7)MongoDB副本节点最少为3台,最多12个副本节点,因为如果集群中副本节点过多,增加了复制的成本,反而拖累了集群的整体性能。

8)oplog:只记录改变数据库状态的操作;存储在oplog中的操作并不是和主节点执行的操作完全一样,例如“$inc”操作就会转化为“$set”;oplog存储在固定集合中,当oplog的数量超过oplogSize,新的操作就会覆盖旧的操作。

注:以上内容参考请https://www.cnblogs.com/nulige/p/7613721.html


你可能感兴趣的:(MongoDB)