Mongodb學習總結-7(運維技術)

這一篇咱們以管理員的視角來看mongodb,做爲一名管理員,咱們常常接觸到的主要有4個方面:html

1.  安裝部署mongodb

2.  狀態監控數據庫

3.  安全認證安全

4.  備份和恢復,服務器

下面咱們就一點一點的講解。app

 

一:安裝部署函數

        我以前的文章都是採用console程序來承載,不過在生產環境中這並非最佳實踐,誰也不肯意在機器重啓後滿地找牙似找mongodb,工具

在mongodb裏面提供了一個叫作「服務寄宿」的模式,我想若是你們對wcf比較熟悉的話很容易聽懂。好了,咱們實踐一下,這裏我開一下D盤性能

裏面的mongodb。測試

 

這裏要注意的有兩點:

   <1> logpath: 當咱們使用服務寄宿的時候,用眼睛都能想明白確定不會用console來承載日誌信息了。

   <2> install:   開啓安裝服務寄宿,很happy啊,把管理員的手工操做下降到最小,感謝mongodb。

 

好了,console程序叫我看log日誌,那我就看看,發現mongodb已經提示咱們如何開啓mongodb,接着我照作就是了。

 

還要提醒你們一點的就是,這些命令參數不少很複雜也就很容易忘,不過不要緊,數據庫給咱們提供了一個help方法,咱們能夠

拿mongod和mongo說事。

mongod:

 

mongo:

 

二:狀態監控

     監控可讓咱們實時的瞭解數據庫的健康情況以及性能調優,在mongodb裏面給咱們提供了三種方式。

1:http監視器

     這個我在先前的文章中也提到了,這裏就不贅述了。

2:serverStatus()

    這個函數能夠獲取到mongodb的服務器統計信息,其中包括 :全局鎖,索引,用戶操做行爲等等這些統計信息,對管理員來講很是

    重要,具體的參數含義能夠參考園友:http://www.cnblogs.com/xuegang/archive/2011/10/13/2210339.html

    這裏仍是截個圖混個眼熟。

 

3:mongostat

      前面那些統計信息再牛X,那也是靜態統計,不能讓我觀看實時數據變化,還好,mongodb裏面提供了這裏要說的mongodstat

監視器,這玩意會每秒刷新,在實際生產環境中大有用處,仍是截張圖,頗有意思,是否是感受大軍壓境了。

 

三: 安全認證

     做爲數據庫軟件,咱們確定不想誰均可以訪問,爲了確保數據的安全,mongodb也會像其餘的數據庫軟件同樣能夠採用用戶

驗證的方法,那麼該怎麼作呢?其實很簡單,mongodb提供了addUser方法,還有一個注意點就是若是在admin數據庫中添加

將會被視爲「超級管理員」。

上面的admin用戶將會被視爲超級管理員,「jack」用戶追加的第三個參數表示是不是「只讀用戶」,好了,該添加的咱們都添加了,

咱們第一次登陸時不是採用驗證模式,如今咱們使用--reinstall重啓服務並以--auth驗證模式登陸。

好了,咱們進入test集合翻翻數據看看狀況,咱們發現jack用戶始終都是沒有寫入的權限,不論是受權或者未受權。

 

四:備份和恢復

      這玩意的重要性我想都不須要我來講了吧,這玩意要是搞很差會死人的,mongodb裏面經常使用的手段有3種。

1: 直接copy

       這個算是最簡單的了,不過要注意一點,在服務器運行的狀況下直接copy是頗有風險的,可能copy出來時,數據已經遭到

        破壞,惟一能保證的就是要暫時關閉下服務器,copy完後重開。

2:mongodump和mongorestore

      這個是mongo給咱們提供的內置工具,很好用,能保證在不關閉服務器的狀況下copy數據。

爲了操做方便,咱們先刪除受權用戶。

 

好了,咱們轉入正題,這裏我先在D盤創建一個backup文件夾用於存放test數據庫。

快看,數據已經備份過來了,太爽了,如今咱們用mongorestore恢復過去,記住啊,它是不用關閉機器的。

提一點的就是 drop選項,這裏是說我將test數據恢復以前先刪除原有數據庫裏面的數據,一樣你們能夠經過help查看。

 

3:主從複製

       這個我在上上篇有所介紹,這裏也不贅述了。

 

    其實上面的1,2兩點都不能保證獲取數據的實時性,由於咱們在備份的時候可能還有數據灌在內存中不出來,那麼咱們

想說能不能把數據暴力的刷到硬盤上,固然是能夠的,mongodb給咱們提供了fsync+lock機制就能知足咱們提的需求。

fsync+lock首先會把緩衝區數據暴力刷入硬盤,而後給數據庫一個寫入鎖,其餘實例的寫入操做所有被阻塞,直到fsync

+lock釋放鎖爲止。

這裏就不測試了。

 加鎖:    db.runCommand({"fsync":1,"lock":1})

 釋放鎖: db.$cmd.unlock.findOne()

相關文章
相關標籤/搜索