下面詳細說明影響mongodb的系統配置,尤其在生產環境上。
1、生產環境推薦的平台
- Amazon Linux
- Debian 7.1
- Red Hat / CentOS 6.2+
- SLES 11+
- Ubuntu LTS 12.04
- Ubuntu LTS 14.04
- Windows Server 2012 & 2012 R2
推薦使用官方最新的64位發行版本。
2、網絡配置
1)使用可信任的網絡環境
MongoDB總是運行在可信任的網絡環境中,通過網絡規則設置避免所有不知來歷的機器訪問。MongoDB應該部署在獨立的環境中,這個環境僅僅能被應用server,監控服務,mongodb組件等訪問。
2)禁用HTTP接口
3、連接池管理
為了避免連接超載,確保客戶端維護合理的連接池大小,調整連接池的大小以適應具體案例,一般而言,開始連接池大小設置為數據庫請求並發數的110-115%。
4、硬件配置說明
MongoDB對於服務器的硬件有一定的需求和限制。
1)分配充足的CPU和RAM
- 對於MMAPv1存儲引擎:由於它本身的並發模型設計,MMAPv1並不需要更多的CPU核心,所以,增加CPU核心在一定程度上有所幫助但是性能提升並不顯著。增加RAM能夠幫助減少發生分頁錯誤頻率。
- 對於WiredTiger存儲引擎:它是為多線程設計,能夠利用很多CPU核心,所以,活躍線程總數對應於CPU的數量能夠提升性能。隨着活躍並發操作數量增加到系統CPU個數,系統吞吐量增加;隨着活躍並發操作數超過系統CPU的個數闕值,系統吞吐量下降;
這個系統闕值數依賴於你的應用程序,你可以通過實驗測量系統吞吐量來決定最優的活躍並發數。mongostat工具的輸出能夠提供活躍並發的讀寫數據。在v3.2版本中,默認使用WiredTiger存儲引擎,MongoDB可以利用操作系統文件系統cache和WiredTiger引擎的cache。WiredTiger v3.2 cache默認設置為1GB或者內存的60%,取其中大的。當然,我們可以自己設置:一般而言,服務器物理內存10G以下的,比較合理的設置值是小於等於3G;對於物理內存大於10G的,可以大於3G。在v3.0版本中,cache默認為1G或物理內存的一半,取其中大的。
注意:storage.wiredTiger.engineConfig.cacheSizeGB僅僅限制WiredTiger cache大小,不會限制mongd服務占用內存的總量。WiredTiger cache僅僅是mongodb使用內存的一個組件,除此之外,mongodb還可以利用操作系統中文件系統cache。
如果一台節點上只有一個mongodb實例,那么建議使用默認的WiredTiger cache即可;如果一台節點上有多個實例,那么你需要考慮減少WriedTiger cache的大小以滿足其他實例的需要。
2)使用SSDs(固態硬盤)
MongoDB在使用SATA SSDs上有很好的性價比。如果經濟條件允許,建議使用SSDs。SSDs在隨機IO操作上的性能表現完全適應於MMAPv1存儲引擎的更新模型。通過使用SSDs和增加內存能夠提升I/O的吞吐量
3)NUMA設置
MongoDB運行在NUMA系統上,能夠導致一些操作問題,如間斷性性能低下、高系統進程占用等。所以需要對內存交叉策略進行配置以使主機是non-NUMA狀態,MongoDB在啟動時就會對系統的NUMA進行檢查,如果NUMA配置降低性能了就會進行警告提示。
- windows系統上NUMA配置
內存策略通過BIOS配置,具體請參考系統資料
- liunx系統上NUMA配置
numactl --interleave=all <path> #path是mongod路徑 echo 0 > /proc/sys/vm/zone_reclaim_mode
4)磁盤存儲系統
- swap分配:分配系統swap空間能夠避免內存爭用、預防系統出現OOM殺死mongod進程等問題。對於MMAPv1存儲引擎,mongodb不會在swap空間中存儲數據。(windows環境另算);對於WiredTiger存儲引擎,mongodb可能會在swap中存儲數據。
- RAID:建議使用raid10,其他不建議。
- 文件系統類型選擇:對於MMAPv1存儲引擎,建議xfs或ext4,如果可能,優先選擇xfs。對於WiredTiger存儲引擎,強烈推薦使用XFS文件系統,因為能夠避免使用ext4產生的性能問題。一般而言如果你用xfs文件系統,操作系統內核版本應該在2.6.25及以后;如果使用ext4文件系統,建議內核版本2.6.23及以后。
5、其他建議配置(liunx)
- 對於存儲數據庫文件的磁盤卷,建議關閉atime
vim /etc/fstab #在存儲數據庫文件的磁盤卷設備上default后面加上noatime,nodiratime UUID=98a683e4-ab44-4fe4-85de-7808ee5f167d /data xfs defaults,noatime,nodiratime 1 2
- 設置unlimit值大於20000
- 禁用Transparent Huge Pages
- 禁用NUMA
- 設置SELinux on Red Hat
- 如果使用分片集群,別忘了使用NTP同步主機的時間,這個是特別重要的。
