0

我知道 Mongodb 建议复制集最小值为 3

我可以使用两台服务器安装 4 个复制集的 Mongodb 以防止一个节点关闭时写入失败吗?

我的想法是在每台服务器上再安装两个实例来伪造/摆脱它:

  • MongoDB 1

    • 复制集 1(主)
    • 复制集 2(次要)
  • MongoDB 2

    • 复制集 3(次要)
    • 复制集 4(仲裁者)

如果一台服务器宕机,它仍然有两个复制集。

任何人都可以评论我的想法吗?我想知道是否需要考虑任何问题/风险?谢谢!

4

3 回答 3

2

这是一个坏主意。您建议的配置会适得其反,主要原因有两个:

  1. 在同一主机上运行两个 MongoDB 实例会导致它们运行缓慢且笨拙,竞争内存、cpu、磁盘 i/o 等。
  2. 如果其中一台主机出现故障,另一台上的两个节点将无法继续复制集,因为四个节点中只有两个节点用完,您没有成为主节点所需的多数

MongoDB旨在在多个主机上有效运行,因此它就是为此而设计的;即使你能找到一种方法将一个正常运行的副本集硬塞到两台主机上,你也将与 MongoDB 的设计背道而驰,并努力使其有效工作。

确实,您最好的选择是在两台主机上运行一个 mongod 实例,并在第三台(单独的)主机上运行一个仲裁器;这种正常的 3 主机配置是实现数据复制和高可用性的一种有效且直接的方式。

于 2017-05-17T15:57:04.393 回答
1

请阅读https://docs.mongodb.com/manual/replication/

不建议一组中的成员数量为偶数。添加仲裁者的唯一原因是解决此问题并将成员数量增加 1 以使其变得奇数。添加 2 个仲裁者根本没有意义。

同样,没有必要将仲裁者与任何其他成员放在同一服务器上。它非常轻量级,因此您可以将它与例如应用程序服务器放在一起。

拥有 2 个数据库服务器的最佳副本集配置将是:

  • MongoDB 1

    • 掌握
  • MongoDB 2

    • 中学
  • 任何其他服务器

    • 仲裁者
于 2017-05-17T09:35:26.403 回答
0

简单的答案是,不,你不能这样做..

原因是“多数”。如果你失去了这两个服务器中的一个,你就没有在线投票的多数。

这就是为什么 3 是最小值的原因。可以是3个数据承载节点,也可以是2个数据承载节点加1个仲裁器。所有这些都有一票,如果你失去其中之一,副本集仍然有 2/3 票,即多数票。比如 3/5 或 4/7。

值 1/2(或 2/4)不是多数。

于 2017-05-18T04:13:55.130 回答