mongodb叢集重構,釋放磁碟空間
由於mongodb刪除了一部分資料後,不會回收相應的磁碟空間,所以這裡通過重建資料目錄的方式釋放磁碟空間。 一 實驗環境
配置了一個複本集,該複本集由以下三個節點群組成:
10.192.203.201:27017 PRIMARY
10.192.203.202:27017 SECONDARY
10.192.203.202:10001 ARBITER 二 實驗步驟
2.1 類比環境
use dba;for(var i=0;i<1000000;i++)db.c.insert({uid:i,uname:'osqlfan'+i});db.c.find().count();#1000000 db.stats();{"db" : "dba","collections" : 5,"objects" : 1000111,"avgObjSize" : 111.9994880568257,"dataSize" : 112011920,"storageSize" : 174796800,"numExtents" : 17,"indexes" : 3,"indexSize" : 32475072,"fileSize" : 469762048,"nsSizeMB" : 16,"extentFreeList" : {"num" : 0,"totalSize" : 0},"dataFileVersion" : {"major" : 4,"minor" : 22},"ok" : 1}
磁碟空間增加了400M資料:
-rw-------. 1 root root 134217728 Nov 7 13:38 dba.1
-rw-------. 1 root root 268435456 Nov 7 13:38 dba.2
[root@slave2 ~]# du -sh /data/mongo/data
4.7G /data/mongo/data
#刪除dba.c表資料:MyReplset:PRIMARY> db.c.drop();trueMyReplset:PRIMARY> db.c.find().count();0MyReplset:PRIMARY> db.stats();{"db" : "dba","collections" : 4,"objects" : 108,"avgObjSize" : 108.44444444444444,"dataSize" : 11712,"storageSize" : 61440,"numExtents" : 5,"indexes" : 2,"indexSize" : 16352,"fileSize" : 469762048,"nsSizeMB" : 16,"extentFreeList" : {"num" : 18,"totalSize" : 212492288},"dataFileVersion" : {"major" : 4,"minor" : 22},"ok" : 1}
看到dataSize,indexSize,storageSize都變小了,但是fileSize沒有變化,而且mongo data目錄仍然佔用4.7G。
2.2 確保先在從庫10.192.203.202:27017上進行重構
#查看主從關係
MyReplset:PRIMARY>rs.status();{"set" : "MyReplset","date" :ISODate("2016-11-07T07:10:50.717Z"),"myState" : 1,"members" : [ { "_id" : 0, "name" :"10.192.203.201:27017", "health" : 1, "state" : 1, "stateStr" :"PRIMARY", "uptime" : 964, "optime" :Timestamp(1478239977, 594), "optimeDate" :ISODate("2016-11-04T06:12:57Z"), "electionTime" :Timestamp(1478502021, 1), "electionDate" :ISODate("2016-11-07T07:00:21Z"), "configVersion" :2, "self" : true }, { "_id" : 1, "name" :"10.192.203.202:27017", "health" : 1, "state" : 2, "stateStr" :"SECONDARY", "uptime" : 628, "optime" :Timestamp(1478239977, 594), "optimeDate" :ISODate("2016-11-04T06:12:57Z"), "lastHeartbeat" :ISODate("2016-11-07T07:10:49.257Z"), "lastHeartbeatRecv": ISODate("2016-11-07T07:10:50.143Z"), "pingMs" : 2, "configVersion" :2 }, { "_id" : 2, "name" :"10.192.203.202:10001", "health" : 1, "state": 7, "stateStr" :"ARBITER", "uptime" : 618, "lastHeartbeat" :ISODate("2016-11-07T07:10:49.416Z"), "lastHeartbeatRecv": ISODate("2016-11-07T07:10:49.847Z"), "pingMs" : 2, "configVersion" :2 }],"ok" : 1}
2.2.1 關閉資料庫
MyReplset:SECONDARY> use admin;switched to db adminMyReplset:SECONDARY> db.shutdownServer();2016-11-07T15:14:42.548+0800 I NETWORK DBClientCursor::init call() failedserver should be down...2016-11-07T15:14:42.571+0800 I NETWORK trying reconnect to 127.0.0.1:27017(127.0.0.1) failed2016-11-07T15:14:42.575+0800 W NETWORK Failed to connect to 127.0.0.1:27017, reason:errno:111 Connection refused2016-11-07T15:14:42.575+0800 I NETWORK reconnect 127.0.0.1:27017 (127.0.0.1) failedfailed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connectionattempt failed2016-11-07T15:14:42.634+0800 I NETWORK trying reconnect to 127.0.0.1:27017(127.0.0.1) failed2016-11-07T15:14:42.637+0800 W NETWORK Failed to connect to 127.0.0.1:27017, reason:errno:111 Connection refused2016-11-07T15:14:42.638+0800I NETWORK reconnect 127.0.0.1:27017(127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017(127.0.0.1), connection attempt failed
2.2.2 備份,刪除,重建資料目錄
備份10.192.203.202:27017的資料目錄,這裡省略
備份完成後,刪除,重建該目錄。
rm-rf /data/mongo/data
mkdir/data/mongo/data 2.2.3 啟動資料庫
啟動10.192.203.202:27017進程:
/usr/local/mongodb/bin/mongod--config /usr/local/mongodb/mongod.cnf --replSet MyReplset -rest 2.2.4 檢查
檢查資料庫是否正常,之前的資料庫是否都存在。
檢查下磁碟空間是否縮小。
經檢查,空間縮小為4.3G,收縮了400MB。
2.3 重構主庫
2.3.1 切換主從關係
因201是主,所以需要把201和202:27017之間的主從關係切換一下。本實驗除了仲裁節點外,只有一個從節點。假如有多個節點的話,需要在其餘從節點上
執行:rs.freeze(300);(鎖定從,使其不會轉變成主庫)
在10.192.203.201:27017執行:rs.stepDown(30);(對其進行降級)
--freeze()和stepDown單位都是秒。
rs.status()查看主從關係是否切換完畢。 2.3.2 關閉資料庫
停止10.192.203.201:27017進程:
MyReplset:SECONDARY>use admin;
switched to db admin
MyReplset:SECONDARY> db.shutdownServer(); 2.3.3 備份刪除,重建其資料目錄
備份略。
rm-rf /data/mongo/data
mkdir/data/mongo/data 2.3.4 啟動資料庫
啟動10.192.203.201:27017進程:
/usr/local/mongodb/bin/mongod--config /usr/local/mongodb/mongod.cnf --replSet MyReplset -rest 2.3.4 檢查
檢查資料庫是否正常,之前的資料庫是否都存在。
檢查下磁碟空間是否縮小。
經檢查,空間縮小為4.3G,收縮了400MB。
--仲裁節點不需要重構。
重構完成後可以再切換回原來的主從狀態。