MongoDB副本集运维小结

Posted 散尽浮华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB副本集运维小结相关的知识,希望对你有一定的参考价值。

 

前面的文章介绍了MongoDB副本集和分片集群的做法,下面对MongoDB集群的日常维护操作进行小总结:

MongDB副本集故障转移功能得益于它的选举机制。选举机制采用了Bully算法,可以很方便从分布式节点中选出主节点。

Bully算法是一种协调者(主节点)竞选算法,主要思想是集群的每个成员都可以声明它是主节点并通知其他节点。别的节点可以选择接受这个声称或是拒绝并进入主
节点竞争。被其他所有节点接受的节点才能成为主节点。节点按照一些属性来判断谁应该胜出。这个属性可以是一个静态ID,也可以是更新的度量像最近一次事务
ID(最新的节点会胜出)。

1)MongoDB集群的节点数量
官方推荐MongoDB副本集的成员数量为奇数,且选举要求参与的节点数量必须大于成员数的一半。假设MongoDB集群有3个节点,那么只要有2个节点活着就可以选举;
如果有5个,那么活3个节点就可以选举;如果有7个节点,那么活4个就可以选举.....

MongoDB集群最多允许12个副本集节点,其中最多7个节点参与选举。这是为了减少心跳请求的网络流量和选举话费的时间,心跳每2秒发送一次。

MongoDB集群最多12个副本集节点是因为没必要一份数据复制那么多份,备份太多反而增加了网络负载和拖慢了集群性能;而最多7个节点参与选举是因为内部选举机制
节点数量太多就会导致1分钟内还选不出主节点,凡事只要适当就好。

2)MongoDB心跳
整个MongoDB集群需要保持一定的通信才能知道哪些节点活着哪些节点挂掉。MongoDB节点会向副本集中的其他节点每两秒就会发送一次pings包,如果其他节点在10秒
钟之内没有返回就标示为不能访问。每个节点内部都会维护一个状态映射表,表明当前每个节点是什么角色、日志时间戳等关键信息。如果是主节点,除了维护映射
表外还需要检查自己能否和集群中内大部分节点通讯,如果不能则把自己降级为secondary只读节点。

3)MongoDB同步
MongoDB副本集同步分为初始化同步和keep复制。初始化同步指全量从主节点同步数据,如果主节点数据量比较大同步时间会比较长。而keep复制指初始化同步过后,
节点之间的实时同步一般是增量同步。初始化同步不只是在第一次才会被处罚,有以下两种情况会触发:
[1] secondary第一次加入,这个是肯定的。
[2] secondary落后的数据量超过了oplog的大小,这样也会被全量复制。

  

以上是关于MongoDB副本集运维小结的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB日常运维操作命令小结

采集运维工具完善脚本,智能延时

微服务架构下日志采集运维管理分析

MongoDB运维注意点

采集运维工具文字识别

总结遇到的几次MongoDB副本集初始化失败问题