我知道 Mongodb 建议复制集最小值为 3
我可以使用两台服务器安装 4 个复制集的 Mongodb 以防止一个节点关闭时写入失败吗?
我的想法是在每台服务器上再安装两个实例来伪造/摆脱它:
MongoDB 1
- 复制集 1(主)
- 复制集 2(次要)
MongoDB 2
- 复制集 3(次要)
- 复制集 4(仲裁者)
如果一台服务器宕机,它仍然有两个复制集。
任何人都可以评论我的想法吗?我想知道是否需要考虑任何问题/风险?谢谢!
我知道 Mongodb 建议复制集最小值为 3
我可以使用两台服务器安装 4 个复制集的 Mongodb 以防止一个节点关闭时写入失败吗?
我的想法是在每台服务器上再安装两个实例来伪造/摆脱它:
MongoDB 1
MongoDB 2
如果一台服务器宕机,它仍然有两个复制集。
任何人都可以评论我的想法吗?我想知道是否需要考虑任何问题/风险?谢谢!
这是一个坏主意。您建议的配置会适得其反,主要原因有两个:
MongoDB旨在在多个主机上有效运行,因此它就是为此而设计的;即使你能找到一种方法将一个正常运行的副本集硬塞到两台主机上,你也将与 MongoDB 的设计背道而驰,并努力使其有效工作。
确实,您最好的选择是在两台主机上运行一个 mongod 实例,并在第三台(单独的)主机上运行一个仲裁器;这种正常的 3 主机配置是实现数据复制和高可用性的一种有效且直接的方式。
请阅读https://docs.mongodb.com/manual/replication/
不建议一组中的成员数量为偶数。添加仲裁者的唯一原因是解决此问题并将成员数量增加 1 以使其变得奇数。添加 2 个仲裁者根本没有意义。
同样,没有必要将仲裁者与任何其他成员放在同一服务器上。它非常轻量级,因此您可以将它与例如应用程序服务器放在一起。
拥有 2 个数据库服务器的最佳副本集配置将是:
MongoDB 1
MongoDB 2
任何其他服务器
简单的答案是,不,你不能这样做..
原因是“多数”。如果你失去了这两个服务器中的一个,你就没有在线投票的多数。
这就是为什么 3 是最小值的原因。可以是3个数据承载节点,也可以是2个数据承载节点加1个仲裁器。所有这些都有一票,如果你失去其中之一,副本集仍然有 2/3 票,即多数票。比如 3/5 或 4/7。
值 1/2(或 2/4)不是多数。