OPTIONS
翻译或纠错本页面

配置一个隐藏节点

隐藏节点也是 replica set 的一员,但是将不会成为 primary 同时也对应用程序不可见。隐藏节点可以在 elections 中参与投票。有关隐藏节点的更多信息和其用途,请参见 隐藏节点

注意事项

很多情况下将节点设置为隐藏节点是用来协助 delayed members 的。如果我们仅仅需要防止该节点成为主节点,我们可以通过 priority 0 member 来实现。

如果 chainingAllowed 的配置是允许从节点从其他从节点上复制数据的,MongoDB默认会优先选择非隐藏节点来进行复制。MongoDB只会在迫不得以的情况下选择隐藏节点作为数据源。如果我们希望从节点从隐藏节点上复制数据,可以使用 replSetSyncFrom 命令。在使用之前请参考 replSetSyncFrom

在 2.0 版更改: 对于复制集成员版本低于2.0的 sharded clusters ,如果我们需要设置一个节点为隐藏节点,我们就 必须 重启 mongos 来防止应用程序的请求发送到隐藏节点上。

例子

节点配置信息

我们需要将节点的 priority 设置为 0 ,将 hidden 设置为 true 来其设置为隐藏节点。

{
  "_id" : <num>
  "host" : <hostname:port>,
  "priority" : 0,
  "hidden" : true
}

配置步骤

下列的例子将数组下标为 0members 设置为隐藏节点。我们需要登录到主节点上,并指定需要修改配置的 members 数组下标来将其设置为隐藏节点。

cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)

设置完毕后,该从节点的优先级将变为 0 来防止其升职为主节点,同时其也是对应用程序不可见的。在其他节点上执行 isMaster 或是 db.isMaster() 将不会显示隐藏节点。

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

警告

  • 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 来确保选举的正常进行。