我想将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()
的输出。