Mongo文档将此three-member configuration:primary,secondary,arbiter列为副本集的最小体系结构。
为什么在那里需要仲裁者?如果主服务器出现故障,则辅助服务器将看不到心跳,因此需要成为主服务器。换句话说,为什么主要+次要配置不足够?这个related问题似乎没有解决这个问题,因为它讨论了更多的节点。
答案 0 :(得分:1)
假设您只有两台服务器,一台主服务器和一台辅助服务器。
如果辅助服务器突然无法到达主服务器,则可能是主服务器已关闭(在这种情况下,辅助服务器应该成为主服务器)但是它也可能是隔离辅助服务器的网络问题(这个辅助服务器是一个在行动中的人。)
但是,如果你有一个仲裁者并且辅助设备无法到达主设备但它可以到达仲裁设备那么问题就在于主设备,因此它必须成为新的主设备。如果它无法到达主要的,也不能到达仲裁者,那么次要的人就知道问题在于他是孤立的/破坏的 - 次要的:(因此他不能成为主要的
答案 1 :(得分:1)
如果你将Arbiter降到核心,那么它实际上是一个用于投票的非数据保持成员。
Arbiter的一个案例就像我在链接问题中所述:Why do we need an 'arbiter' in MongoDB replication?来解决CAP的问题,但这不是它的真正目的,因为你可以很容易地用数据保持节点取代Arbiter并拥有同样的效果。
然而,仲裁者会有一些好处:
因此仲裁器非常有用,即使在分区的一侧(即您的网络中没有分区)。
现在解释基本设置。不需要仲裁器,您可以将其分解为数据保持节点,但是3个数据保持节点不是最小值(这是保持自动故障转移所需的最小值),2个数据保持节点和1个仲裁器实际上是最小。
现在回答:
换句话说,为什么主要+辅助配置不足够?
因为如果其中一个下降,只剩下50%的选票(2-1 = 1),50%不被归类为MongoDB实际投票的足够多数(由总配置判断)您rs.config
)中的可投票成员。
同样在这种情况下,MongoDB实际上并不知道最后一个成员是否是最后一个成员。它需要其他成员告诉它。
所以是的,这就是为什么你需要第三个人。