Mongodb 两个节点部署
Mongodb two nodes deployment
我知道Mongodb 建议复制集最小为 3
我可以使用两台服务器来安装 Mongodb 和 4 个复制集,以防止一个节点宕机时写入失败吗?
我的想法是在每台服务器上再安装两个实例以fake/get摆脱它:
Mongodb 1
- 复制集 1(主)
- 复制集 2(中学)
Mongodb 2
- 复制集 3(中学)
- 复制集 4(仲裁者)
如果一台服务器宕机,它仍然有两个复制集。
谁能评论我的想法?
请问有什么issue/risk需要考虑的吗?
谢谢!
请阅读https://docs.mongodb.com/manual/replication/
不建议在一个集合中加入偶数个成员。添加仲裁者的唯一原因是解决此问题并将成员数量增加 1 以使其成为奇数。加2个Arbiter根本没有意义。
同样,将 Arbiter 与任何其他成员放在同一服务器上是没有意义的。它非常轻巧,因此您可以将它与应用服务器放在一起。
拥有 2 个数据库服务器的最佳副本集配置为:
Mongodb 1
- 硕士
Mongodb 2
- 中学
任何其他服务器
- 仲裁者
这是个坏主意。您建议的配置会适得其反,主要原因有两个:
- 运行two instances of MongoDB on the same hosts会导致他们俩运行宁慢且笨拙,争夺内存,cpu,磁盘i/o,等等
- 如果其中一台主机出现故障,另一台主机上的两个节点将无法继续复制集,因为只有两个节点运行退出四个中,您没有 majority necessary to become primary.
MongoDB 是 intended to be run effectively on multiple hosts,所以它是为此而设计的;即使你能找到一种方法将功能正常的副本集硬塞到两台主机上,你也会违背 MongoDB 的设计并努力使其有效地工作。
真的,你最好的选择是 运行 在你的两个主机上的每个主机上一个单一的 mongod 实例,并在第三个(独立的)主机上 运行 一个仲裁器;这种 normal 3-host configuration 是实现数据复制和高可用性的有效且直接的方法。
简单的回答是,不,你做不到..
原因是"majority"。如果你失去了这两个服务器中的一个,你就没有在线投票的多数。
这就是为什么 3 是最小值的原因。可以是3个数据承载节点,也可以是2个数据承载节点加1个仲裁器。所有这些都有一票,如果你失去其中一个,副本集仍然有 2/3 的票数,这是多数票。像 3/5 或 4/7。
值 1/2(或 2/4)不是多数。
我知道Mongodb 建议复制集最小为 3
我可以使用两台服务器来安装 Mongodb 和 4 个复制集,以防止一个节点宕机时写入失败吗?
我的想法是在每台服务器上再安装两个实例以fake/get摆脱它:
Mongodb 1
- 复制集 1(主)
- 复制集 2(中学)
Mongodb 2
- 复制集 3(中学)
- 复制集 4(仲裁者)
如果一台服务器宕机,它仍然有两个复制集。
谁能评论我的想法? 请问有什么issue/risk需要考虑的吗? 谢谢!
请阅读https://docs.mongodb.com/manual/replication/
不建议在一个集合中加入偶数个成员。添加仲裁者的唯一原因是解决此问题并将成员数量增加 1 以使其成为奇数。加2个Arbiter根本没有意义。
同样,将 Arbiter 与任何其他成员放在同一服务器上是没有意义的。它非常轻巧,因此您可以将它与应用服务器放在一起。
拥有 2 个数据库服务器的最佳副本集配置为:
Mongodb 1
- 硕士
Mongodb 2
- 中学
任何其他服务器
- 仲裁者
这是个坏主意。您建议的配置会适得其反,主要原因有两个:
- 运行two instances of MongoDB on the same hosts会导致他们俩运行宁慢且笨拙,争夺内存,cpu,磁盘i/o,等等
- 如果其中一台主机出现故障,另一台主机上的两个节点将无法继续复制集,因为只有两个节点运行退出四个中,您没有 majority necessary to become primary.
MongoDB 是 intended to be run effectively on multiple hosts,所以它是为此而设计的;即使你能找到一种方法将功能正常的副本集硬塞到两台主机上,你也会违背 MongoDB 的设计并努力使其有效地工作。
真的,你最好的选择是 运行 在你的两个主机上的每个主机上一个单一的 mongod 实例,并在第三个(独立的)主机上 运行 一个仲裁器;这种 normal 3-host configuration 是实现数据复制和高可用性的有效且直接的方法。
简单的回答是,不,你做不到..
原因是"majority"。如果你失去了这两个服务器中的一个,你就没有在线投票的多数。
这就是为什么 3 是最小值的原因。可以是3个数据承载节点,也可以是2个数据承载节点加1个仲裁器。所有这些都有一票,如果你失去其中一个,副本集仍然有 2/3 的票数,这是多数票。像 3/5 或 4/7。
值 1/2(或 2/4)不是多数。