MongoDB仲裁者可以与多个副本集一起使用吗?

9
如果我为不同的国家拥有不同的网页,每个网页都有一个由2-3个节点组成的mongodb副本集,那么我可以使用一个拥有多个副本集的仲裁者来投票吗?还是我需要为每个副本集启动一个仲裁者?

1
所以你有更多的副本集,每个副本集都有2-3个节点,对吧?你想让一个单独的仲裁者在多个副本集中存在? - Andrei Sfat
1
问题在于,当您启动mongod实例时,必须指定-replSet参数,从而将潜在的仲裁者链接到该特定的副本集。因此,我认为您不能在多个副本集上使用单个仲裁者。但是,为每个副本集启动一个新的仲裁者并不是什么大问题,因为仲裁者实例非常轻量级。 - Andrei Sfat
1
在多个数据中心运行MongoDB的每个解决方案都是一个临时应急方案。不要轻信10gen营销宣传所说的一切。MongoDB的复制模型存在局限性和部分缺陷。 - user2665694
正如@AndreiSfat所建议的那样,副本集成员(仲裁者或数据节点)只能属于一个副本集。 仲裁进程是轻量级的,因为它不持有任何数据,只参与选举。 仲裁者的主要目的是在您的副本集中具有偶数成员并需要决定胜负时使用。 - Stennie
我只想在我的数据中心之外维护一份副本,并在数据中心发生故障时切换至该副本。如果在切换过程中丢失一些数据,这并不是关键性的问题。 - Wiliam
显示剩余5条评论
1个回答

9
您可以在单个服务器上运行多个仲裁进程(不同的端口)。 从资源方面来说,它们非常轻量级,因为它们只是投票。您应该查看以下参数以尽可能使仲裁进程保持轻量级(来自命令行参数页面):
  • --smallfiles - 使用较小的初始文件大小(16MB)和最大大小(512MB)
  • --nojournal - 禁用日志记录。 在v2.0+中,默认情况下启用64位日志记录
如果您不使用这些选项,则仲裁者仍将正常工作,但它将在知道它是仲裁者之前预分配数据文件。 更新(2018年1月):自本答案编写以来,已经向文档添加了有关仲裁者启动选项的官方指导,包括新配置格式中的选项。 可以在此处找到。

谢谢@Adam。这是一个对我非常重要的问题和答案,因为它可以帮助我减少服务器数量,但是它有点过时了,所以:你的答案对于MongoDB 3.4仍然有效吗? - Delmo
@Delmo 是的,仲裁者的工作方式没有改变;它们仍然是轻量级的,因此您可以在单个实例上运行多个仲裁者。但请再次检查这些参数,因为转移到WiredTiger意味着它们在最近的MongoDB版本中的工作方式有所不同。 - Vince Bowdren
感谢@VinceBowdren,已添加更新以反映更近期版本的官方指南。 - Adam Comerford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接