mongodb叢集重構,釋放磁碟空間

來源:互聯網
上載者:User

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。

 

--仲裁節點不需要重構。

重構完成後可以再切換回原來的主從狀態。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.