使用Arbiter在AZURE上设置Mongodb副本

问题描述 投票:0回答:1

我想将MongoDB与复制一起使用;我创建了一个具有2个辅助节点和1个仲裁器的VM:

  • 1小学
  • 2中学
  • 1个仲裁者

我试图理解这个系统是如何工作的,所以我有一些问题:

1)根据信息“如果副本集具有偶数个成员,则添加仲裁者。”我添加了一个仲裁器。但我不确定我是否做得正确。这个偶数是否适用于次要或总共所有成员?

2)这个仲裁者在做什么?我实际上不理解它的工作。

3)我为每个VM创建了公共IP地址,以便从外部连接到它们。我使用此连接字符串从我的应用程序成功连接:

mongodb的://用户名:密码@ VM0:27017,VM1:27017,VM2:27017 / DBNAME replicaSet = XXX&readPreference = primaryPreferred

我没有在这个连接字符串中添加仲裁器但是我应该添加它吗?

4)当我关闭主计算机时,其中一台辅助计算机成功地成为我期望的主计算机。在这种情况下没有问题;但是当我关闭第二台主机时,我的应用程序会抛出一个错误。第二个辅助节点尚未成为主要节点 - 为什么会发生这种情况?

5)如果所有虚拟机都在工作,但我关闭仲裁器,我的应用程序再次抛出错误,我无法连接到数据库。我正在尝试这个,因为我正在考虑仲裁机器上是否存在错误的情况,并且由于维护或任何其他问题,将来可能会关闭它。

也许是因为我不理解仲裁者的角色;我认为这是错误的,但为什么它没有将任何辅助机器转换为仲裁器?为什么当我关闭仲裁器时,整个系统不起作用?

谢谢。

mongodb replicaset
1个回答
1
投票

1)如果您有1个主要和2个辅助,则您的副本集中有3个成员。因此,您不应该添加仲裁者。您已经拥有奇数个节点。

2)仲裁器是一个不保存数据且不能被选为主节点的节点。它仅用于在当前主节点关闭时选择新的主节点。

例如,假设您有1个主要和1个辅助。副本集有2个成员。如果主服务器发生故障,副本集将尝试投票以选择新的主节点。为了选举一个节点,它需要赢得超过一半的选票。但如果中学选举自己投票,它将只获得2票中的1票。这不会超过一半,所以不会当选。因此,副本集将无法选择新的主节点,并且您的整个副本集将会关闭。

要解决此问题,您可以将仲裁服务器添加到副本集。这通常是一个小得多的机器,因为它不需要保存数据。它只有一份工作,在选举中投票给中学成为新的小学。

但是,由于您已经拥有3个数据承载节点,因此您不需要添加仲裁器。 You can read more about arbiters here

3)您可以将仲裁器添加到连接字符串,但通常您不需要。添加数据承载节点就好了。这就是人们通常所做的事情。

4)副本集中有4个成员。你取下了其中的2个。这意味着只剩2票。最终的中学将无法获得超过50%的选票,因此不会选出小学。

一般来说,测试两个节点是否过度。您可能需要3个成员的副本集。每个成员应位于不同的可用区域(Azure中的Availability Set)。如果两个节点关闭,则您的副本集将不可用。但是,如果所有节点都在不同的可用区域中,则两个节点同时发生故障的可能性很小。因此,不要过多担心多个节点发生故障。如果这是一个真正的问题(在大多数应用程序中它确实不是),你想要制作一个5成员的副本集。

5)这很奇怪。这听起来像您的副本集可能配置不正确。正如我所说,无论如何你都不需要仲裁者。所以你可以尝试在没有仲裁器的情况下重新设置它,看它是否有效。如果您仍然遇到问题,请打开一个新问题。确保在您的问题中包含运行rs.status()的输出。

© www.soinside.com 2019 - 2024. All rights reserved.