Mongodb 从副本集移除成员
从副本集中移除成员可以使用以下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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13