Mongodb副本集存儲回收

描述:

目前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() #查看節點成員狀態

經過查看節點狀態我發現,新加如的節點同步源咱們的主節點,咱們要保證線上業務,咱們要修改同步源。
Mongodb副本集存儲回收
二、修改新加入節點同步源ide

在複製集primary節點操做

Run replSetSyncFrom in the admin database.須要切換到admin數據庫使用此命令。ui

mongo> db.adminCommand( { replSetSyncFrom: "10.0.6.55:27010" })
#設置同步源爲隱藏節點

Mongodb副本集存儲回收

查看是否修改爲功:

Mongodb副本集存儲回收
三、咱們經過命令查看新添加節點是否同步完成
查看節點狀態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>

複製集其多節點採用輪訓替換的方式,完成磁盤整理。排序

相關文章
相關標籤/搜索