首页 > 解决方案 > 在 mongodb 集群中,状态 PRIMARY 是否是关闭辅助服务器安全的信号?

问题描述

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

A是主要的。

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

mongo A
rs.stepDown()

然后我做

rs.status() 

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

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

谢谢,凯文

标签: mongodbreplicaset

解决方案


主要是任何客户端通信的第一个联系点,在这种情况下是写操作。需要考虑的一个因素是写问题——它是一种确认机制,开发人员可以添加到写操作中,并且更高级别的确认保证了更强的持久性保证。请参阅写关注副本集

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

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

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


推荐阅读