深度掌握NFS服務(wù)器
對于NFS服務(wù)器,可能你已經(jīng)有所掌握。但是你真的完全學(xué)會了么?很多細節(jié)上的知識也許已經(jīng)被忽略了。沒關(guān)系,本文就將為大家做一下具體的總結(jié)。希望對大家有所幫助。NFS是網(wǎng)絡(luò)文件系統(tǒng)(Network File System)的簡稱,是分布式計算系統(tǒng)的一個組成部分,可實現(xiàn)在異種網(wǎng)絡(luò)上共享和裝配遠程文件系統(tǒng).NFS由Sun公司開發(fā),目前已經(jīng)成為文件服務(wù)的一種標準(RFC1904,RFC1813).其最大的功能就是可以通過網(wǎng)絡(luò),讓不同操作系統(tǒng)的 計算機可以共享數(shù)據(jù),所以也可以將它看做是一個文件服務(wù)器.NFS文件服務(wù)器是Linux最常見網(wǎng)絡(luò)的服務(wù)之一.盡管它的規(guī)則簡單,卻有著豐富的內(nèi)涵. NFS 服務(wù)器可以看作是一個文件服務(wù)器,它可以讓你的PC通過網(wǎng)絡(luò)將遠端的NFS 服務(wù)器共享出來的文件掛載到自己的系統(tǒng)中,在客戶端看來使用NFS的遠端文件就象是在使用本地文件一樣.
一、硬件設(shè)備的選擇
隨著計算機技術(shù)的發(fā)展,以硬盤為首的I/O設(shè)備對計算機的整體性能影響越來越大,通訊服務(wù)器(messaging/E-mail/VOD):快 速的I/O是這類應(yīng)用的關(guān)鍵,硬盤的I/O吞吐能力是主要瓶頸;數(shù)據(jù)倉庫:大型商業(yè)數(shù)據(jù)存儲、編目、索引、數(shù)據(jù)分析,高速商業(yè)計算等,需要具有良好的網(wǎng)絡(luò) 和硬盤I/O吞吐能力;數(shù)據(jù)庫(ERP/OLTP等)服務(wù)器,除了需要具有強大的CPU處理能力,同時需要有很好的磁盤I/O吞吐性能;
NFS網(wǎng)絡(luò)文件系統(tǒng)性能的主要瓶頸是硬盤的I/O性能和網(wǎng)絡(luò)帶寬.SCSI(Small Computer System Interface,小型計算機系統(tǒng)接口)技術(shù)在需要高性能的網(wǎng)絡(luò)服務(wù)器和工作站領(lǐng)域卻得到了廣泛應(yīng)用,現(xiàn)在已經(jīng)成為網(wǎng)絡(luò)服務(wù)器 的標準的接口選擇.速度從SCSI-I最初的5MBps到2005年的320MBps.內(nèi)部傳輸率的高低是評價一個硬盤整體性能的決定性因素,硬盤數(shù)據(jù)傳 輸率分為內(nèi)外部傳輸率.通常稱外部傳輸率也為突發(fā)數(shù)據(jù)傳輸率或接口傳輸率,指從硬盤的緩存中向外輸出數(shù)據(jù)的速度.由于硬盤的內(nèi)部傳輸率要小于外部傳輸率, 所以只有內(nèi)部傳輸率才可以作為衡量硬盤性能的真正標準.SCSI硬盤技術(shù)在內(nèi)部傳輸率要性能上有更大優(yōu)勢.通常在一個50個用戶的NFS網(wǎng)絡(luò)系統(tǒng)中使用 10個基于RAID5級別10000rpm的SCSI硬盤可以達到較好的效果.
在服務(wù)器磁盤I/O性能之后,網(wǎng)絡(luò)帶寬是網(wǎng)絡(luò)文件系統(tǒng)下一個瓶頸.通常應(yīng)當(dāng)使用單獨的1000兆快速以太網(wǎng)連接NFS服務(wù)器和客戶機發(fā)送報文信息.同時確保NFS服務(wù)器和客戶機工作正常,交換機、路由器等網(wǎng)絡(luò)設(shè)備工作正常.圖-1是一個理想的NFS網(wǎng)絡(luò)拓撲結(jié)構(gòu).

