MongoDB爲我們提供了較爲簡單的管理方式,下面我們對MongoDB的管理進行簡單的講解。
安裝
MongDB的安裝非常輕量級,甚至可以稱之爲不是安裝的安裝:
1,從MongoDB的官網下載適合於本地平臺的壓縮包
2,解壓安裝包(下文中我們將解壓的目錄以MONGO_HOME代替)
上面這兩步就完成了MongoDB的安裝
啓動和停止
從命令行啓動
執行MONGO_HOME/bin目錄下的mongod.sh/mongod.exe--dbpath mongoDB存儲數據的數據目錄位置。
使用命令行啓動可以有多個選項,可以使用mongod --help命令查看所有選項的意義。
主要執行選項解釋
- --dbpath
指定存儲MongoDB數據的目錄,默認值是/data/db/(Windows下是C:\data\db)。每個MongoDB進程都需要獨立的數據目錄,每個MongoDB進程都會在其所擁有的數據目錄中創建mongo.lock文件放置其他MongoDB進程訪問此數據目錄
- --port
指定服務器監聽的端口號,默認是27017。如果運行多個MongoDB進程那麼需要對不同的MongoDB指定不同端口號
- --fork
以守護進程的方式運行MongoDB,創建服務器進程。
- --logpath
指定日誌輸出路徑,而不是命令行。每次啓動MongoDB的時候,MongoDB都會自動將歷史的log重命名保存,不會覆蓋歷史日誌。
- --config
指定配置文件,可方便的在配置文件中批量的設置啓動選項,減少啓動時的工作量。
配置文件
MongoDB爲了減輕我們的工作量提供了配置文件中讀入啓動選項的功能,主要用於配置選項非常多或者自動化啓動MongoDB進程使用。
常見的配置文件格式:
Mongo.conf
port =xxx
logpath=xxx
…
配置文件都是以key(選項)=value(選項值)的形式,每一行都是一個選項值。注意以下事項:
- #開頭的是註釋
- 文件內容區分大小寫,所以選項的key一定要和--help的大小寫一致
- 開關選項的值要設爲true/false
停止MongoDB
正確的停止能夠保證下次正確的啓動。
當MongoDB以前臺命令行窗口的方式運行,那麼在命令行中使用Ctrl+C可以保證停止。
如果是以後臺進程的方式,那麼可以使用kill -2 進程號或kill 進程號的方式停止。
也可以使用mongoSehell中的db.shutdownServer()命令停止,這個命令必須在admin庫下運行,即useadmin切換到admin庫後執行該命令。
監控
對於日常的開發管理人員,我們做的最多的事情就是對MongoDB運行情況的監控,保證其狀態和性能。MongoDB爲我們考慮好了這些。
使用管理接口
默認情況下,MongoDB爲我們提供了一個Web界面接口用來監控(該web接口的默認端口是28017,即mongoDB啓動端口+1000)。在使用web端管理接口的時候,需要MongoDB進程在啓動的時候提供--rest選項或配置文件中:rest=true 。
如果不想開啓MongoDB的Web管理接口,可以在啓動MongoDB進程時使用--nohttpinterface或在配置文件中使用nohttpinterface=true。
也可以使用db.runCommand({'serverStatus':1})來得到當前流程實例名稱
狀態說明
當使用Web接口或serverStatus命令查看系統狀態的時候,系統會返回一個格式化好的系統狀態的文檔,下面對一些重要的鍵進行說明:、
- globalLock
表示全局寫入鎖佔用了服務器多少時間,微秒爲單位
- mem
包含服務器內存映射了多少數據,服務器進程的虛擬內存和常住內存的佔用情況
- indexCounters
表示B樹在磁盤索引('misses')和內存檢索('hits')的次數。如果該比值過高就需要添加內存了。
- backgroudFlushing
表示後臺做了多少次fsync以及用了多長時間
- opcounters
包含了每種主要操作的次數
- asserts
統計了斷言的次數
上邊說到的計數器都是從服務進程啓動開始計算,如果數量達到計數器上限,那麼asserts中的rollovers會增加,同時計數器置0。
使用mongostat命令
serverState雖然可以比較全面的顯示當前進程的狀態,但是由於是靜態的,即每次只能監控當前的狀態無法跟蹤顯示mongoDB進程運行的動態信息,所以MongoDB還爲我們提供了mongostat命令來動態的監控進程運行狀態(類似Linux下more和tail -t -n 200的區別(尾部遊標))。
mongostat的參數
mongostat命令和mongod、mongo命令屬於同一級別命令,都在mongo_home/bin目錄中。常見的命令參數:
- --help
help大家都懂得,就是得到這個命令的幫助、使用信息
- --verbose/-v
增加命令行返回的內部報告數量。可以通過設置多個v來使得數據更加詳細,例如-vvvvvv
- --version
顯示當前mongodbstat命令版本
- --host
指定mongostat要監測的mongo實例的ip:port,默認情況下鏈接localhost:27017端口的MongoDB實例。如果要連接的是一個集合,那麼可以按如下方式連接:
集合名/IP:PORT,IP1:PORT2…
- --port
如果MongoDB運行在默認的27017端口,那麼不需要指定該端口。如果不是運行在27017端口,那麼就需要使用該參數指明端口。
- --ipv6
啓用IPv6支持,默認情況下,MongoDB實例沒有開啓IPv6網絡連接。
- --ssl
2.4版本的mongostat新加入的命令參數,支持mongostat通過SSL連接MongoDB實例。默認情況下,MongoDB實例不支持SSL連接,需要設置MongoDB支持SSL連接,才能讓mongostat通過SSL連接MongoDB
- --rowcount number,-n number
控制數據輸出行數。number的值設定了輸出的數據行數,即監聽幾次,當number爲0的時候,那麼就是無限次輸出行數。
該參數配合sleeptime參數一起使用可以實現,監聽number次,每次監聽間隔sleeptime秒。
- --sleeptime
sleeptime參數使用的時候不需要前置參數,數字即可。例如:
mongostatsleeptime
其他參數詳見:
http://docs.mongodb.org/manual/reference/program/mongostat/
mongostat返回列說明
mongostat返回的是一個表格形式,下面對返回的值的形式、列做出說明:
- Inserts
顯示每秒插入到數據庫中對象數量,如果後邊跟着一個*,那麼就說明該次是一個複製操作。
- Query
每秒執行的查詢操作數。
- Update
每秒執行的更新操作數。
- Delete
每秒執行的刪除操作數。
- Getmore
每秒執行的get more(cursor相關操作)操作的數量。
- Command
每秒執行的命令數。當在從屬節點和輔助節點上執行mongostat命令的時候,這列會以 本地數|複製數 的方式展示。
- Flushes
每秒系統執行的從內存同步到硬盤的數量。
- Mapped
映射的數據總量,以M爲單位。這個數據在每次調用mongostat時刷新。
- Size
虛擬內存在最後調用mongostat時,進程使用的兆字節的數量。
- non-mapped
虛擬內存不包括在最後調用mongostat時所有映射的內存總量,以M爲單位。
- Res
駐留在內存中的,在最後調用mongostat時,進程使用的兆字節的數量。
- Faults
每秒的頁面故障數。
- Locked
全局寫入鎖所佔的百分比。
- locked db
時間在每個數據庫上下文特定的鎖的百分比。此值列出的數據庫過度花費在全局鎖的時間鎖定狀態量。正因爲如此,取樣方法,您可能會看到大於100%的一些值。
- idx miss
索引嘗試訪問數據時,錯誤頁面的造成失敗的百分比。
- Qr
等待從MongoDB實例讀取數據的客戶端隊列長度。
- Qw
等待向MongoDB實例寫入數據的客戶端隊列長度。
- Ar
執行讀取操作的活動客戶端的數量。
- Aw
執行寫入操作的活動客戶端的數量。
- netIn
由MongoDB實例接收的網絡通信量,以字節爲單位。這包括mongostat命令產生的流量。
- netOut
由MongoDB實例輸出的網絡通信量,以字節爲單位。這包括mongostat命令產生的流量。
- Conn
所有打開的連接數量。
- Set
該集合副本的名稱,如果使用纔會出現。
- Repl
當前集羣成員的複製狀態。
Value |
Replication Type |
M |
主節點 |
SEC |
備份節點 |
REC |
恢復節點 |
UNK |
位置狀態 |
SLV |
從屬節點 |
- Time
mongostat命令執行的服務器時間。
第三方MongoDB監控
Nagios、Munin、Ganglia(可以監控Hadoop),Cacti。