天天看點

mongodb安裝建議

1)軟體包的選擇

確定使用最新的穩定版本。目前我們線上使用的版本是2.4.6。MongoDB軟體包下載下傳頁面http://www.mongodb.org/downloads。

確定線上環境總是使用64位版本。32位版本隻能用于測試和開發使用,因為32位版本最大隻能存儲2GB的資料。啟動MongoDB的時候,MongoDB會自動檢測是否是32位版本,如果是32位版本,則會有提示資訊顯示。

MongoDB shell version: 2.4.6

connecting to: 127.0.0.1:28018/test

Server has startup warnings:

Mon Jan  6 17:04:47.040 [initandlisten]

Mon Jan  6 17:04:47.040 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.

Mon Jan  6 17:04:47.040 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).

Mon Jan  6 17:04:47.040 [initandlisten] **       Note that journaling defaults to off for 32 bit and is currently off.

Mon Jan  6 17:04:47.040 [initandlisten] **       See http://dochub.mongodb.org/core/32bit

Mon Jan  6 17:04:47.040 [initandlisten]

>

MongoDB不支援32位存儲2GB以上的資料,官方給出的解釋是MongoDB的存儲引擎使用memory-mapped files即記憶體映射型檔案來提高性能。并且讓32位版本不存儲2GB以上的資料,MongoDB團隊可以減少代碼數量,減少bug數量,并且從硬體上來說,越來越多的人使用64位硬體來部署線上服務。是以,確定部署到線上的軟體包是64位的,而不是32位的,要不然就悲劇了。

2)作業系統的選擇

MongoDB支援Windows,Linux,MacOS和Solaris。從下載下傳頁面http://www.mongodb.org/downloads 下載下傳相應的版本即可,記得使用穩定版本。目前,我們線上使用的是CentOS6.4 x86_64。MongoDB需要使用glibc-2.12-1.2.el6以上版本的glibc。

3)并發性

在早期的版本中,一個MongoDB執行個體中的所有寫操作都共同競争使用一個readers-write 鎖。在2.2版本以後,每個執行個體中的庫都有一個readers-write 鎖,可以允許這個庫的并發讀取,但是隻能進行單次寫入操作。詳細操作可以參考http://docs.mongodb.org/manual/faq/concurrency/。

4)日志功能

MongoDB使用提前寫日志記錄到磁盤上的日志方式來確定MongoDB可以快速的從系統奔潰或其他嚴重事故中恢複寫操作。64位版本預設開啟日志功能,32位沒有開啟。詳細操作可以參考http://docs.mongodb.org/manual/core/journaling/。

5)網絡方面

總是在一個可受信任的環境中運作MongoDB,設定網絡通路規則,不允許不明确的主機,系統或網絡通路MongoDB伺服器。正如其他依賴于網絡通路的敏感系統一樣,部署MongoDB的時候,也需要設定有哪些特定系統允許通路。如設定WEB伺服器可以通路MongoDB伺服器,監控伺服器可以通路MongoDB伺服器。預設情況下auth功能沒有開啟,MongoDB假定目前運作的環境是一個安全的環境。根據需要可以開啟auth功能。

http://docs.mongodb.org/manual/tutorial/configure-linux-iptables-firewall/ 配置iptables。

6)連接配接池

為了避免單個MongoDB執行個體或Mongos執行個體負載的連接配接資源負載過高,確定所有用戶端需要維護一個合理的連接配接池大小。

7)硬體相關考慮

  1.配置設定給MongoDB伺服器足夠的CPU和記憶體

  MongoDB和其他軟體一樣,配置設定越多的記憶體和越快的CPU都可以提升性能。從線上運作情況來看,    MongoDB确實很吃記憶體,它會盡量先吃光記憶體。

  2.配置設定swap

  需要給運作MongoDB的系統配置設定swap分區,避免在記憶體競争激烈的情況下,OOM Killer殺掉MongoDB程序。

  MongoDB通過映射記憶體檔案到記憶體的方式確定作業系統不會存儲MongoDB資料到swap分區。

  3.RAID相關

  大多數情況下,部署MongoDB都應該考慮使用RAID10。

  4.盡量使用固态硬碟Solid State Disks

  在條件允許的情況下,盡量使用SSD,因為SSD對大量随機讀寫有很高的性能。從線上使用的情況    來看,使用IOPS值越高的磁盤,MongoDB擷取的性能越好。

  5.不要使用遠端檔案系統(NFS)

  不建議網絡檔案系統NFS用于MongoDB部署,這樣容易産生性能問題。當資料檔案和日志檔案都存    儲在NFS上時,MongoDB就會産生很多性能問題,将日志檔案存儲在本地或iscsi卷組上,可以獲    得好一點的性能。如果非要使用NFS,則在/etc/fstab中需要加上bg,noclock,noatime。

  6.将資料分開存儲

  為了獲得更大的性能,可以将資料檔案,系統日志檔案和通路日志檔案分别存儲到不同的存儲設   備上。但是這樣會影響快照方式備份資料。

