目前Mongodb副本集爲三節點+1仲裁節點,已經穩定運行兩年,因爲數據不斷的更新和刪除,存儲空間很大一部分沒有釋放,數據庫中查看數據庫暫用存儲並不大,存儲沒有回收(1.8T數據刪除掉了1.2T),爲了節省成本進行維護。shell
在這裏沒有使用官方的磁盤整理
咱們採用新節點替換老節點的方式,要注意數據庫的oplog設置的大小,是否能存儲全部的信息。
一、添加新的節點從新同步
啓動新節點新節點配置文件和複製集成員配置文件保持一致,數據庫版本也要一致。
新節點1T存儲,咱們有一個節點隱藏專門爲程序統計使用,線上業務程序不可見訪問不到這個節點,
將新節點加入複製集時設置爲隱藏節點
在複製集primary節點操做:
延遲0秒,權重爲0,隱藏開啓,同步索引開啓數據庫
mongo> rs.add({_id:1,host:'10.0.6.44:27010',"slaveDelay":0,"priority":0,"hidden":true,"buildIndexes":true}); mongo> rs.status() #查看節點成員狀態
經過查看節點狀態我發現,新加如的節點同步源咱們的主節點,咱們要保證線上業務,咱們要修改同步源。
二、修改新加入節點同步源ide
Run replSetSyncFrom in the admin database.須要切換到admin數據庫使用此命令。ui
mongo> db.adminCommand( { replSetSyncFrom: "10.0.6.55:27010" }) #設置同步源爲隱藏節點
三、咱們經過命令查看新添加節點是否同步完成
查看節點狀態3d
PRIMARY> rs.status() "members" : [ { "_id" : 1, "name" : "10.0.6.44:27010", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", #由開始的STARTUP2變爲了SECONDARY "uptime" : 2991253, "optime" : { "ts" : Timestamp(1584078756, 24), "t" : NumberLong(1687) }, "optimeDurable" : { "ts" : Timestamp(1584078756, 24), "t" : NumberLong(1687) }, "optimeDate" : ISODate("2020-03-13T05:52:36Z"), "optimeDurableDate" : ISODate("2020-03-13T05:52:36Z"), "lastHeartbeat" : ISODate("2020-03-13T05:52:36.903Z"), "lastHeartbeatRecv" : ISODate("2020-03-13T05:52:37.019Z"), "pingMs" : NumberLong(1), "lastHeartbeatMessage" : "", "syncingTo" : "10.10.20.31:27010", "syncSourceHost" : "10.10.20.31:27010", "syncSourceId" : 5, "infoMessage" : "", "configVersion" : 171 },
查看節點複製是否有延遲日誌
PRIMARY> db.printSlaveReplicationInfo() source: 10.0.6.44:27010 syncedTo: Fri Mar 13 2020 13:49:54 GMT+0800 (CST) 1 secs (0 hrs) behind the primary PRIMARY>
四、隱藏節點數據同步完成之後,修改成程序可見
鏈接到PRIMARY節點code
PRIMARY> conf = rs.conf(); #查看10.0.6.44:27010排序第幾,不是_id PRIMARY> conf.members[3].priority=10 #從第一個節點開始爲0 、一、 二、 3 //10.0.6.44:27010排序3,修改權重爲10 10 rs02:PRIMARY> conf.members[3].hidden=false #隱藏設爲false false PRIMARY> rs.reconfig(conf); #從新加載配置 { "ok" : 1, "operationTime" : Timestamp(1584080742, 1), "$clusterTime" : { "clusterTime" : Timestamp(1584080742, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } PRIMARY> rs.config()
五、查看新節點日誌是否正常
六、能夠關閉老的節點,並在集羣中去掉blog
PRIMARY> rs.remove("10.1.1.77:27030") { "ok" : 1, "operationTime" : Timestamp(1584081322, 1), "$clusterTime" : { "clusterTime" : Timestamp(1584081322, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } PRIMARY>
複製集其多節點採用輪訓替換的方式,完成磁盤整理。排序