文档菜单
文档首页
/
MongoDB 手册
/ / /

从自管理副本集中移除成员

本页内容

  • 使用以下方法移除成员使用 rs.remove() 移除成员
  • 使用 rs.reconfig() 移除成员

要移除一个副本集成员,可以使用以下任一程序。

  1. 关闭要删除的成员的 mongod 实例。要关闭实例,请使用mongosh 并使用 db.shutdownServer() 方法。

  2. 连接到副本集的当前 primary。要确定当前主节点,请在连接到副本集的任何成员时使用 db.hello()

  3. 使用以下任一形式使用 rs.remove() 来删除成员

    rs.remove("mongod3.example.net:27017")
    rs.remove("mongod3.example.net")

    如果副本集需要选举新的主节点,MongoDB 可能会暂时断开 shell 的连接。在这种情况下,shell 将自动重新连接。即使命令成功执行,shell 也可能显示 DBClientCursor::init call() failed 错误。

您可以通过使用一个不包含该成员的 replica configuration document 来从 members 数组中删除该成员来重新配置副本集。

rs.reconfig() 允许每次添加或删除不超过 1voting 成员。要从副本集中删除多个投票成员,请执行一系列 rs.reconfig() 操作,每次删除一个成员。有关更多信息,请参阅 Reconfiguration Can Add or Remove No More than One Voting Member at a Time

  1. 关闭您要移除的成员的 mongod 实例。要关闭实例,使用 mongosh 并使用 db.shutdownServer() 方法。

  2. 连接到副本集的当前 primary。要确定当前主节点,请在连接到副本集的任何成员时使用 db.hello()

  3. 执行 rs.conf() 方法以查看当前配置文档并确定要移除的成员在 members 数组中的位置

    示例

    mongod_C.example.net 在以下配置文件中位置为 2

    {
    "_id" : "rs",
    "version" : 7,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongod_A.example.net:27017"
    },
    {
    "_id" : 1,
    "host" : "mongod_B.example.net:27017"
    },
    {
    "_id" : 2,
    "host" : "mongod_C.example.net:27017"
    }
    ]
    }
  4. 将当前配置文档赋值给变量 cfg

    cfg = rs.conf()
  5. 修改 cfg 对象以移除成员。

    示例

    要移除 mongod_C.example.net:27017,使用以下 JavaScript 操作

    cfg.members.splice(2,1)
  6. 通过以下操作用新配置覆盖副本集配置文档

    rs.reconfig(cfg)
  7. 要确认新配置,执行 rs.conf().

    上面的示例输出将如下

    {
    "_id" : "rs",
    "version" : 8,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongod_A.example.net:27017"
    },
    {
    "_id" : 1,
    "host" : "mongod_B.example.net:27017"
    }
    ]
    }

返回

添加仲裁者