老师好,请教个问题:

来源:3-2 【创建文档】动手实战 - 我的第一篇MongoDB文档

无聊的悟空

2019-04-28

我有一个复制集, 2个节点;数据量不到1T,此时在异地灾备机房又准备再增加一个节点,所以变成3节点的副本集,于是在主节点上执行rs.add()添加新的节点,从而进行数据同步–但是此时因为数据同步,主节点会进行一些锁的操作,所以主节点会停止对外服务–能否既能让主节点正常提供服务,又能让新的节点同步数据呢?

写回答

1回答

Stannum

2019-04-28

同学你好~ 一般来说,添加新节点的时候,不会造成主节点停止对外服务。但是如果新节点的配置不合适,添加新节点是有可能触发复制集选举,并且有可能选出新的主节点(于是造成原来的主节点退位为副节点的)。为了避免这种情况的发生,建议你在添加新节点时,将它的priority和votes都设为0,等到新节点的状态成功转为SECONDARY之后,再使用rs.reconfig()命令调整新节点的priority和votes,这可以让你的复制集扩展过程更加顺畅。

另外,补充一点,只有两个节点的复制集,虽然可以增加数据副本,但是并不能提高数据库的高可用性(你可以自己演算一下失去一个节点的情况,此时选举是没有办法选出新的主节点的)。所以想要搭建一个具备高可用性的复制集,至少要有三个可以投票的节点才可以。

2
0

玩转MongoDB4.0(最新版) 从入门到实践

30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课

1138 学习 · 197 问题

查看课程