MongoDB复制品在Azure上带有仲裁者



我想将mongodb与复制使用;我创建了一个带有2个次要节点和1个杂货商的VM:

  • 1个主要
  • 2次级
  • 1个杂志

我试图了解该系统的工作原理,所以我有一些问题:

1)根据信息" ,如果复制品集具有均匀数量的成员,请添加杂物。"我添加了一个杂物。但是我不确定我是否正确完成了。这个偶数数字适用于次级或总计所有成员吗?

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

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

mongodb://用户名:password@vm0:27017,vm1:27017,vm2:27017/dbname?replicaset = xxx& readPreference = prientialpreferred

我没有在此连接字符串中添加仲裁器,但我是否应该添加它?

4)当我关闭主计算机时,二级机器之一成功地成为了我所期望的主要机器。在这种情况下没有问题。但是,当我关闭第二个主机时,我的应用程序会引发错误。第二个次级节点尚未成为主要节点 - 为什么会发生这种情况?

5)如果所有VM都在工作,但是我关闭了仲裁员,我的应用程序再次引发错误,我无法连接到DB。我正在尝试此操作,因为我正在考虑是否在仲裁机上出现问题,并且由于维护或任何其他问题,将来可能会关闭它。

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

谢谢。

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

2)仲裁器是一个节点,不容纳数据,不能作为主要的选举。如果当前的主要降低,它仅用于选举新的初级。

例如,假设您有1个主要和1个次级。复制品集有2个成员。如果主要降低,副本集将尝试投票选举新的初选。为了当选节点,它需要赢得一半的选票。但是,如果次要投票本身,它将只能获得2票中的1票。那是不超过一半,因此不会当选。因此,复制品集将无法选举新的主要主题,并且您的整个副本集将下降。

为了解决此问题,您可以在复制品集中添加仲裁器。这通常是一台小得多的机器,因为它不需要持有数据。它只有一份工作,投票给次要是选举的新主要。

但是,由于您已经有3个具有数据的节点,因此您不想添加仲裁者。您可以在此处阅读有关仲裁员的更多信息。

3)您可以将仲裁者添加到连接字符串中,但通常您不需要。添加包含数据的节点就可以了。那就是人们通常会做的。

4)您在副本集中有4个成员。你删除了其中的两个。这意味着只剩下2票。最后的次要将无法获得超过50%的选票,因此不会选出任何主要的选票。

通常,测试两个节点下降是过度杀伤。您可能需要3个成员副本集。每个成员应位于不同的可用性区域(Azure中的可用性设置)。如果两个节点下降,则不可用的副本将是不可用的。但是,如果所有节点都处于不同的可用性区域,则两个节点同时下降的可能性很大。因此,不必太担心一个以上的节点下降。如果这是一个真正的问题(在大多数应用程序中,实际上不是),则要制作5个会员副本。

5)这很奇怪。这听起来像是您的副本集可能会被错误地配置。就像我说的那样,无论如何您都不需要仲裁者。因此,您可以尝试在没有仲裁者的情况下再次设置它,然后看看它是否有效。如果您仍然遇到问题,请打开一个新问题。确保在问题中包括运行rs.status()的输出。

最新更新