1. 程式人生 > 實用技巧 >MongoDB副本集replica set(三)--新增刪除成員

MongoDB副本集replica set(三)--新增刪除成員

上一篇文章中,我們搭建了3個節點的副本集,叢集資訊如下:

rstest:PRIMARY> rs.config()
{
"_id" : "rstest",
"version" : 2,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "192.168.10.41:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "192.168.10.42:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.10.43:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"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("5ef1b03c01bba8d9a6759c18")
}
}

(一)刪除副本整合員

刪除副本整合員可以使用rs.remove()或者rs.reconfig()。

方法一:使用rs.remove刪除"IP為192.168.10.42"的成員

STEP1:關閉要刪除節點的例項

[[email protected] ~]# mongo -u replica -p replica --authenticationDatabase admin
MongoDB shell version v4.2.7
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("946853b3-ad91-44d0-b7df-3001cbfc1af0") }
MongoDB server version: 4.2.7 rstest:SECONDARY> use admin
switched to db admin
rstest:SECONDARY> db.shutdownServer()
2020-06-28T23:47:02.129+0800 I NETWORK [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
server should be down...
2020-06-28T23:47:02.134+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
2020-06-28T23:47:02.134+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
2020-06-28T23:47:02.137+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
2020-06-28T23:47:02.137+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
>

STEP2:連線到主節點,不知道主節點,可以使用db.isMaster()確認

STEP3:在主節點上刪除成員

rstest:PRIMARY> rs.remove("192.168.10.42:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1593359559, 1),
"signature" : {
"hash" : BinData(0,"UpD/BEf5OF484ZeHTHCEDReiJKw="),
"keyId" : NumberLong("6841443127941660675")
}
},
"operationTime" : Timestamp(1593359559, 1)
}
rstest:PRIMARY>

方法二:使用rs.reconfig刪除成員

這裡不再演示,見官方檔案:https://docs.mongodb.com/manual/tutorial/remove-replica-set-member/

(二)新增副本整合員

這裡演示如何把上面已經刪除的節點重新添加回來。

STEP1:啟動節點,節點的啟動引數必須含有叢集引數。主要引數如下:

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. security:
authorization: enabled
keyFile: /mongo/mongo-keyfile replication:
replSetName: rstest

STEP2:在主節點上執行新增節點命令

rs.add( { host: "192.168.10.42:27017", priority: 0, votes: 0 } )

注意:當新新增伺服器的priority和votes大於0時,在其初始同步期間,即使該伺服器由於資料不一致而無法提供讀取服務或成為主伺服器,但是他仍會作為有表決權的成員,這可能會導致多數投票成員線上但是無法選舉主成員的情況。

STEP3:確保新加入的成員狀態已經轉變為SECONDARY

rs.status()

STEP4:如果新成員狀態已經轉變為SECONDARY,如果需要,可以使用rs.reconfig()更改新成員的priority和votes。

var cfg = rs.conf();
cfg.members[3].priority = 1
cfg.members[3].votes = 1
rs.config(cfg)

【完】