MongoDB伺服器相關選型和基礎最佳化參考

來源:互聯網
上載者:User

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

硬碟選擇

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

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

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

記憶體選擇

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

CPU選擇

選用64位的CPU這個不用說了,再者就是緩衝要大,CPU要多核心多線程,但是有些資料庫對多核CPU要求不是很嚴格,比如:MongoDB,MongoDB對記憶體要求很高!MySQL的InnoDB引擎則對CPU利用率比較高,盡量選用強悍點的CPU!

系統選擇

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

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

3. 檔案系統的選擇,有以下幾種選擇:EXT3/EXT4/XFS,EXT4和XFS更適合資料庫,其實XFS更適合作為MySQL資料庫的檔案系統,可以在EXT3的基礎上效能增加1.5倍。

其它方面:

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

總之,針對不同的應用選擇不的機器類型,尤其作為資料,資料庫層盡量選用相對好的伺服器。


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

1. 相關硬體層級

²        網路最低為千M網卡,有萬M更好!

²        大記憶體可以根據索引大小來設定記憶體,原則上是記憶體越大越好。)

²       雙核高速CPU,mongodb執行個體沒必要搞多核,因為mongodb對CPU多核支援不是很好,但是作為mongos路由伺服器對CPU資源消耗比較多!

²        mongodb執行個體有獨立的掛載盤用於給mongodb存放資料以隔離io的頻繁操作。

²        磁碟可以考慮用RAID10或RAID5,資金允許可以考慮用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有一定的影響!

 

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

 

 

本文出自 “->” 部落格,請務必保留此出處http://opsmysql.blog.51cto.com/2238445/1083431

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.