【NoSQL】MongoDB服務器相關選型和基礎優化參考

好久沒上文章了...先上篇一先!

硬盤選擇

1. 硬盤有條件儘量選擇SAS盤,不差錢的可以選擇SSDfunsion-io之類的,再者。也可以根據當初應用環境選擇性的考慮下SATA


2. RAID方面可以選擇RAID10RAID5,推薦選用RAID10,它即有速度也相對安全,RAID5的話適合讀比較多的業務。但是還是推薦用RAID10,用空間換取時間。RAID5在一塊盤出現問題的情況下性能極速下降!


3. RAID卡的選擇,儘量選用大牌子的RAID卡,這樣減少出現各種各樣的RAID卡故障。還有就是RAID緩存要選擇相對比較大的!



內存選擇


現在內存是白菜價的時代,現在一般筆記本上都到16G了,沒有哪個公司會在內存上糾結吧,理論上任何服務器是內存越大越好,尤其是數據庫服務器,至少16G以上。



CPU選擇


選用64位的CPU這個不用說了,再者就是緩存要大,CPU要多核心多線程,但是有些數據庫對多核CPU要求不是很嚴格,比如:MongoDBMongoDB對內存要求很高!MySQLInnoDB引擎則對CPU利用率比較高,儘量選用強悍點的CPU



系統選擇


1. 系統肯定是64位系統,可以是linux也可以是unixlinux有很多選擇,常用的就是CentOS Ubuntu竺,Unix就可以選擇開源的FreeBSD


2. 內核選擇,推薦2.6以上的內核,也不用太高


3. 文件系統的選擇,有以下幾種選擇:EXT3/EXT4/XFSEXT4XFS更適合數據庫,其實XFS更適合作爲MySQL數據庫的文件系統,可以在EXT3的基礎上性能增加1.5倍。



其它方面:


網卡至少選用千M,萬M更好,沒萬M也可以做bonding.



總之,針對不同的應用選擇不的機器類型,尤其作爲數據,數據庫層儘量選用相對好的服務器。




下面以MongoDB服務器的硬件選擇作個簡單的說明:



1. 相關硬件級別



網絡最低爲千M網卡,有萬M更好!


大內存(可以根據索引大小來設置內存,原則上是內存越大越好。)


雙核高速CPUmongodb實例沒必要搞多核,因爲mongodbCPU多核支持不是很好,但是作爲mongos路由服務器對CPU資源消耗比較多!



mongodb實例有獨立的掛載盤用於給mongodb存放數據以隔離io的頻繁操作。



磁盤可以考慮用RAID10RAID5,資金允許可以考慮用SSD來保存


2. 系統級別



採用64位系統支持更多的內存和讓支持更大的存儲數據



禁止文件系統更新讀取次數統計(修改/etc/fstab文件)


mount -o remount,noatime /data



如果存儲的數據中有大的文件,建議使用ext4/xfs這樣的文件系統


這裏可以考慮把數據目錄和日誌文件及相關的中間件目錄(如果有的話)分開來,隔離IO



ulimit設置


設置最大打開文件描述符


cat /etc/security/limits.conf


          soft   nofile       102400


          hard   nofile       102400



增加系統進程數(線程)的限制-->max user processes
centos 5
centos 6不同的是,只要在/etc/security/limits.conf 設置了root soft nofile 102400 root hard        nofile102400,對應的uilmit -u 後的結果就會是102400,這裏需要注意區別!


因此cetos 6還必須這樣設置: sed -i 's/1024.*/102400/' /etc/security/limits.d/90-nproc.conf



TCP連接內存優化


cat /etc/sysctl.conf


net.ipv4.tcp_syncookies = 1


net.ipv4.tcp_tw_reuse = 1


net.ipv4.tcp_tw_recycle = 1


net.ipv4.tcp_timestsmps = 0


net.ipv4.tcp_synack_retries = 2


net.ipv4.tcp_syn_retries = 2


net.ipv4.tcp_wmem = 8192 436600 873200


net.ipv4.tcp_rmem = 32768 436600 873200


net.ipv4.tcp_mem = 94500000 91500000 92700000


net.ipv4.tcp_max_orphans = 3276800


net.ipv4.tcp_fin_timeout = 30



直接生效


/sbin/sysctl -p    


對於服務器多核問題可以在啓動時加入啓動參數:


numactl --interleave=all


啓動實例:umactl --interleave=all /opt/mongodb/bin/mongod -shardsvr -replSet shard1 -port 27021 -dbpath /data0/mongodb/db/shard13 -oplogSize 1000 -logpath /data1/mongodb/logs/shard13.log -logappend --maxConns 10000 --quiet -fork --directoryperdb


最後一點要說明的是,MongoDB的版本推薦選用2.2.0相對比較高的穩定版本,功能上更加完善!還有一點是Linux系統的內核上的選擇對MongoDB有一定的影響!


可以本文不是規範也不一定適合每一位讀者,根據實際情況參考即可!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章