Mongodb双节点部署



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

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

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

  • 蒙戈德布 1

    • 重装集 1(主)
    • 补习集 2(次要)
  • 蒙戈德 2

    • 补习集 3(次要)
    • 重新集 4(仲裁器)

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

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

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

  1. 在同一主机上运行两个MongoDB实例将导致它们运行缓慢而笨拙,竞争内存,CPU,磁盘I/O等。
  2. 如果其中一个主机出现故障,另一个主机上的两个节点将无法继续副本集,因为四个节点中只有两个节点用完,因此您没有成为主节点所需的大多数节点。

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

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

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

不建议在集合中偶数个成员。添加仲裁服务器的唯一原因是解决此问题并将成员数增加 1 以使其奇数。添加 2 个仲裁者根本没有意义。

同样,将仲裁服务器与任何其他成员放在同一服务器上也是没有意义的。它非常轻量级,因此您可以将其与应用程序服务器放在一起。

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

  • 蒙戈德布 1

    • 主人
  • 蒙戈德 2

    • 二 次
  • 任何其他服务器

    • 仲裁人

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

理性是"多数"。如果您丢失了这两个服务器中的一个,那么您就没有在线多数票。

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

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

最新更新