日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线上环境部署MongoDB的官方建议

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线上环境部署MongoDB的官方建议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原始出處:http://john88wang.blog.51cto.com/2165294/1386755

本文主要內容來自MongoDB官方文檔http://docs.mongodb.org/manual/administration/production-notes/。并結合了實際工作情況進行分享


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%時表示磁盤已經到達飽和狀態





本文出自 “Linux SA John” 博客,請務必保留此出處http://john88wang.blog.51cto.com/2165294/1386755


轉載于:https://blog.51cto.com/wangqh/1913496

總結

以上是生活随笔為你收集整理的线上环境部署MongoDB的官方建议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。