• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Mongodb 从副本集移除成员

武飞扬头像
Ethanchen's notes
帮助1

从副本集中移除成员可以使用以下2种方法

要删除副本集的成员,请使用以下任一过程

方法一: rs.remove()

  • 关闭mongod要删除的成员的实例。要关闭实例,请使用 mongoshell 和db.shutdownServer() 方法进行连接。
# 当前实例进程三个节点
root@ubuntu-x64_01:/opt# ps -ef | grep mongodb 
mongodb   1431     1  1 13:12 ?        00:00:30 /usr/local/mongodb/bin/mongod --config /etc/mongod.conf
mongodb   1509     1  1 13:12 ?        00:00:28 /usr/local/mongodb/bin/mongod --config /etc/mongod27018.conf
mongodb   1583     1  1 13:12 ?        00:00:28 /usr/local/mongodb/bin/mongod --config /etc/mongod27019.conf
root      1940  1409  0 13:52 pts/0    00:00:00 grep mongodb

# 通过 shutdown 命令关闭实例进程
root@ubuntu-x64_01:/opt# su mongodb -s /bin/bash -c "/usr/local/mongodb/bin/mongod --dbpath /data/mongodb27019/data  --port 27019  --shutdown"
{"t":{"$date":"2023-01-30T13:53:20.405 08:00"},"s":"I",  "c":"CONTROL",  "id":23285,   "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"}
{"t":{"$date":"2023-01-30T13:53:20.411 08:00"},"s":"W",  "c":"ASIO",     "id":22601,   "ctx":"main","msg":"No TransportLayer configured during NetworkInterface startup"}
{"t":{"$date":"2023-01-30T13:53:20.411 08:00"},"s":"I",  "c":"NETWORK",  "id":4648601, "ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."}
killing process with pid: 1583

# 关闭后进程已剩下2个节点
root@ubuntu-x64_01:/opt# ps -ef |grep mongodb 
mongodb   1431     1  1 13:12 ?        00:00:30 /usr/local/mongodb/bin/mongod --config /etc/mongod.conf
mongodb   1509     1  1 13:12 ?        00:00:29 /usr/local/mongodb/bin/mongod --config /etc/mongod27018.conf
root      1971  1409  0 13:53 pts/0    00:00:00 grep mongodb
  • 连接到副本集的当前primary。要确定当前主节点,db.hello() 或者 rs.hell() 请在连接到副本集的任何成员时使用。请看下 primary 和 me 的值是否一样!!!
# 操作前检查下节点状态 
sit_rs1:PRIMARY> rs.hello()
{
        "topologyVersion" : {
                "processId" : ObjectId("63d751d543212b41ac592d31"),
                "counter" : NumberLong(6)
        },
        "hosts" : [
                "192.168.88.11:27018",
                "192.168.88.11:27019",
                "192.168.88.11:27017"
        ],
        "setName" : "sit_rs1",
        "setVersion" : 14,
        "isWritablePrimary" : true,
        "secondary" : false,
        "primary" : "192.168.88.11:27017",
        "me" : "192.168.88.11:27017",
        "electionId" : ObjectId("7fffffff0000000000000060"),
        "lastWrite" : {
                "opTime" : {
                        "ts" : Timestamp(1675058065, 1),
                        "t" : NumberLong(96)
                },
                "lastWriteDate" : ISODate("2023-01-30T05:54:25Z"),
                "majorityOpTime" : {
                        "ts" : Timestamp(1675058065, 1),
                        "t" : NumberLong(96)
                },
                "majorityWriteDate" : ISODate("2023-01-30T05:54:25Z")
        },
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 100000,
        "localTime" : ISODate("2023-01-30T05:54:32.534Z"),
        "logicalSessionTimeoutMinutes" : 30,
        "connectionId" : 47,
        "minWireVersion" : 0,
        "maxWireVersion" : 9,
        "readOnly" : false,
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1675058065, 1),
                "signature" : {
                        "hash" : BinData(0,"IaigLTs5WhdGW6FOJ aI76BLtD4="),
                        "keyId" : NumberLong("7135350621929996293")
                }
        },
        "operationTime" : Timestamp(1675058065, 1)
}
  • 使用rs.remove()以下任一形式删除成员:
    rs.remove(“IP:27017”) – 带端口
    rs.remove(“IP”) – 不带端口(默认27017)
    案例我们停止的 27019 这个实例,所以在操作时,要带上端口,如下
sit_rs1:PRIMARY> rs.remove("192.168.88.11:27019")
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1675058185, 1),
                "signature" : {
                        "hash" : BinData(0,"jvyLPYHG4aMMqck56Z0VmZR4Cro="),
                        "keyId" : NumberLong("7135350621929996293")
                }
        },
        "operationTime" : Timestamp(1675058185, 1)
}


