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:關閉要刪除節點的實例

[root@mongodbserver2 ~]# 
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.reconfig(cfg)

 

 

【完】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM