在 mongodb 集群中,PRIMARY 状态是否表示可以安全关闭辅助节点?

in mongodb clusters, is status PRIMARY a signal that it's safe to shut down a secondary?

我有 3 个服务器,A、B 和 C。

A 是主要的。

我想在生产中扩大规模。我发布以下内容:

mongo A
rs.stepDown()

然后我

rs.status() 

看到 B 现在处于 PRIMARY 状态,这是否意味着所有对 A 的非同步写入现在都已传递给 B,并且 A 可以安全关闭和纵向扩展?

如果不是这个,那又是什么?是否有任何 100% 的决定因素可以安全地关闭以前的 PRIMARY?

谢谢, 凯文

在副本集中,A、B 和 C 应该是相同的并且可以互换。

因此,如果您退出一个主节点,而另一个主节点接管了主节点,则整个集合应该是一致的并且可以接受写入(注意事项)。

话虽如此,垂直缩放的推荐方法是首先对所有辅助节点执行缩放,最后对主要节点执行缩放。

警告:如果选择了新的 PRIMARY,则所有三个节点都应包含相同的数据如果对集合的所有写入都使用多数写入关注。如果写入已被主节点确认,并且您在写入尚未传播到任何辅助节点的一小段 window 时间内将其降级,则确认的写入有可能回滚。有关详细说明,请参阅 Rollbacks During Replica Set Failover

主要是任何客户端通信的第一个联系点,在本例中是写操作。需要考虑的一个因素是 write concern - 它是开发人员可以添加到写操作的确认机制,更高级别的确认保证更强的持久性保证。参见 Write Concern for Replica Sets

当write concern为1时(这是默认的),客户端在数据写入primary A后被确认。此时如果primary降级,replication还没有' t 还没有发生在辅助节点上(并且辅助节点没有写入),当 A 作为辅助节点再次启动时,它将回滚尚未复制到辅助节点的特定写入。

当写关注为"majority"时,客户端在数据写入主 A 并且 复制到辅助 B 或 C 之一后得到确认(注意一个 3 成员副本集的大多数是 2)。在这种情况下,如果主 A 被降级,写入数据保证在成员 B 或 C 之一(除了 A)。

A​​ 下台,进行选举,B 或 C 中的一个被选为新的主要成员。拥有最新数据的成员获得优先权,这将具有复制的写入。请注意,中学成员的优先级还会影响哪些成员优先选择为主要成员(默认优先级为1,而较高的优先成员具有更高的优先级)。确定哪个辅助节点进入 运行 进行选举的方法从优先级开始,并且哪个辅助节点具有最新的数据副本。在这种情况下(写关注 "majority"),所有成员的默认优先级为 1 是有益的。