圖-1 一個理想的NFS網(wǎng)絡(luò)拓撲結(jié)構(gòu)#p#
二、軟件環(huán)境優(yōu)化
如果我們沒有很高硬件環(huán)境,可以考慮從軟件方面優(yōu)化性能.
1、清理NFS服務(wù)器磁盤碎片:
不論Linux文件系統(tǒng)采用什么文件格式(ext3、JFS、XFS、ReiserFS )、何種類型的硬盤(IDE 、SCSI),隨著時間的推移文件系統(tǒng)都會趨向于碎片化.ext3、JFS等高級文件系統(tǒng)可以減少文件系統(tǒng)的碎片化,但是并沒有消除.在繁忙的數(shù)據(jù)庫服務(wù) 器中,隨著時間的過去,文件碎片化將降低硬盤性能,硬盤性能從硬盤讀出或?qū)懭霐?shù)據(jù)時才能注意到.時間長了會發(fā)現(xiàn)每個磁盤上確實積累了非常多的垃圾文件,釋 放磁盤空間可以幫助系統(tǒng)更好地工作.Linux最好的整理磁盤碎片的方法是做一個完全的備份,重新格式化分區(qū),然后從備份恢復(fù)文件.但是對于7×24小時 工作關(guān)鍵任務(wù)服務(wù)器來說是比較困難的.Kleandisk是一個高效的磁盤清理工具,它能把磁盤上的文件分成不同的"組",比如把所有的"core"文件 歸成一組(Group),這樣要刪除所有core文件時只要刪除這個組就行了.core文件是當(dāng)軟件運行出錯時產(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 這樣以后每次開機,硬盤的 DMA 就會開啟,不必每次手動設(shè)定.添加前后你可以使用命令:hdparm -Tt /dev/hda 來測試對比一下.
3、調(diào)整緩沖區(qū)刷新參數(shù)
Linux內(nèi)核中,包含了一些對于系統(tǒng)運行態(tài)的可設(shè)置參數(shù).緩沖刷新的參數(shù)可以通過調(diào)整 /proc/sys/vm/bdflush文件來完成,這個文件的格式是這樣的:
# cat /proc/sys/vm/bdflush30 64 64 256 500 3000 60 0 0
每一欄是一個參數(shù),其中最重要的是前面幾個參數(shù).第一個數(shù)字是在"dirty"緩沖區(qū)達到多少的時候強制喚醒bdflush進程刷新硬盤,第二 個數(shù)字是每次讓bdflush進程刷新多少個dirty塊.所謂dirty塊是必須寫到磁盤中的緩存塊.接下來的參數(shù)是每次允許bd flush將多少個內(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的緩沖刷新機制是Linux文件系統(tǒng)高效的原因之一.
4、NFS版本的選擇
NFS協(xié)議從誕生到現(xiàn)在為止,已經(jīng)有多個版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4 (rfc3010).最早,Sun公司曾將NFS v2設(shè)計成為只使用UDP協(xié)議,主要原因是當(dāng)時機器的內(nèi)存、網(wǎng)絡(luò)速度和CPU的影響,不得不選擇對機器負擔(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 選項來進行設(shè)定.
3、完整的信息返回
V3版本增加和完善了許多錯誤和成功信息的返回,對于服務(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)定或者黑客入侵的時候很容易使NFS的 Performance 大幅降低甚至使網(wǎng)絡(luò)癱 瘓.所以對于不同情況的網(wǎng)絡(luò)要有針對的選擇傳輸協(xié)議.
5、異步寫入特性.
6、改進了服務(wù)器的mount性能.
在Linux上,UDP協(xié)議是缺省使用的協(xié) 議.作為服務(wù)器而言,別無選擇.但作為客戶端,可以使用TCP協(xié)議和其它使用TCP的NFS服務(wù)器互連.在局域網(wǎng)中使用UDP協(xié)議較好,因為局域網(wǎng)有比較 穩(wěn)定的網(wǎng)絡(luò)保證,使用UDP可以帶來更好的性能,RHEL 4.0默認使用V2版本.但是 Linux也可以通過mount option的nfsvers=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ò)負載,則可以考慮千兆以太網(wǎng)卡.如果沒有能力購買千兆網(wǎng)卡的話:可以使用多塊網(wǎng)卡虛擬成為一塊網(wǎng)卡,具有相同的IP地址.這 項技術(shù),在Linux中,這種技術(shù)稱為Bonding.Bonding在Linux2.4以上內(nèi)核中已經(jīng)包含了,只需要在編譯的時候把網(wǎng)絡(luò)設(shè)備選項中的 Bonding driver support選中見圖2.當(dāng)然利用Bonding技術(shù)配置雙網(wǎng)卡綁定的前提條件是兩塊網(wǎng)卡芯片組型號相同,并且都具備獨立的BIOS芯片.

圖2 Linux內(nèi)核的Bonding driver support選項#p#
然后,重新編譯核心,重新起動計算機,執(zhí)行如下命令:
#ifconfig eth0 down#ifconfig bond0 ipaddress
#ifenslave bond0 eth0
#ifenslave bond0 eth1
現(xiàn)在兩塊網(wǎng)卡已經(jīng)象一塊一樣工作了.這樣可以提高集群節(jié)點間的數(shù)據(jù)傳輸.bonding對于服務(wù)器來是個比較好的選擇,在沒有千兆網(wǎng)卡時,用兩 塊100兆網(wǎng)卡作bonding,可大大提高服務(wù)器到交換機之間的帶寬.但是需要在交換機上設(shè)置連接bonding網(wǎng)卡的兩個子口映射為同一個虛擬接口. 編輯/etc/modules.conf文件,加入如下內(nèi)容,以使系統(tǒng)在啟動時加載Bonding模塊.
alias bond0 bondingoptions bond0 mode=0
"mode"的值表示工作模式,共有0、1、2和3四種模式,這里設(shè)定為0.Bonding工作在負載均衡(Load Balancing (round-robin))方式下,即兩塊網(wǎng)卡同時工作,這時理論上Bonding能提供兩倍的帶寬.Bonding運行在網(wǎng)卡的混雜 (Promisc)模式下,而且它將兩塊網(wǎng)卡的MAC地址修改為一樣的.混雜模式就是網(wǎng)卡不再只接收目的硬件地址是自身MAC地址的數(shù)據(jù)幀,而是可以接收 網(wǎng)絡(luò)上所有的幀.
6、關(guān)閉NFS服務(wù)器不用的服務(wù)
Linux在啟動時需要啟動很多系統(tǒng)服務(wù),它們向本地和網(wǎng)絡(luò)用戶提供了Linux的系統(tǒng)功能接口,直接面向應(yīng)用程序和用戶.但是,開啟不必要服務(wù)則會給操作系統(tǒng)帶來安全和性能上的影響.以root身份運行:
#ntsysv
把不需要的服務(wù)和進程前面的*去掉(用空格鍵),然后重新啟動系統(tǒng)服務(wù),這樣就可以使不需要的服務(wù)和進程不再啟動.不但安全,而且還能提高系統(tǒng)的性能,一舉兩得.
7、設(shè)定客戶機合適的最大傳輸單元MTU
每個網(wǎng)絡(luò)都存在最大傳輸單元MTU(maximum transfer unit),要求每個數(shù)據(jù)報必須適合MTU.如果一個數(shù)據(jù)報進入了一個MTU小于該數(shù)據(jù)報長度的網(wǎng)絡(luò),那么處于網(wǎng)絡(luò)邊界上的路由器會把該數(shù)據(jù)報分解為多個 小的數(shù)據(jù)報.這樣會影響NFS網(wǎng)絡(luò)系統(tǒng)的性能.tracepath它是一個工具:它用來跟蹤MTU的路徑:首先使用超級用戶權(quán)限登陸客戶機,使用命令::
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命令會給出一個MTU值.
然后使用ifconfig命令查看客戶機上用于連接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個線程.其他數(shù)字代表每秒鐘線程使用的最大百分比.如果后邊三個數(shù)字比較大表示可能現(xiàn)在掛載客戶機數(shù)目比較多,需要增加線程數(shù)目.#p#
(1)首先停止nfs服務(wù)
# echo 65536 > /proc/sys/net/core/rmem_default
#ntsysv

圖3自動掛載NFS文件系統(tǒng)
打開如圖3所示的窗口,在autofs和apmd服務(wù)選項加上*(用空格鍵),然后重新啟動系統(tǒng),這樣可以自動掛載NFS文件系統(tǒng).
13. 使用stand-alone模式運行NFS
NFS服務(wù)器可以以stand-alone、xinetd兩種模式運行.stand-alone方式是Unix傳統(tǒng)的C/S模式的訪問模式.服 務(wù)器監(jiān)聽(Listen)在一個特點的端口上等待客戶端的聯(lián)機.如果客戶端產(chǎn)生一個連接請求,守護進程就創(chuàng)建(Fork)一個子服務(wù)器響應(yīng)這個連接,而主 服務(wù)器繼續(xù)監(jiān)聽.以保持多個子服務(wù)器池等待下一個客戶端請求.stand-alone模式工作原理見圖4.

圖4 stand-alone工作模式#p#
工作在stand-alone模式下的網(wǎng)絡(luò)服務(wù)有route、gated.另外是大家最熟悉是Web服務(wù)器:Apache和郵件服務(wù)器 Sendmail、NFS.因為在NFS這種負載很大服務(wù)器上,預(yù)先創(chuàng)子服務(wù)器,可以通過客戶的服務(wù)速度.在Linux系統(tǒng)中通過stand-alone 工作模式啟動的服務(wù)由/etc/rc.d/下面對應(yīng)的運行級別當(dāng)中的符號鏈接啟動.和stand-alone工作模式相比,xinetd模式不想要每一個 網(wǎng)絡(luò)服務(wù)進程都監(jiān)聽其服務(wù)端口.運行單個xinetd就可以同時監(jiān)聽所有服務(wù)端口,這樣就降低了系統(tǒng)開銷,保護系統(tǒng)資源.但是對于訪問量大、經(jīng)常出現(xiàn)并發(fā) 訪問時,xinetd想要頻繁啟動對應(yīng)的網(wǎng)絡(luò)服務(wù)進程,反而會導(dǎo)致系統(tǒng)性能下降.察看系統(tǒng)為Linux服務(wù)提供那種模式方法在Linux命令行可以使用 pstree命令可以看到兩種不同方式啟動的網(wǎng)絡(luò)服務(wù).一般來說系統(tǒng)一些負載高的服務(wù):NFS、sendmail、Apache服務(wù)是單獨啟動的.
14、 NFS服務(wù)器設(shè)置的調(diào)優(yōu)步驟:
(1)首先掛接NFS服務(wù)器和每個客戶端.(2) 然后測量當(dāng)前網(wǎng)絡(luò)、服務(wù)器和每個客戶端的執(zhí)行效率.(3)優(yōu)化讀寫塊大小.(4) 調(diào)整服務(wù)器 . 重復(fù)第一到第三步直到達到你渴望的性能.
1、掛載/home/cao目錄
首先建立這個目錄,然后再利用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ù)器的共享目錄
將資料掛載進來后,只要進入/home/nfs/cao目錄,就等于到了IP地址:192.168.1.4那部NFS 服務(wù)器的/home/cao目錄中.#p#
2、測試讀寫數(shù)據(jù)時間
NFS V2版本的文件傳輸尺寸設(shè)定(-rsize, -wsize)V2最多只能設(shè)定為8k,缺省情況是4k(4098字節(jié)),實際情況可能和缺省值有差別.這時需要進行實際測試得到一個最佳值.方法是:
(1)測試NFS網(wǎng)絡(luò)文件系統(tǒng)的寫性能
首先以超級用戶身份掛載NFS服務(wù)器的/home/cao目錄.然后進入本地目錄使用命令:
time dd if=/dev/zero of=/home/nfs/cao/nfs.dat bs=16k count=16384
這個命令意思使用命令 dd 向/dev/zero不斷輸入一個文件,是在NFS服務(wù)器的nfs.dat文件里寫16384個16KB的塊,bs是值是16K也就是一個256MB的文件,通常文件大?。?56MB)設(shè)定為NFS服務(wù)器內(nèi)存的2倍.同時回寫到客戶機中同樣大小、數(shù)量的塊.正常的輸出結(jié)果可能是:
輸出了 16384+0 個塊user 0m0.200s
輸出了 66535+0 個塊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ò)管理員充分了解自己的計算機和網(wǎng)絡(luò),從而找到真正的瓶頸所在.在預(yù)算短缺的今天,理解如何優(yōu)化系統(tǒng)性能比以往任何時候都重要.一味地硬件投資并不是能夠讓人們接受的辦法,并且也不一定生效.















 
 
 
 
 
 
 