mongodb副本集添加節(jié)點

mongodb副本集架構(gòu)運行一段時間后如果業(yè)務(wù)發(fā)展需要新增新的成員,或者遷移集群,則可以參考本文處理
1.? 準(zhǔn)備工作
有一套mongodb 副本集的集群,部署方式參考 mongodb 4.0副本集搭建
準(zhǔn)備一個新節(jié)點,使用和原副本集版本一致的mongodb
拷貝原副本集中的配置文件、keyfile文件,并注意修改keyfile文件的權(quán)限(600)
| 節(jié)點 | 角色 |
| 192.168.56.199:27017 | PRIMARY |
| 192.168.56.198:27018 | SECONDARY |
| 192.168.56.199:27018 | ARBITER |
準(zhǔn)備加入的新節(jié)點: 192.168.56.197:27017
2.? 添加節(jié)點
2.1 啟動新節(jié)點
例如,原節(jié)點的版本是4.2.8,新節(jié)點版本一致,路徑一致,然后啟動新節(jié)點
/usr/local/mongodb/bin/mongod -f /data/mongodb/27017/etc/mongodb.conf2.2 主庫上查看當(dāng)前節(jié)點及配置信息
使用rs.config()查看配置信息
test12:PRIMARY> rs.config(){"_id" : "test12","version" : 1,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.56.198:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 1,"host" : "192.168.56.199:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 2,"host" : "192.168.56.199:27018","arbiterOnly" : true,"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("61b86af0a21015e69623e18d")}}
test12:PRIMARY> rs.status(){"set" : "test12","date" : ISODate("2021-12-14T10:07:46.561Z"),"myState" : 1,"term" : NumberLong(1),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"lastCommittedWallTime" : ISODate("2021-12-14T10:07:42.560Z"),"readConcernMajorityOpTime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"readConcernMajorityWallTime" : ISODate("2021-12-14T10:07:42.560Z"),"appliedOpTime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"lastAppliedWallTime" : ISODate("2021-12-14T10:07:42.560Z"),"lastDurableWallTime" : ISODate("2021-12-14T10:07:42.560Z")},"lastStableRecoveryTimestamp" : Timestamp(1639476442, 1),"lastStableCheckpointTimestamp" : Timestamp(1639476442, 1),"electionCandidateMetrics" : {"lastElectionReason" : "electionTimeout","lastElectionDate" : ISODate("2021-12-14T09:59:22.407Z"),"electionTerm" : NumberLong(1),"lastCommittedOpTimeAtElection" : {"ts" : Timestamp(0, 0),"t" : NumberLong(-1)},"lastSeenOpTimeAtElection" : {"ts" : Timestamp(1639475952, 1),"t" : NumberLong(-1)},"numVotesNeeded" : 2,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"numCatchUpOps" : NumberLong(0),"newTermStartDate" : ISODate("2021-12-14T09:59:22.431Z"),"wMajorityWriteAvailabilityDate" : ISODate("2021-12-14T09:59:23.493Z")},"members" : [{"_id" : 0,"name" : "192.168.56.198:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 514,"optime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"optimeDurable" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2021-12-14T10:07:42Z"),"optimeDurableDate" : ISODate("2021-12-14T10:07:42Z"),"lastHeartbeat" : ISODate("2021-12-14T10:07:45.153Z"),"lastHeartbeatRecv" : ISODate("2021-12-14T10:07:46.542Z"),"pingMs" : NumberLong(1),"lastHeartbeatMessage" : "","syncingTo" : "192.168.56.199:27017","syncSourceHost" : "192.168.56.199:27017","syncSourceId" : 1,"infoMessage" : "","configVersion" : 1},{"_id" : 1,"name" : "192.168.56.199:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 1001,"optime" : {"ts" : Timestamp(1639476462, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2021-12-14T10:07:42Z"),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1639475962, 1),"electionDate" : ISODate("2021-12-14T09:59:22Z"),"configVersion" : 1,"self" : true,"lastHeartbeatMessage" : ""},{"_id" : 2,"name" : "192.168.56.199:27018","health" : 1,"state" : 7,"stateStr" : "ARBITER","uptime" : 514,"lastHeartbeat" : ISODate("2021-12-14T10:07:44.896Z"),"lastHeartbeatRecv" : ISODate("2021-12-14T10:07:44.896Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","configVersion" : 1}],"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1639476462, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1639476462, 1)}
2.3? 將新節(jié)點添加至集群
在主庫上執(zhí)行rs.add()將新節(jié)點添加進(jìn)集群中
生產(chǎn)環(huán)境添加節(jié)點時,建議將priority及votes設(shè)為0,即不會選為主(priority默認(rèn)1),也沒有投票特性(votes默認(rèn)1,有投票權(quán))
test12:PRIMARY>?rs.add(?{?host:?"192.168.56.197:27017",?priority:?0,?votes:?0?}?){"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1639476997, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1639476997, 1)}
另外,生產(chǎn)環(huán)境是從主庫拉取全量數(shù)據(jù),如果數(shù)據(jù)量較大,則需要觀察主庫的壓力及對線上業(yè)務(wù)的影響。
同步數(shù)據(jù)的過程中,新節(jié)點的狀態(tài)stateStr 為STARTUP2,待同步完成后會變?yōu)镾ECONDARY。
2.4? 重置新節(jié)點的屬性
此時再用rs.config()查看新節(jié)點狀態(tài),priority及votes是之前設(shè)的0,可以使用 rs.recofig()命令進(jìn)行調(diào)整
test12:PRIMARY> rs.config(){"_id" : "test12","version" : 2,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.56.198:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 1,"host" : "192.168.56.199:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 2,"host" : "192.168.56.199:27018","arbiterOnly" : true,"buildIndexes" : true,"hidden" : false,"priority" : 0,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 3,"host" : "192.168.56.197:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 0,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 0}],"settings" : {"chainingAllowed" : true,"heartbeatIntervalMillis" : 2000,"heartbeatTimeoutSecs" : 10,"electionTimeoutMillis" : 10000,"catchUpTimeoutMillis" : -1,"catchUpTakeoverDelayMillis" : 30000,"getLastErrorModes" : {},"getLastErrorDefaults" : {"w" : 1,"wtimeout" : 0},"replicaSetId" : ObjectId("61b86af0a21015e69623e18d")}}
從上面可以看到新節(jié)點的id為3 ,則可以通過如下命令調(diào)整對應(yīng)的屬性
var cfg = rs.conf()cfg.members[3].priority = 1cfg.members[3].votes = 1rs.reconfig(cfg)
調(diào)整后再查看,屬性已調(diào)整
test12:PRIMARY> rs.config(){"_id" : "test12","version" : 3,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.56.198:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 1,"host" : "192.168.56.199:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 2,"host" : "192.168.56.199:27018","arbiterOnly" : true,"buildIndexes" : true,"hidden" : false,"priority" : 0,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 3,"host" : "192.168.56.197: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("61b86af0a21015e69623e18d")}}
至此,新節(jié)點便加入了副本集中
3. 注意點總結(jié)
一個副本集,最多可以擁有50個secondary,最多可以有7個投票成員,在副本集里面添加一個新成員,如果之前副本集已經(jīng)有了7個成員,那么可以設(shè)置成非投票成員,或者你從移除之前一個投票成員出來
新節(jié)點的版本、配置建議與原集群一致
注意添加新節(jié)點前確定網(wǎng)絡(luò)互通
如果集群數(shù)據(jù)量較大,則選擇業(yè)務(wù)低峰期添加節(jié)點,并觀察壓力情況
新節(jié)點加入時建議將priority及votes設(shè)為0

1.??MySQL高可用之MHA集群部署
2.??mysql8.0新增用戶及加密規(guī)則修改的那些事
3.? 比hive快10倍的大數(shù)據(jù)查詢利器-- presto
4. ?監(jiān)控利器出鞘:Prometheus+Grafana監(jiān)控MySQL、Redis數(shù)據(jù)庫
5.? PostgreSQL主從復(fù)制--物理復(fù)制
6.??MySQL傳統(tǒng)點位復(fù)制在線轉(zhuǎn)為GTID模式復(fù)制



