好久沒上文章了...先上篇一先!
硬盤選擇
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有一定的影響!
可以本文不是規範也不一定適合每一位讀者,根據實際情況參考即可!