【问题标题】:MongoDb arbiter can be used with multiple replicaSets?MongoDb仲裁器可以与多个replicaSets一起使用吗?
【发布时间】:2012-08-21 05:07:08
【问题描述】:

如果我有针对不同国家/地区的不同网页,并且每个网页都有 2-3 个节点的 mongodb 副本集,我可以使用具有多个副本集的仲裁器,以便它全部投票吗?

或者我需要为每个副本集启动一个仲裁器?

【问题讨论】:

  • 所以你有更多的replicaSet,每个replicaSet有2-3个节点,对吧?您希望一个仲裁器位于多个副本集中吗?
  • 问题在于,当你启动一个 mongod 实例时,你必须指定 -replSet 参数,从而将潜在的仲裁者链接到那个特定的副本集。所以,我认为你不能在多个副本集上使用一个仲裁器。但是为每个副本集启动一个新的仲裁器并不是什么大问题,因为仲裁器实例非常轻量级。
  • 是的,这就是问题所在。我会再等等看,但你的答案似乎合乎逻辑。
  • 跨多个数据中心运行 MongoDB 的每个解决方案都是经过修补的解决方案。不要相信 10gen 制造的所有营销热潮。 MongoDB 的复制模型是有限的,并且存在部分缺陷。
  • 正如@AndreiSfat 建议的那样.. 一个副本集成员(仲裁器或数据节点)只能属于一个副本集。仲裁进程是轻量级的,因为它不保存任何数据,只参与选举。仲裁者的主要目的是在副本集中有偶数个成员并且需要打破平局投票的情况。

标签: mongodb replication database-replication


【解决方案1】:

您可以在单个服务器(不同端口)上运行多个仲裁进程。他们在资源方面非常轻量级,因为他们所做的只是投票。您应该考虑使用以下参数启动仲裁器,以使它们尽可能轻量级(来自Command Line Parameters Page):

  • --smallfiles - 使用较小的初始文件大小 (16MB) 和最大大小 (512MB)
  • --nojournal - 禁用日志。在 v2.0+ 中,日志功能默认为 64 位启用

如果您不使用这些选项运行,那么仲裁器仍然可以工作,但会在它知道自己是仲裁器之前预先分配数据文件。

更新(2018 年 1 月): 由于编写了此答案,因此官方指南已添加到仲裁器启动选项的文档中,包括新配置格式的选项。可以找到here

【讨论】:

  • 谢谢@Adam。为了减少服务器的数量,这对我来说是一个非常重要的问题和答案,但它有点过时了:你的答案对 MongoDB 3.4 仍然有效吗?
  • @Delmo 是的,仲裁者的工作方式没有改变;它们仍然是轻量级的,因此您可以在单个实例上运行多个仲裁器。不过,请仔细检查这些参数,因为迁移到 WiredTiger 意味着它们在最近的 MongoDB 版本中的工作方式有所不同。
  • 感谢@VinceBowdren 添加了更新以反映最新版本的当前官方指南
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
相关资源
最近更新 更多