OPTIONS
翻译或纠错本页面

禁止从节点升职为主节点

概述

在复制集的默认设置下。 secondary 是有机会在选举中升职为主节点的。我们可以调节 priority 来使得某个节点成为主节点的可能性更高或者更低又或是禁止其成为主节点。

不能成为主节点的从节点也不会触发选举。在其他方面与其他从节点无区别。

我们可以将 secondary 的优先级设置为 0 来阻止其在选举中升职为 primary 。 关于这样的设定的意义请参见 优先级为0的复制集成员

注意事项

当更新修改复制集配置的时候,我们通过 members数组下标 (array index)来指定需要修改的节点。数组下标从 0 开始。不要将数组下标与 members 中的 _id 字段混淆了。

注解

MongoDB不能将现在的 primary 的优先级设置为 0 。为了防止现有的主节点再次成为主节点,我们需要先使用 rs.stepDown() 来将主节点降职。

步骤

本文使用了由5个节点组成的复制集为例。

警告

  • The rs.reconfig() shell method can force the current primary to step down, which causes an election. When the primary steps down, the mongod closes all client connections. While this typically takes 10-20 seconds, try to make these changes during scheduled maintenance periods.
  • 为了能让复制集的配置修改成功应用,我们需要确保复制集的多数节点是可用的。如果我们的复制集是由偶数个节点组成的,那就需要新增一个 arbiter 来确保选举的正常进行。

1

获取现在的复制集配置

The rs.conf() method returns a replica set configuration document that contains the current configuration for a replica set.

连接到主节点的 mongo 窗口中,执行 rs.conf() 命令,并将其结果赋值给一个参数。

cfg = rs.conf()

返回的信息中的 members 字段包含了各个节点的配置信息。

2

将优先级设置为 0

为了防止从节点升职为主节点,将该从节点的 priority 设置为 0

通过节点配置文件中的数组下标来设置该节点的优先级。下面的例子将配置信息中数组下标为 2members 的优先级设置为了0 。

cfg.members[2].priority = 0

复制集的配置只会在你将新配置应用到复制集中后才会生效。

3

应用新的复制集配置

通过 rs.reconfig() 命令来应用复制集新的配置并生效。

通过 rs.reconfig() 来应用 ``cfg``参数。

rs.reconfig(cfg)