# 在检查下节点数量 
sit_rs1:PRIMARY> rs.hello()
{
        "topologyVersion" : {
                "processId" : ObjectId("63d751d543212b41ac592d31"),
                "counter" : NumberLong(7)
        },
        "hosts" : [
                "192.168.88.11:27018",
                "192.168.88.11:27017"
        ],
        "setName" : "sit_rs1",
        "setVersion" : 15,
        "isWritablePrimary" : true,
        "secondary" : false,
        "primary" : "192.168.88.11:27017",
        "me" : "192.168.88.11:27017",
        "electionId" : ObjectId("7fffffff0000000000000060"),
        "lastWrite" : {
                "opTime" : {
                        "ts" : Timestamp(1675058185, 1),
                        "t" : NumberLong(96)
                },
                "lastWriteDate" : ISODate("2023-01-30T05:56:25Z"),
                "majorityOpTime" : {
                        "ts" : Timestamp(1675058185, 1),
                        "t" : NumberLong(96)
                },
                "majorityWriteDate" : ISODate("2023-01-30T05:56:25Z")
        },
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 100000,
        "localTime" : ISODate("2023-01-30T05:56:33.585Z"),
        "logicalSessionTimeoutMinutes" : 30,
        "connectionId" : 47,
        "minWireVersion" : 0,
        "maxWireVersion" : 9,
        "readOnly" : false,
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1675058185, 1),
                "signature" : {
                        "hash" : BinData(0,"jvyLPYHG4aMMqck56Z0VmZR4Cro="),
                        "keyId" : NumberLong("7135350621929996293")
                }
        },
        "operationTime" : Timestamp(1675058185, 1)
}

如果副本集需要选择一个新的主节点,MongoDB 可能会短暂地断开 shell。在这种情况下,shell 会自动重新连接。

方法二: rs.reconfig()

您可以通过使用副本配置文档重新配置副本集来删除该成员。

从 MongoDB 4.4 开始,一次rs.reconfig()只允许添加或删除1 voting成员。

要从副本集中删除多个投票成员,请发出一系列rs.reconfig()操作以一次删除一个成员。

  • 关闭mongod要删除的成员的实例。要关闭实例,请使用 mongoshell 和db.shutdownServer() 方法进行连接。(关闭方法和上面一样!!!)
# 操作前检查下当前状态
sit_rs1:PRIMARY> db.hello()
{
        "topologyVersion" : {
                "processId" : ObjectId("63d751d8704e9e9d6f5f165e"),
                "counter" : NumberLong(11)
        },
        "hosts" : [
                "192.168.88.11:27018",
                "192.168.88.11:27017",
                "192.168.88.11:27019"
        ],
        "setName" : "sit_rs1",
        "setVersion" : 17,
        "isWritablePrimary" : true,
        "secondary" : false,
        "primary" : "192.168.88.11:27018",
        "me" : "192.168.88.11:27018",
        "electionId" : ObjectId("7fffffff0000000000000062"),
        "lastWrite" : {
                "opTime" : {
                        "ts" : Timestamp(1675073774, 1),
                        "t" : NumberLong(98)
                },
                "lastWriteDate" : ISODate("2023-01-30T10:16:14Z"),
                "majorityOpTime" : {
                        "ts" : Timestamp(1675073774, 1),
                        "t" : NumberLong(98)
                },
                "majorityWriteDate" : ISODate("2023-01-30T10:16:14Z")
        },
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 100000,
        "localTime" : ISODate("2023-01-30T10:16:15.898Z"),
        "logicalSessionTimeoutMinutes" : 30,
        "connectionId" : 91,
        "minWireVersion" : 0,
        "maxWireVersion" : 9,
        "readOnly" : false,
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1675073774, 1),
                "signature" : {
                        "hash" : BinData(0,"PQBR9PZWQAsACLHcYYwaZAbkiao="),
                        "keyId" : NumberLong("7135350621929996293")
                }
        },
        "operationTime" : Timestamp(1675073774, 1)
}
  • 发出rs.conf()查看当前配置文档的方法并确定 members要删除的成员在数组中的位置:
sit_rs1:PRIMARY> rs.conf()
{
        "_id" : "sit_rs1",
        "version" : 17,
        "term" : 98,
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "192.168.88.11:27018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.88.11:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 4,
                        "host" : "192.168.88.11:27019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : -1,
                "catchUpTakeoverDelayMillis" : 30000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("6305db8beb57aaf6f57b130e")
        }
}
  • 将当前配置文件赋值给变量cfg:
sit_rs1:PRIMARY> var cfg = rs.conf()
  • 修改cfg对象以移除成员。
    比如要删除: 192.168.88.11:27019,请使用以下 JavaScript 操作:
sit_rs1:PRIMARY> cfg.members.splice(2,1)
[
        {
                "_id" : 4,
                "host" : "192.168.88.11:27019",
                "arbiterOnly" : false,
                "buildIndexes" : true,
                "hidden" : false,
                "priority" : 1,
                "tags" : {

                },
                "slaveDelay" : NumberLong(0),
                "votes" : 1
        }
]
  • 通过发出以下命令,用新配置覆盖副本集配置文档:
sit_rs1:PRIMARY> rs.reconfig(cfg)
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1675074964, 1),
                "signature" : {
                        "hash" : BinData(0,"L5AcPvKzh/miCSYOazvh0XeEPyc="),
                        "keyId" : NumberLong("7135350621929996293")
                }
        },
        "operationTime" : Timestamp(1675074964, 1)
}


# 重新检查配置: 现在只有两个节点!!!!
sit_rs1:PRIMARY> rs.conf()
{
        "_id" : "sit_rs1",
        "version" : 18,
        "term" : 98,
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "192.168.88.11:27018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "192.168.88.11:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : -1,
                "catchUpTakeoverDelayMillis" : 30000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("6305db8beb57aaf6f57b130e")
        }
}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgacgka
系列文章
更多 icon
同类精品
更多 icon
继续加载