深度掌握NFS服務(wù)器
對于NFS服務(wù)器,可能你已經(jīng)有所掌握。但是你真的完全學(xué)會了么?很多細(xì)節(jié)上的知識也許已經(jīng)被忽略了。沒關(guān)系,本文就將為大家做一下具體的總結(jié)。希望對大家有所幫助。NFS是網(wǎng)絡(luò)文件系統(tǒng)(Network File System)的簡稱,是分布式計(jì)算系統(tǒng)的一個(gè)組成部分,可實(shí)現(xiàn)在異種網(wǎng)絡(luò)上共享和裝配遠(yuǎn)程文件系統(tǒng).NFS由Sun公司開發(fā),目前已經(jīng)成為文件服務(wù)的一種標(biāo)準(zhǔn)(RFC1904,RFC1813).其最大的功能就是可以通過網(wǎng)絡(luò),讓不同操作系統(tǒng)的 計(jì)算機(jī)可以共享數(shù)據(jù),所以也可以將它看做是一個(gè)文件服務(wù)器.NFS文件服務(wù)器是Linux最常見網(wǎng)絡(luò)的服務(wù)之一.盡管它的規(guī)則簡單,卻有著豐富的內(nèi)涵. NFS 服務(wù)器可以看作是一個(gè)文件服務(wù)器,它可以讓你的PC通過網(wǎng)絡(luò)將遠(yuǎn)端的NFS 服務(wù)器共享出來的文件掛載到自己的系統(tǒng)中,在客戶端看來使用NFS的遠(yuǎn)端文件就象是在使用本地文件一樣.
一、硬件設(shè)備的選擇
隨著計(jì)算機(jī)技術(shù)的發(fā)展,以硬盤為首的I/O設(shè)備對計(jì)算機(jī)的整體性能影響越來越大,通訊服務(wù)器(messaging/E-mail/VOD):快 速的I/O是這類應(yīng)用的關(guān)鍵,硬盤的I/O吞吐能力是主要瓶頸;數(shù)據(jù)倉庫:大型商業(yè)數(shù)據(jù)存儲、編目、索引、數(shù)據(jù)分析,高速商業(yè)計(jì)算等,需要具有良好的網(wǎng)絡(luò) 和硬盤I/O吞吐能力;數(shù)據(jù)庫(ERP/OLTP等)服務(wù)器,除了需要具有強(qiáng)大的CPU處理能力,同時(shí)需要有很好的磁盤I/O吞吐性能;
NFS網(wǎng)絡(luò)文件系統(tǒng)性能的主要瓶頸是硬盤的I/O性能和網(wǎng)絡(luò)帶寬.SCSI(Small Computer System Interface,小型計(jì)算機(jī)系統(tǒng)接口)技術(shù)在需要高性能的網(wǎng)絡(luò)服務(wù)器和工作站領(lǐng)域卻得到了廣泛應(yīng)用,現(xiàn)在已經(jīng)成為網(wǎng)絡(luò)服務(wù)器 的標(biāo)準(zhǔn)的接口選擇.速度從SCSI-I最初的5MBps到2005年的320MBps.內(nèi)部傳輸率的高低是評價(jià)一個(gè)硬盤整體性能的決定性因素,硬盤數(shù)據(jù)傳 輸率分為內(nèi)外部傳輸率.通常稱外部傳輸率也為突發(fā)數(shù)據(jù)傳輸率或接口傳輸率,指從硬盤的緩存中向外輸出數(shù)據(jù)的速度.由于硬盤的內(nèi)部傳輸率要小于外部傳輸率, 所以只有內(nèi)部傳輸率才可以作為衡量硬盤性能的真正標(biāo)準(zhǔn).SCSI硬盤技術(shù)在內(nèi)部傳輸率要性能上有更大優(yōu)勢.通常在一個(gè)50個(gè)用戶的NFS網(wǎng)絡(luò)系統(tǒng)中使用 10個(gè)基于RAID5級別10000rpm的SCSI硬盤可以達(dá)到較好的效果.
在服務(wù)器磁盤I/O性能之后,網(wǎng)絡(luò)帶寬是網(wǎng)絡(luò)文件系統(tǒng)下一個(gè)瓶頸.通常應(yīng)當(dāng)使用單獨(dú)的1000兆快速以太網(wǎng)連接NFS服務(wù)器和客戶機(jī)發(fā)送報(bào)文信息.同時(shí)確保NFS服務(wù)器和客戶機(jī)工作正常,交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)備工作正常.圖-1是一個(gè)理想的NFS網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu).
圖-1 一個(gè)理想的NFS網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)#p#
二、軟件環(huán)境優(yōu)化
如果我們沒有很高硬件環(huán)境,可以考慮從軟件方面優(yōu)化性能.
1、清理NFS服務(wù)器磁盤碎片:
不論Linux文件系統(tǒng)采用什么文件格式(ext3、JFS、XFS、ReiserFS )、何種類型的硬盤(IDE 、SCSI),隨著時(shí)間的推移文件系統(tǒng)都會趨向于碎片化.ext3、JFS等高級文件系統(tǒng)可以減少文件系統(tǒng)的碎片化,但是并沒有消除.在繁忙的數(shù)據(jù)庫服務(wù) 器中,隨著時(shí)間的過去,文件碎片化將降低硬盤性能,硬盤性能從硬盤讀出或?qū)懭霐?shù)據(jù)時(shí)才能注意到.時(shí)間長了會發(fā)現(xiàn)每個(gè)磁盤上確實(shí)積累了非常多的垃圾文件,釋 放磁盤空間可以幫助系統(tǒng)更好地工作.Linux最好的整理磁盤碎片的方法是做一個(gè)完全的備份,重新格式化分區(qū),然后從備份恢復(fù)文件.但是對于7×24小時(shí) 工作關(guān)鍵任務(wù)服務(wù)器來說是比較困難的.Kleandisk是一個(gè)高效的磁盤清理工具,它能把磁盤上的文件分成不同的"組",比如把所有的"core"文件 歸成一組(Group),這樣要刪除所有core文件時(shí)只要刪除這個(gè)組就行了.core文件是當(dāng)軟件運(yùn)行出錯(cuò)時(shí)產(chǎn)生的文件,它對于軟件開發(fā)人員比較有用, 對于其他用戶(比如電子郵件服務(wù)器)卻沒有任何意義.因此,如果沒有軟件開發(fā)的需要,見到core文件就可以將其刪除.
2、開啟硬盤DMA
現(xiàn)在使用的IDE硬盤基本支持DMA66/100/133(直接內(nèi)存讀?。┑荓inux發(fā)行版本安裝后一般沒有打開,可以 /etc/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 這樣以后每次開機(jī),硬盤的 DMA 就會開啟,不必每次手動設(shè)定.添加前后你可以使用命令:hdparm -Tt /dev/hda 來測試對比一下.
3、調(diào)整緩沖區(qū)刷新參數(shù)
Linux內(nèi)核中,包含了一些對于系統(tǒng)運(yùn)行態(tài)的可設(shè)置參數(shù).緩沖刷新的參數(shù)可以通過調(diào)整 /proc/sys/vm/bdflush文件來完成,這個(gè)文件的格式是這樣的:
# cat /proc/sys/vm/bdflush30 64 64 256 500 3000 60 0 0
每一欄是一個(gè)參數(shù),其中最重要的是前面幾個(gè)參數(shù).第一個(gè)數(shù)字是在"dirty"緩沖區(qū)達(dá)到多少的時(shí)候強(qiáng)制喚醒bdflush進(jìn)程刷新硬盤,第二 個(gè)數(shù)字是每次讓bdflush進(jìn)程刷新多少個(gè)dirty塊.所謂dirty塊是必須寫到磁盤中的緩存塊.接下來的參數(shù)是每次允許bd flush將多少個(gè)內(nèi)存塊排入空閑的緩沖塊列表. 以上值為RHEL 4.0中的缺省值.可以使用兩種方法修改:
(1)使用命令
# echo "100 128 128 512 5000 3000 60 0 0″>/proc/sys/vm/bdflush
并將這條命令加到/etc/rc.d/rc.local文件中去.
(2)在/etc/sysctl.conf 文件中加入如下行:
vm.bdflush = 100 128 128 512 5000 3000 60 0 0
以上的設(shè)置加大了緩沖區(qū)大小,降低了bdflush被啟動的頻度,VFS的緩沖刷新機(jī)制是Linux文件系統(tǒng)高效的原因之一.
4、NFS版本的選擇
NFS協(xié)議從誕生到現(xiàn)在為止,已經(jīng)有多個(gè)版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4 (rfc3010).最早,Sun公司曾將NFS v2設(shè)計(jì)成為只使用UDP協(xié)議,主要原因是當(dāng)時(shí)機(jī)器的內(nèi)存、網(wǎng)絡(luò)速度和CPU的影響,不得不選擇對機(jī)器負(fù)擔(dān)較輕的方式.而到了NFS v3,Sun公司選擇了TCP協(xié)議作為缺省的傳輸方式.#p#
V3相對V2的主要區(qū)別:
1、文件尺寸
V2版本最大只支持32BIT的文件大小(4G),而NFS V3版本新增加了支持64BIT文件大小的技術(shù).
2、文件傳輸尺寸
V3版本沒有限定傳輸尺寸,V2版本最多只能設(shè)定為8k,可以使用-rsize and -wsize 選項(xiàng)來進(jìn)行設(shè)定.
3、完整的信息返回
V3版本增加和完善了許多錯(cuò)誤和成功信息的返回,對于服務(wù)器的設(shè)置和管理能帶來很大好處.
4、增加了對TCP傳輸協(xié)議的支持
V2版本只提供了對UDP協(xié)議的支持,在一些高要求的網(wǎng)絡(luò)環(huán)境中有很大限制,V3增加了對TCP協(xié)議的支持.UDP有著傳輸速度快,非連接傳輸 的便捷特性,但是UDP在傳輸上沒有TCP來的穩(wěn)定,當(dāng)網(wǎng)絡(luò)不穩(wěn)定或者黑客入侵的時(shí)候很容易使NFS的 Performance 大幅降低甚至使網(wǎng)絡(luò)癱 瘓.所以對于不同情況的網(wǎng)絡(luò)要有針對的選擇傳輸協(xié)議.
5、異步寫入特性.
6、改進(jìn)了服務(wù)器的mount性能.
在Linux上,UDP協(xié)議是缺省使用的協(xié) 議.作為服務(wù)器而言,別無選擇.但作為客戶端,可以使用TCP協(xié)議和其它使用TCP的NFS服務(wù)器互連.在局域網(wǎng)中使用UDP協(xié)議較好,因?yàn)榫钟蚓W(wǎng)有比較 穩(wěn)定的網(wǎng)絡(luò)保證,使用UDP可以帶來更好的性能,RHEL 4.0默認(rèn)使用V2版本.但是 Linux也可以通過mount option的nfsvers=n進(jìn)行選擇.
5、優(yōu)化輸入輸出
I/O程序?qū)inux系統(tǒng)性能也是相當(dāng)重要的,網(wǎng)絡(luò)硬件I/O對服務(wù)器尤其重要.現(xiàn)在大多數(shù)Linux服務(wù)器使用10/100 Mb以太網(wǎng).如果有較重的網(wǎng)絡(luò)負(fù)載,則可以考慮千兆以太網(wǎng)卡.如果沒有能力購買千兆網(wǎng)卡的話:可以使用多塊網(wǎng)卡虛擬成為一塊網(wǎng)卡,具有相同的IP地址.這 項(xiàng)技術(shù),在Linux中,這種技術(shù)稱為Bonding.Bonding在Linux2.4以上內(nèi)核中已經(jīng)包含了,只需要在編譯的時(shí)候把網(wǎng)絡(luò)設(shè)備選項(xiàng)中的 Bonding driver support選中見圖2.當(dāng)然利用Bonding技術(shù)配置雙網(wǎng)卡綁定的前提條件是兩塊網(wǎng)卡芯片組型號相同,并且都具備獨(dú)立的BIOS芯片.
圖2 Linux內(nèi)核的Bonding driver support選項(xiàng)#p#
然后,重新編譯核心,重新起動計(jì)算機(jī),執(zhí)行如下命令:
#ifconfig eth0 down#ifconfig bond0 ipaddress
#ifenslave bond0 eth0
#ifenslave bond0 eth1
現(xiàn)在兩塊網(wǎng)卡已經(jīng)象一塊一樣工作了.這樣可以提高集群節(jié)點(diǎn)間的數(shù)據(jù)傳輸.bonding對于服務(wù)器來是個(gè)比較好的選擇,在沒有千兆網(wǎng)卡時(shí),用兩 塊100兆網(wǎng)卡作bonding,可大大提高服務(wù)器到交換機(jī)之間的帶寬.但是需要在交換機(jī)上設(shè)置連接bonding網(wǎng)卡的兩個(gè)子口映射為同一個(gè)虛擬接口. 編輯/etc/modules.conf文件,加入如下內(nèi)容,以使系統(tǒng)在啟動時(shí)加載Bonding模塊.
alias bond0 bondingoptions bond0 mode=0
"mode"的值表示工作模式,共有0、1、2和3四種模式,這里設(shè)定為0.Bonding工作在負(fù)載均衡(Load Balancing (round-robin))方式下,即兩塊網(wǎng)卡同時(shí)工作,這時(shí)理論上Bonding能提供兩倍的帶寬.Bonding運(yùn)行在網(wǎng)卡的混雜 (Promisc)模式下,而且它將兩塊網(wǎng)卡的MAC地址修改為一樣的.混雜模式就是網(wǎng)卡不再只接收目的硬件地址是自身MAC地址的數(shù)據(jù)幀,而是可以接收 網(wǎng)絡(luò)上所有的幀.
6、關(guān)閉NFS服務(wù)器不用的服務(wù)
Linux在啟動時(shí)需要啟動很多系統(tǒng)服務(wù),它們向本地和網(wǎng)絡(luò)用戶提供了Linux的系統(tǒng)功能接口,直接面向應(yīng)用程序和用戶.但是,開啟不必要服務(wù)則會給操作系統(tǒng)帶來安全和性能上的影響.以root身份運(yùn)行:
#ntsysv
把不需要的服務(wù)和進(jìn)程前面的*去掉(用空格鍵),然后重新啟動系統(tǒng)服務(wù),這樣就可以使不需要的服務(wù)和進(jìn)程不再啟動.不但安全,而且還能提高系統(tǒng)的性能,一舉兩得.
7、設(shè)定客戶機(jī)合適的最大傳輸單元MTU
每個(gè)網(wǎng)絡(luò)都存在最大傳輸單元MTU(maximum transfer unit),要求每個(gè)數(shù)據(jù)報(bào)必須適合MTU.如果一個(gè)數(shù)據(jù)報(bào)進(jìn)入了一個(gè)MTU小于該數(shù)據(jù)報(bào)長度的網(wǎng)絡(luò),那么處于網(wǎng)絡(luò)邊界上的路由器會把該數(shù)據(jù)報(bào)分解為多個(gè) 小的數(shù)據(jù)報(bào).這樣會影響NFS網(wǎng)絡(luò)系統(tǒng)的性能.tracepath它是一個(gè)工具:它用來跟蹤MTU的路徑:首先使用超級用戶權(quán)限登陸客戶機(jī),使用命令::
Resume: pmtu 1500 hops 1 back 1
其中192.168.1.4是NFS服務(wù)器IP地址,2049是NFS服務(wù)器開啟的UDP協(xié)議的端口號.
可以使用命令查看:rpcinfo -p 192.168.1.4.最后tracepath命令會給出一個(gè)MTU值.
然后使用ifconfig命令查看客戶機(jī)上用于連接NFS服務(wù)器的網(wǎng)卡接口的MTU值.如果兩者相差很多,可以使用Ifconfig命令修改.
proc3 22 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
在第五行"th"后的 8表示8個(gè)線程.其他數(shù)字代表每秒鐘線程使用的最大百分比.如果后邊三個(gè)數(shù)字比較大表示可能現(xiàn)在掛載客戶機(jī)數(shù)目比較多,需要增加線程數(shù)目.#p#
(1)首先停止nfs服務(wù)
# echo 65536 > /proc/sys/net/core/rmem_default
#ntsysv
圖3自動掛載NFS文件系統(tǒng)
打開如圖3所示的窗口,在autofs和apmd服務(wù)選項(xiàng)加上*(用空格鍵),然后重新啟動系統(tǒng),這樣可以自動掛載NFS文件系統(tǒng).
13. 使用stand-alone模式運(yùn)行NFS
NFS服務(wù)器可以以stand-alone、xinetd兩種模式運(yùn)行.stand-alone方式是Unix傳統(tǒng)的C/S模式的訪問模式.服 務(wù)器監(jiān)聽(Listen)在一個(gè)特點(diǎn)的端口上等待客戶端的聯(lián)機(jī).如果客戶端產(chǎn)生一個(gè)連接請求,守護(hù)進(jìn)程就創(chuàng)建(Fork)一個(gè)子服務(wù)器響應(yīng)這個(gè)連接,而主 服務(wù)器繼續(xù)監(jiān)聽.以保持多個(gè)子服務(wù)器池等待下一個(gè)客戶端請求.stand-alone模式工作原理見圖4.
圖4 stand-alone工作模式#p#
工作在stand-alone模式下的網(wǎng)絡(luò)服務(wù)有route、gated.另外是大家最熟悉是Web服務(wù)器:Apache和郵件服務(wù)器 Sendmail、NFS.因?yàn)樵贜FS這種負(fù)載很大服務(wù)器上,預(yù)先創(chuàng)子服務(wù)器,可以通過客戶的服務(wù)速度.在Linux系統(tǒng)中通過stand-alone 工作模式啟動的服務(wù)由/etc/rc.d/下面對應(yīng)的運(yùn)行級別當(dāng)中的符號鏈接啟動.和stand-alone工作模式相比,xinetd模式不想要每一個(gè) 網(wǎng)絡(luò)服務(wù)進(jìn)程都監(jiān)聽其服務(wù)端口.運(yùn)行單個(gè)xinetd就可以同時(shí)監(jiān)聽所有服務(wù)端口,這樣就降低了系統(tǒng)開銷,保護(hù)系統(tǒng)資源.但是對于訪問量大、經(jīng)常出現(xiàn)并發(fā) 訪問時(shí),xinetd想要頻繁啟動對應(yīng)的網(wǎng)絡(luò)服務(wù)進(jìn)程,反而會導(dǎo)致系統(tǒng)性能下降.察看系統(tǒng)為Linux服務(wù)提供那種模式方法在Linux命令行可以使用 pstree命令可以看到兩種不同方式啟動的網(wǎng)絡(luò)服務(wù).一般來說系統(tǒng)一些負(fù)載高的服務(wù):NFS、sendmail、Apache服務(wù)是單獨(dú)啟動的.
14、 NFS服務(wù)器設(shè)置的調(diào)優(yōu)步驟:
(1)首先掛接NFS服務(wù)器和每個(gè)客戶端.(2) 然后測量當(dāng)前網(wǎng)絡(luò)、服務(wù)器和每個(gè)客戶端的執(zhí)行效率.(3)優(yōu)化讀寫塊大小.(4) 調(diào)整服務(wù)器 . 重復(fù)第一到第三步直到達(dá)到你渴望的性能.
1、掛載/home/cao目錄
首先建立這個(gè)目錄,然后再利用mount指令來掛載NFS 服務(wù)器的/home/cao目錄:
# mount -t nfs 192.168.1.4:/home/cao /home/nfs/cao
下面使用df命令查看掛載的目錄中已經(jīng)包括:NFS 服務(wù)器的IP地址的共享目錄,見圖5.
圖5 掛載NFS服務(wù)器的共享目錄
將資料掛載進(jìn)來后,只要進(jìn)入/home/nfs/cao目錄,就等于到了IP地址:192.168.1.4那部NFS 服務(wù)器的/home/cao目錄中.#p#
2、測試讀寫數(shù)據(jù)時(shí)間
NFS V2版本的文件傳輸尺寸設(shè)定(-rsize, -wsize)V2最多只能設(shè)定為8k,缺省情況是4k(4098字節(jié)),實(shí)際情況可能和缺省值有差別.這時(shí)需要進(jìn)行實(shí)際測試得到一個(gè)最佳值.方法是:
(1)測試NFS網(wǎng)絡(luò)文件系統(tǒng)的寫性能
首先以超級用戶身份掛載NFS服務(wù)器的/home/cao目錄.然后進(jìn)入本地目錄使用命令:
time dd if=/dev/zero of=/home/nfs/cao/nfs.dat bs=16k count=16384
這個(gè)命令意思使用命令 dd 向/dev/zero不斷輸入一個(gè)文件,是在NFS服務(wù)器的nfs.dat文件里寫16384個(gè)16KB的塊,bs是值是16K也就是一個(gè)256MB的文件,通常文件大小(256MB)設(shè)定為NFS服務(wù)器內(nèi)存的2倍.同時(shí)回寫到客戶機(jī)中同樣大小、數(shù)量的塊.正常的輸出結(jié)果可能是:
輸出了 16384+0 個(gè)塊user 0m0.200s
輸出了 66535+0 個(gè)塊user 0m0.420s
<p '>192.168.1.4: :/home/cao /home/nfs/cao nfs rsize=8192,wsize=8192,timeo=10,intr
重新使用命令掛載NFS服務(wù)器的/home/cao的目錄,然后重復(fù)上面的(1)、(2)、(3)步驟.比較修改讀寫塊大小后,讀寫性能是否有 所提高.如果沒有提高的話可以直接刪除/etc/fstab文件.接著尋找最佳值.用于測試的rsize和wsize必須是1024的倍數(shù),對于 NFS V2版本來說8192是RSIZE和WSIZE的最大數(shù)值.
總結(jié):本文介紹了如何在現(xiàn)有條件下提高NFS文件服務(wù)器性能,網(wǎng)絡(luò)管理員充分了解自己的計(jì)算機(jī)和網(wǎng)絡(luò),從而找到真正的瓶頸所在.在預(yù)算短缺的今天,理解如何優(yōu)化系統(tǒng)性能比以往任何時(shí)候都重要.一味地硬件投資并不是能夠讓人們接受的辦法,并且也不一定生效.