8)MongoDB和NUMA硬體

  在一個NUMA(Non-Uniform Access Memory)的系統上運作MongoDB會産生許多運維相關問題,包括

  間斷性的慢查詢和系統程序高負載使用。

  在一個NUMA硬體上使用MongoDB時,需要關閉NUMA,然後設定interleave記憶體政策。在Linux上部    署MongoDB時,MongoDB 2.0以上版本在啟動時會檢測NUMA設定,并提示警告資訊。

  可以使用

numactl --interleave=all /usr/bin/local/mongod

  關閉NUMA。

  RPM包安裝MongoDB後的啟動腳本/etc/init.d/mongod已經對NUMA作了相應的處理

# Handle NUMA access to CPUs (SERVER-3574)

# This verifies the existence of numactl as well as testing that the command works

NUMACTL_ARGS="--interleave=all"

if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null

then

   NUMACTL="numactl $NUMACTL_ARGS"

else

   NUMACTL=""

fi

  使用echo 0 > /proc/sys/vm/zone_reclaim_mode 在proc中關閉NUMA。詳細資訊可以參考

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

9)在Linux上部署MongoDB

  1.核心和檔案系統的選擇

    官方建議使用Linux核心版本2.6.36以後的版本。CentOS 6以上預設的核心是2.6.32.目前線上      沒有作特殊調整,有實力的話可以自行編譯核心。

    MongoDB在使用資料庫檔案之前會預先配置設定資料庫檔案,通常會生成許多大檔案。是以應該使      用EXT4或XFS檔案系統。

    通常情況下,如果要使用EXT4檔案系統的話,需要使用核心2.6.23以上的核心版本。

    如果使用XFS檔案系統的話,需要使用核心2.6.25以上的的核心版本。

     一些Linux發行版需要不同的核心版本來支援EXT4或XFS檔案系統

       Linux Distribution           Filesystem                  Kernel Version

       CentOS 5.5                   ext4, xfs                   2.6.18-194.el5  

       CentOS 5.6                   ext4, xfs                   2.6.18-238.el5  

       CentOS 5.8                   ext4, xfs                   2.6.18-308.8.2.el5  

       CentOS 6.1                   ext4, xfs                   2.6.32-131.0.15.el6.x86_64  

       RHEL 5.6                     ext4                        2.6.18-238  

       RHEL 6.0                     xfs                         2.6.32-71  

       Ubuntu 10.04.4 LTS           ext4, xfs                   2.6.32-38-server  

       Amazon Linux AMI release 2012.03   ext4                  3.2.12-3.2.4.amzn1.x86_64  

   2.建議配置

     關閉存儲資料庫檔案的磁盤的atime。如設定

     /dev/vdb /data ext4 defaults,noatime 0 0

     設定ulimit -n和ulimit -u的值大于20000。如果ulimit的值設定過低的話,當MongoDB處于       頻繁通路的狀态下,将會産生錯誤,最終導緻無法連接配接到MongoDB執行個體。

     關閉transparent huge pages。MongoDB在使用正常虛拟記憶體頁面(4096bytes)性能更好。

     在BIOS中關閉NUMA.

     使用NTP同步主機時間。

     确儲存儲資料庫檔案的塊裝置的預讀設定(readahaed settings)是否合理。對應随機訪           問,設定一個較低的預讀設定值。

10)性能監控

   使用iostat和bwm-ng可以監控磁盤和網絡使用情況

$ iostat -xmt 1

Linux 2.6.32-358.14.1.el6.x86_64 (zg-jidong-mongodb) 04/09/2014 _x86_64_(16 CPU)

04/09/2014 06:00:34 PM

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

          1.77    0.00    0.50    0.74    0.09   96.90

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util

vda               0.00     0.83    0.00    0.03     0.00     0.00   214.45     0.00   92.90   6.03   0.02

vdb               0.00    68.53    0.27   71.77     0.01     0.61    17.80     0.00    0.01   1.94  13.99

avgrq-sz  The average size (in sectors) of the requests that were issued to the device.              目前裝置相關的請求的平均大小(以扇區數量計算),數值越小代表随機請求越多

%util             Percentage of CPU time during which I/O requests were issued to the device (bandwidth                     utilization for the device). Device saturation occurs when this  value  is  close  to

                    100%.                     這個參數的值非常有用,表示目前裝置(磁盤)有相關請求時的CPU占用率,這個值如果接近100%時表示磁盤已經到達飽和狀态

轉載于:https://www.cnblogs.com/gentlemanhai/p/9075565.html