NFS 使用 RPC 來進行客戶端和服務器之間的通信。而在 RPC 的底層凳怨,NFS 使用 TCP 來進行數(shù)據(jù)的可靠傳輸初婆,以便客戶端和服務器之間能夠有效地傳輸文件和進行遠程調用(默認為TCP,也可調整為udp)
1.首先服務器端啟動RPC服務portmap,并開啟portmap的111端口猿棉。
2.服務器端啟動NFS服務磅叛,并向RPC注冊端口信息。
3.客戶端啟動RPC(portmap服務)萨赁,向服務端的RPC(portmap)服務請求服務端的NFS端口弊琴。
4.服務端的RPC(portmap)服務反饋NFS端口信息給客戶端。
5.客戶端通過獲取的NFS端口來建立和服務端的NFS連接并進行數(shù)據(jù)的傳輸(網(wǎng)絡傳輸基于TCP)杖爽。
當客戶端讀取或寫入文件時敲董,它會向服務端發(fā)送相應的文件訪問請求,隨后服務端會將文件數(shù)據(jù)通過網(wǎng)絡傳輸給客戶端慰安,或者接收客戶端發(fā)送的寫入數(shù)據(jù)腋寨。
一、服務器端掛載參數(shù)調整:
如果 /etc/exports 和 /etc/fstab 中都定義了對同一共享目錄的參數(shù)化焕,那么 /etc/exports 中的參數(shù)會優(yōu)先生效萄窜。
這是因為 /etc/exports 是 NFS 服務器用于指定共享目錄和訪問控制參數(shù)的主要配置文件,而 /etc/fstab 是用于指定本地文件系統(tǒng)掛載點和選項的文件。
/etc/exports 詳細參數(shù)介紹:
/data *(rw,async,no_root_squash,no_subtree_check,insecure)
ro 只讀訪問
rw 讀寫訪問
sync 同步寫入查刻,強制寫操作等待數(shù)據(jù)同步到磁盤后再返回成功
async 異步寫入键兜,不必等待數(shù)據(jù)真正寫入磁盤就返回成功,資料會先暫存于內存中穗泵,而非直接寫入硬盤
secure NFS通過1024以下的安全TCP/IP端口發(fā)送
insecure NFS通過1024以上的端口發(fā)送
wdelay(默認) 延遲寫入普气,如果有多個客戶端要對同一個共享目錄進行寫操作,則將這些操作集中執(zhí)行佃延。對有很多小的IO寫操作時现诀,使用該選項可以有效的提高效率
no_wdelay 不延遲寫入,如果有多個客戶端要對同一個共享目錄進行寫操作則立即寫入履肃。當設置了async選項時仔沿,no_wdelay選項無效,應與sync配合使用
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時榆浓,強制NFS檢查父目錄的權限(默認)
no_subtree_check 和上面相對于未,不檢查父目錄權限
root_squash root權限轉換為nobody
no_root_squash root權限保留不轉換
all_squash 所有用戶權限都轉換為nobody
no_all_squash 用戶權限保留撕攒,前提UID陡鹃、GID一致
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squas root用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的GID
NFS沒有用戶認證機制,且數(shù)據(jù)在網(wǎng)絡上傳送的時候是明文傳送抖坪,一般只能在局域網(wǎng)中使用萍鲸。不需要輸入賬號密碼,NFS 一般是 IP 認證擦俐,定義好可訪問該NFS的機器ip地址即可脊阴。
NFSv4 引入了身份認證和加密機制,可提供更高的安全性蚯瞧。NFSv4 支持基于 Kerberos 的身份認證嘿期,為每個連接實現(xiàn)了加密,并且提供了更為靈活的權限控制埋合。
(1)當設置all_squash時:訪客時一律被映射為匿名用戶(nfsnobody)备徐;
(2)當設置no_all_squash時:訪客被映射為服務器上相同uid的用戶,因此在客戶端應建立與服務端uid一致的用戶甚颂,否則也映射為nobody蜜猾。root除外,因為root_suqash為默認選項振诬,除非指定了no_root_squash蹭睡。
(1)默認值。當設置root_squash時:訪客以root用戶訪問NFS服務端時赶么,被映射為nobody用戶肩豁;
(2)當設置no_root_squash時:訪客以root用戶訪問NFS服務端時,被映射為root用戶。以其他用戶訪問時同樣映射為對應uid的用戶蓖救,因為no_all_squash是默認選項洪规。
exportfs -s 查看 nfs 服務已加載的配置情況。
exportfs -rv 重載 /etc/exports循捺。
性能優(yōu)化相關:
nfsstat -s #查看服務器端nfs統(tǒng)計信息
badcalls: 表示在 RPC 調用中遇到的錯誤次數(shù)斩例。
null: 表示空操作的數(shù)量,這個數(shù)字應該很小从橘,因為空操作通常不會占據(jù)太多比例念赶。
compound: 組合操作的數(shù)量,在 NFSv4 中恰力,多個操作可以被組合成一個復合操作叉谜,這里統(tǒng)計的是復合操作的數(shù)量。
access: access 操作用于檢查文件的訪問權限
getattr: getattr 操作用于獲取文件屬性踩萎。
sequence: sequence 操作用于客戶端和服務器之間的順序號處理
test_stateid: test_stateid 操作用于在服務器上測試狀態(tài) ID停局。
getfh: getfh 操作用于獲取文件句柄,用于標識文件在 NFS 服務器上的唯一位置香府。
open: open 操作用于打開文件或目錄董栽。
lookup 和 lookup_root: lookup 操作用于查詢目錄并返回文件或目錄句柄。lookup_root 操作是查詢根目錄的操作企孩。
1.建議所有 NFS 用戶禁用 NFS 服務器委派功能锭碳。這是為了避免Linux 內核錯誤,該錯誤會導致 NFS 客戶端因大量TEST_STATEIDNFS 消息產(chǎn)生的網(wǎng)絡流量 過多而急劇減慢 勿璃。
服務器端關閉leases 委派(以下是臨時調整擒抛,永久生效修改/etc/sysctl.conf):
echo 0 > /proc/sys/fs/leases-enable #fs.leases-enable用于在 NFS 服務器上啟用或禁用租約功能。 在 NFS 服務器上啟用了租約功能后补疑,客戶端可以請求租約來鎖定文件歧沪,并指定鎖定的類型(共享鎖或獨占鎖)。通過租約莲组,服務器可以確保同時只有一個客戶端持有特定文件的獨占訪問權限诊胞,或者多個客戶端持有共享訪問權限。
sysctl -w fs.leases-enable=0
ps:如果重新掛載為 4.0胁编,我們可能不會看到該問題厢钧,因為它會避免 TEST_STATEID。
2.調整nfsd數(shù)量:
/etc/default/nfs-kernel-server文件是nfs-kernel-server服務的系統(tǒng)配置文件.
// RPCNFSDCOUNT=8 nfsd 數(shù)量
/etc/nfs.conf文件是NFS服務器的全局參數(shù)文件嬉橙。 // [nfsd]中threads字段 默認8 nfsd數(shù)量
如果需要更改內核nfsd的相關參數(shù)早直,就需要修改/etc/default/nfs-kernel-server文件,如果需要更改NFS服務器的共享或權限等設置市框,就需要修改/etc/nfs.conf文件霞扬。
/etc/nfs.conf中:
[mountd]
# threads=1
[nfsd]
# threads=8
nfsd線程:
nfsd線程是負責處理客戶端請求的守護進程線程,其中nfsd表示NFS守護進程(NFS daemon)。它主要負責處理客戶端對NFS服務器上共享的文件系統(tǒng)的訪問請求喻圃,包括讀取萤彩、寫入、刪除斧拍、修改文件等操作雀扶。
nfsd線程通過監(jiān)聽客戶端的NFS請求,并創(chuàng)建相應的工作線程來處理這些請求肆汹,實現(xiàn)對遠程文件系統(tǒng)的數(shù)據(jù)訪問和管理愚墓。
mounted線程:
mounted線程是mountd服務(NFS mount服務)的線程,它負責處理客戶端對NFS服務器上文件系統(tǒng)的掛載和卸載請求昂勉。
mountd服務是NFS服務器上的一個服務浪册,其主要作用是處理客戶端對NFS共享目錄的掛載請求,以便客戶端可以通過掛載點訪問遠程文件系統(tǒng)岗照。
NFSD缺省值對于小型系統(tǒng)來說是一個很好的起點村象,但對于擁有兩個以上客戶的客戶機系統(tǒng)或者擁有兩個以上客戶機的服務器來說就多半需要增加了。
查看啟動的nfsd 進程:
ps -ef | grep nfs
在服務器端,一定要確保有足夠的 NFS 內核線程來處理所有客戶機.在默認情況Red Hat系統(tǒng)會啟動8個線程.對于繁忙的 NFS 服務器,應該提高這個數(shù)字,比如32或64.
2-1.可以用 nfsstat -rc 命令評估客戶機,了解是否有阻塞的現(xiàn)象,這個命令顯示客戶機遠程過程調用(RPC)統(tǒng)計數(shù)據(jù).
例:
# nfsstat -rc
Client rpc stats:
calls retrans authrefrsh
95374234 3432 0
第二列retrans是3432,這表示從上一次系統(tǒng)啟動以來出現(xiàn)了3432次重新傳輸?shù)那闆r.這個數(shù)字比較大,這可能意味著 NFS 守護進程的線程不足以處理所有客戶機的請求攒至,就應該考慮增加NFS線程厚者。
2-2.確定更多 NFS 線程是否有助于提高性能的一種方法是cat /proc/net/rpc/nfsd中的數(shù)據(jù)以了解 NFS 守護進程的負載。
以th開頭的輸出行列出了線程數(shù)嗓袱,最后 10 個數(shù)字是秒數(shù)的直方圖籍救,前 10% 的線程忙碌习绢,后 10%渠抹,依此類推。
理想情況下闪萄,希望最后兩個數(shù)字為零或接近零梧却,表示線程正忙并且您沒有“浪費”任何線程。如果最后兩個數(shù)字相當高败去,應該添加 NFS 守護進程放航,因為 NFS 服務器已成為瓶頸。如果最后兩個圆裕、三個或四個數(shù)字為零广鳍,則可能沒有使用某些線程。就我個人而言吓妆,如果我的系統(tǒng)有足夠的內存赊时,我不介意這種情況,因為我可能已經(jīng)到了需要更多 NFS 守護進程的地步行拢。
NFS的隊列大小
在linux 2.2和2.4內核里,默認的8個nfsd的輸入隊列大小是64K,2.6內核是108K.下面將設置為較合理的值256K
echo 262144 > /proc/sys/net/core/rmem_default
echo 262144 > /proc/sys/net/core/rmem_max
echo 262144 > /proc/sys/net/core/wmmen_default
echo 262144 > /proc/sys/net/core/wmmen_max
作為生產(chǎn) HPC 系統(tǒng)的經(jīng)驗法則祖秒,我傾向于在 NFS 服務器上放置不少于 64GB 的內存,因為內存總體上更便宜。你總是可以使用更少的內存竭缝,也許是 16GB房维,但你可能會付出性能代價。但是抬纸,如果您的應用程序不執(zhí)行太多 I/O咙俩,那么權衡可能是值得的。
如果您選擇使用異步 NFS 模式湿故,您將需要更多內存來利用async 暴浦,因為 NFS 服務器將首先將 I/O 請求存儲在內存中,響應 NFS 客戶端晓锻,然后通過讓文件系統(tǒng)將其寫入穩(wěn)定存儲歌焦。因此,您需要盡可能多的內存以獲得最佳性能砚哆。
二独撇、nfs-client 客戶端掛載選項調整 (多個選項之間用逗號分開)
nfs掛載參數(shù)文檔:https://linux.die.net/man/5/nfs
vim /etc/fstab
10.1.1.100:/data /nfs-data/data nfs4 rw,noatime,nodiratime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.3.1.76,local_lock=none,addr=10.1.1.100 0 0
nfsstat -c #查看客戶端nfs統(tǒng)計信息
lookup 操作用于查找指定路徑的文件或目錄。
test_stateid: test_stateid 操作通常用于測試狀態(tài) ID躁锁。
性能優(yōu)化相關參數(shù):
1.atime 更新訪問時間 這個建議別用纷铣,會降低nfs的性能 可以加上noatime
2.auto 能夠被自動掛載通過-a選項
3.async 異步掛載 sync同步掛載
sync適用在通信比較頻繁且實時性比較高的場合,比如Linux系統(tǒng)的rootfs通過nfs掛載战转,如果搞成async搜立,當執(zhí)行大型網(wǎng)絡通信程序如gdbserver與client之類,則系統(tǒng)此時會無響應槐秧,報一些“NFS is not responding“之類的錯誤啄踊。
當然并非sync就比async好,如果在遠程掛載點處進行大批量數(shù)據(jù)生成刁标,如解壓一個大型tar包颠通,此時速度會非常慢,我對比了一下在nfs server端解壓只需半分多鐘膀懈,在client端則要40來分鐘顿锰,性能嚴重受到影響。
當改成async后启搂,在client端解壓只需4分多鐘硼控,雖然比server端慢一些但性能已得到很大改善。所以當涉及到很多零碎文件操作時胳赌,選用async性能更高牢撼。
vim /fstab
10.1.1.115:/data /data nfs auto,async,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
客戶端的async 參數(shù)控制的是客戶端對服務器的讀寫操作的處理方式。
4.timeo (超時)選項是 NFS 客戶端在重新傳輸數(shù)據(jù)包(未收到 ACK)之前在 NFS 服務器上等待的時間量匈织。
timeo的值以十分之一秒為單位給出浪默,因此如果timeo為5牡直,則 NFS 客戶端將等待 0.5 秒再重新傳輸。默認值為0.7 (0.07 秒)
5.retrans NFS 客戶端將嘗試重新傳輸數(shù)據(jù)包的次數(shù)纳决。
如果值為5碰逸,客戶端將重新發(fā)送 RPC 數(shù)據(jù)包五次,兩次嘗試之間等待timeo秒阔加。如果在最后一次嘗試后 NFS 服務器沒有響應饵史,您將收到一條消息Server not responding。NFS 客戶端然后重置 RPC 傳輸嘗試計數(shù)器并以相同的方式再次嘗試(相同的timeo和retrans值)
在擁塞的網(wǎng)絡上胜榔,您經(jīng)常會看到 RPC 數(shù)據(jù)包的重傳胳喷。一個很好的判斷方法是運行nfsstat -r命令并查找標有retrans的列。如果數(shù)量很大夭织,則網(wǎng)絡可能非常擁塞吭露。如果是這種情況,您可能希望增加timeo和retrans的值以增加嘗試次數(shù)和 RPC 嘗試之間的時間量尊惰。雖然執(zhí)行此操作會降低 NFS 性能讲竿,但它可能有助于平衡網(wǎng)絡流量,從而減少擁塞弄屡。根據(jù)我的經(jīng)驗题禀,擺脫擁塞和丟包可以帶來更好、更均勻的性能膀捷。
6.wsize/rsize 兩個 NFS 客戶端選項指定用于寫入 ( wsize ) 和讀取 ( rsize )的數(shù)據(jù)塊的大小迈嘹。
如果您不指定塊大小,則默認值由 NFS 版本和所使用的內核決定全庸。如果您已經(jīng)運行并配置了 NFS秀仲,檢查當前塊大小的最佳方法是運行命令
cat /proc/mounts 在 NFS 客戶端上并查找wsize和rsize值。
172.16.17.251:/data/test /data nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=30006,timeo=600,retrans=2,sec=sys,mountaddr=172.16.17.251,mountvers=3,mountport=30003,mountproto=udp,local_lock=none,addr=172.16.17.251 0 0
減小 rsize 和 wsize 可以在一個比較擁塞的網(wǎng)絡上通過向每個 NFS 請求發(fā)送較短的包列糕篇,從而提高 NFS 性能啄育。但是帶來一個副作用酌心,就是需要更多的包在網(wǎng)絡上發(fā)送數(shù)據(jù)拌消,增加了網(wǎng)絡的通信量,同時在服務器和客戶機上都增加了 CPU 的開銷安券。
如果您的 NFS 文件系統(tǒng)是通過一個高速網(wǎng)絡掛載的墩崩,如 SP Switch,則較大的讀/寫包能提高 NFS 文件系統(tǒng)的性能侯勉。在 NFS V3中鹦筹,rsize 和 wsize 可以設置最大至 65536,缺省值是 32768址貌。
7.NFS文件緩存:
FS-Cache铐拐,它將 NFS 服務器上的文件緩存到本地存儲設備上徘键,例如硬盤驅動器或 SSD,加快訪問速度遍蟋。當緩存塊不命中時吹害,會從服務器重新獲取數(shù)據(jù)并緩存到本地磁盤下來。
緩存文件系統(tǒng)適用于以讀取為主的文件系統(tǒng)的情況虚青,例如應用程序文件系統(tǒng)它呀。此外,您應該使用緩存文件系統(tǒng)在慢速網(wǎng)絡上共享數(shù)據(jù)棒厘。與復制服務器不同纵穿,緩存文件系統(tǒng)可以與可寫文件系統(tǒng)一起使用,但性能會隨著寫入百分比的上升而降低奢人。如果寫入百分比太高谓媒,緩存文件系統(tǒng)可能會降低 NFS 性能。
如果 NFS 服務器經(jīng)常更新何乎,請不要使用緩存文件系統(tǒng)篙耗,因為這樣做會導致比通過 NFS 操作更多的流量。
7-1.緩存文件系統(tǒng)的/etc/fstab如下所示:
# device device mount FS fsck mount mount
# to mount to fsck point type pass at boot options
server:/usr/dist cache /usr/dist cachefs 3 yes ro,backfstype=nfs,cachedir=/cache
7-2.要監(jiān)視緩存文件系統(tǒng)的有效性宪赶,請使用cachefsstat命令(在Solaris 2.5 及更高版本的操作環(huán)境中可用)宗弯。
/usr/bin/cachefsstat [-z] path
-z初始化統(tǒng)計信息。您應該在再次執(zhí)行cachfsstat之前執(zhí)行cachefs -z(僅限超級用戶)以收集緩存性能的統(tǒng)計信息搂妻。打印的統(tǒng)計信息反映了統(tǒng)計信息重新初始化之前的統(tǒng)計信息蒙保。
path是緩存文件系統(tǒng)掛載的路徑。如果不指定路徑欲主,則使用所有已安裝的緩存文件系統(tǒng)邓厕。
如果沒有-z選項,您可以以常規(guī) UNIX 用戶身份執(zhí)行此命令扁瓢。由cachefsstat命令提供的統(tǒng)計信息包括緩存命中和未命中详恼、一致性檢查和修改操作:
緩存命中率:緩存命中占總嘗試次數(shù)的百分比(后面是實際命中和未命中的次數(shù))
一致性檢查:執(zhí)行的一致性檢查的數(shù)量。接下來是通過的數(shù)字和失敗的數(shù)字引几。
修改:修改操作的數(shù)量昧互,包括寫入和創(chuàng)建。
cachefsstat命令的示例是:
cachefsstat /home/sam
cache hit rate: 73% (1234 hits, 450 misses)
consistency checks: 700 (650 pass, 50 fail)
modifies: 321
在前面的示例中伟桅,文件系統(tǒng)的緩存命中率應高于百分之三十敞掘。如果緩存命中率低于百分之三十,則意味著文件系統(tǒng)上的訪問模式是廣泛隨機的或者緩存太小楣铁。
一致性檢查的輸出意味著緩存文件系統(tǒng)會與服務器進行檢查以查看數(shù)據(jù)是否仍然有效玖雁。高失敗率(15% 到 20%)意味著感興趣的數(shù)據(jù)正在快速變化。高速緩存的更新速度可能比適合高速緩存文件系統(tǒng)的更新速度更快盖腕。當您使用一致性檢查的輸出和修改次數(shù)時赫冬,您可以了解此客戶端或其他客戶端是否正在進行更改浓镜。
修改的輸出是客戶端將更改寫入文件系統(tǒng)的次數(shù)。此輸出是了解命中率為何較低的另一種方法劲厌。高頻率的修改操作可能伴隨著大量的一致性檢查和較低的命中率竖哩。
8.NFS文件屬性緩存
屬性緩存是在客戶端上緩存文件的元數(shù)據(jù)(如權限、屬主脊僚、屬組相叁、訪問時間等信息),以減少對服務器的屬性查詢次數(shù)辽幌。
ac / noac選擇客戶端是否可以緩存文件屬性增淹。如果這兩個選項均未指定(或者指定了ac),則客戶端會緩存文件屬性乌企。為了提高性能虑润,NFS 客戶端緩存文件屬性。每隔幾秒加酵,NFS 客戶端就會檢查每個文件屬性的服務器版本是否有更新拳喻。在客戶端再次檢查服務器之前,在這些小時間間隔內服務器上發(fā)生的更改將不會被檢測到猪腕。使用noac選項可以在訪問相同文件的 NFS 客戶端之間提供更高的緩存一致性冗澈,但會帶來嚴重的性能損失。
acregmin=n
NFS 客戶端在從服務器請求新屬性信息之前緩存常規(guī)文件屬性的最短時間(以秒為單位)陋葡。如果未指定此選項亚亲,NFS 客戶端將使用最少 3 秒。
acregmax=n
NFS 客戶端在從服務器請求新屬性信息之前緩存常規(guī)文件屬性的最長時間(以秒為單位)腐缤。如果未指定此選項捌归,NFS 客戶端將使用最多 60 秒。
acdirmin=n
NFS 客戶端在從服務器請求新屬性信息之前緩存目錄屬性的最短時間(以秒為單位)岭粤。如果未指定此選項惜索,NFS 客戶端將使用最少 30 秒。
acdirmax=n
NFS 客戶端在從服務器請求新屬性信息之前緩存目錄屬性的最長時間(以秒為單位)剃浇。如果未指定此選項巾兆,NFS 客戶端將使用最多 60 秒。
actimeo=n
使用actimeo將所有acregmin偿渡、acregmax臼寄、acdirmin和acdirmax設置為相同的值。如果未指定此選項溜宽,NFS 客戶端將使用上面列出的每個選項的默認值。
注意: 如果要更改選項质帅,首先必須卸載 NFS 文件系統(tǒng)适揉,更改選項留攒,然后重新安裝文件系統(tǒng)。
mount -a 是一個用于掛載(mount)配置文件 /etc/fstab 中所有已定義但尚未掛載的文件系統(tǒng)的命令嫉嘀。不過這東西開機時已經(jīng)掛載了炼邀,你如果沒有修改 fstab 增加新的東西那就肯定沒輸出。 mount -a 會忽略所有已經(jīng)完成的操作剪侮,也就是開機時 fstab 已經(jīng)掛載后拭宁,而且你沒有修改 fstab 。你再運行 mount -a 瓣俯,他會自動忽略全部 fstab 內容杰标。
將同時發(fā)起的NFS請求數(shù)量修改為128 重啟reboot
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sysctl -w sunrpc.tcp_slot_table_entries=128
cat /proc/sys/sunrpc/tcp_slot_table_entries
服務器端+客戶端 TCP參數(shù)設置:
NFS 客戶端和 NFS 服務器有很多TCP 參數(shù)可以調整。Internet 上的許多文章都討論了 NFS 和一般網(wǎng)絡流量的 TCP 調整選項彩匕。確切的值因您的具體情況而異腔剂。在這里,我想討論兩個提高 NFS 性能的選項:系統(tǒng)輸入和輸出隊列驼仪。
增加輸入和輸出隊列的大小允許通過 NFS 傳輸更多數(shù)據(jù)掸犬。實際上,您正在增加可以存儲數(shù)據(jù)的緩沖區(qū)的大小绪爸。內存中可以存儲的數(shù)據(jù)越多湾碎,NFS 處理它的速度就越快(即排隊的數(shù)據(jù)越多)。NFS 服務器 NFS 守護進程共享相同的套接字輸入和輸出隊列奠货,因此如果隊列較大胜茧,則所有 NFS 守護進程都有更多緩沖區(qū)并且可以更快地發(fā)送和接收數(shù)據(jù)。
對于輸入隊列仇味,要修改的兩個值是/proc/sys/net/core/rmem_default(讀取隊列的默認大小呻顽,以字節(jié)為單位)和/proc/sys/net/core/rmem_max(讀取隊列的最大大小(以字節(jié)為單位)丹墨。這些值很容易修改:
echo 262144 > /proc/sys/net/core/rmem_default
echo 262144 > /proc/sys/net/core/rmem_max
這些命令將讀取緩沖區(qū)大小更改為 256KiB(基數(shù) 2)廊遍,這是 NFS 守護進程共享的。您可以對 NFS 守護程序共享的寫入緩沖區(qū)執(zhí)行相同的操作:
echo 262144 > /proc/sys/net/core/wmem_default
echo 262144 > /proc/sys/net/core/wmem_max
更改這些值后贩挣,您需要重新啟動 NFS 服務器才能使它們生效喉前。但是,如果您重新啟動系統(tǒng)王财,這些值將消失并使用默認值卵迂。要使這些值在重新啟動后仍然存在,您需要在/etc/sysctl.conf 文件中配置绒净。
請注意见咒,增加緩沖區(qū)大小并不一定意味著性能會提高。這只是意味著緩沖區(qū)大小更大挂疆。您將需要使用各種緩沖區(qū)大小測試您的應用程序改览,以確定增加緩沖區(qū)大小是否有助于提高性能下翎。
另外nfs處理大量小文件導致的性能不佳:事實上,小文件性能實際上是許多文件性能問題,即當我們在一個文件夾中有大量文件,或者最終只有數(shù)百萬甚至數(shù)十億個文件時瓶殃。最好加上緩存秸滴,減少網(wǎng)絡交互頻率。
三、分析磁盤IO性能是否達上限:
iostat命令是IO性能分析的常用工具
yum install sysstat
iostat <options> <device name>
-c: 顯示CPU使用情況
-d: 顯示磁盤使用情況
--dec={ 0 | 1 | 2 }: 指定要使用的小數(shù)位數(shù),默認為 2
-g GROUP_NAME { DEVICE [...] | ALL } 顯示一組設備的統(tǒng)計信息
-H 此選項必須與選項 -g 一起使用,指示只顯示組的全局統(tǒng)計信息虏辫,而不顯示組中單個設備的統(tǒng)計信息
-h 以可讀格式打印大小
-j { ID | LABEL | PATH | UUID | ... } [ DEVICE [...] | ALL ] 顯示永久設備名。選項 ID腾仅、LABEL 等用于指定持久名稱的類型
-k 以 KB 為單位顯示
-m 以 MB 為單位顯示
-N 顯示磁盤陣列(LVM) 信息
-n 顯示NFS 使用情況
-p [ { DEVICE [,...] | ALL } ] 顯示磁盤和分區(qū)的情況
-t 打印時間戳乒裆。時間戳格式可能取決于 S_TIME_FORMAT 環(huán)境變量
-V 顯示版本信息并退出
-x 顯示詳細信息(顯示一些擴展列的數(shù)據(jù))
-y 如果在給定的時間間隔內顯示多個記錄,則忽略自系統(tǒng)啟動以來的第一個統(tǒng)計信息
常用命令行:
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盤讀寫速度單位為KB)鹤耍,每1s收集1次數(shù)據(jù)杆怕,共收集10次
iostat -d -m 2 #查看TPS和吞吐量信息(磁盤讀寫速度單位為MB)互纯,每2s收集1次數(shù)據(jù)
一個系統(tǒng)的吞度量(承壓能力)與request對CPU的消耗辣往、外部接口、IO等等緊密關聯(lián)扯键。單個reqeust 對CPU消耗越高厉亏,外部系統(tǒng)接口恬试、IO影響速度越慢,系統(tǒng)吞吐能力越低甘凭,反之越高蹈矮。
系統(tǒng)吞吐量幾個重要參數(shù):QPS(TPS)砰逻、并發(fā)數(shù)、響應時間泛鸟。
QPS(TPS):每秒鐘request/事務數(shù)量
并發(fā)數(shù):系統(tǒng)同時處理的request/事務數(shù)
響應時間:一般取平均響應時間
QPS(TPS)= 并發(fā)數(shù)/平均響應時間
iostat -d -x -k 1 10
#查看設備使用率(%util)蝠咆、響應時間(await)等詳細數(shù)據(jù), 每1s收集1次數(shù)據(jù),總共收集10次
r/s:每秒從設備讀取的請求數(shù)量(讀取操作/秒)
rkB/s:每秒從設備讀取的數(shù)據(jù)量(以千字節(jié)為單位)
rrqm/s:每秒從磁盤請求讀取的請求數(shù)量(合并讀請求/秒)
%rrqm:合并的讀請求所占總請求數(shù)的百分比
r_await:平均每個讀請求的等待時間(毫秒)
rareq-sz:單個讀請求的平均大懈詹佟(以千字節(jié)為單位)
w/s:每秒向設備寫入的請求數(shù)量(寫入操作/秒)
wkB/s:每秒向設備寫入的數(shù)據(jù)量(以千字節(jié)為單位)
wrqm/s:每秒從磁盤請求寫入的請求數(shù)量(合并寫請求/秒)
%wrqm:合并的寫請求所占總請求數(shù)的百分比
w_await:平均每個寫請求的等待時間(毫秒)
wareq-sz:單個寫請求的平均大姓⒊帷(以千字節(jié)為單位)
d/s:每秒向設備發(fā)出的丟棄請求的數(shù)量(數(shù)據(jù)丟失/秒)
dkB/s:每秒從設備丟棄的數(shù)據(jù)量(以千字節(jié)為單位)
drqm/s:每秒從磁盤請求丟棄的請求數(shù)量(合并丟棄請求/秒)
%drqm:合并的丟棄請求所占總請求數(shù)的百分比
d_await:平均每個丟棄請求的等待時間(毫秒)
dareq-sz:單個丟棄請求的平均大小(以千字節(jié)為單位)
f/s:每秒從設備請求失敗的數(shù)量(失敗操作/秒)
f_await:平均每個失敗請求的等待時間(毫秒)
aqu-sz:設備請求數(shù)隊列長度的平均值(調度器隊列長度)
%util:設備的活動時間百分比(設備繁忙的時間比例)
iostat -c 1 10
#查看cpu狀態(tài)菊霜,每1s收集1次數(shù)據(jù)坚冀,總共收集10次
將 CPU 的執(zhí)行時間劃分為若干個時間片,每個進程在一個時間片內輪流使用 CPU,當時間片用完后,系統(tǒng)將CPU分配給下一個進程
%user: 表示用戶級別的 CPU 使用率,即用于執(zhí)行用戶進程的CPU時間百分比鉴逞。
%nice: 表示調整過優(yōu)先級的用戶級進程的CPU使用率记某,這些進程的優(yōu)先級通過"nice"命令或相關接口調整過。 Nice值的范圍從-20到+19(不同系統(tǒng)的值范圍是不一樣的)构捡,正值表示低優(yōu)先級液南,負值表示高優(yōu)先級,值為零則表示不會調整該進程的優(yōu)先級勾徽。
%system: 表示系統(tǒng)級別的 CPU 使用率滑凉,即用于執(zhí)行內核系統(tǒng)進程的 CPU 時間百分比。
%iowait: 表示 CPU 由于等待 I/O 操作而閑置的時間百分比喘帚,包括等待磁盤 I/O畅姊、網(wǎng)絡 I/O 等。
%steal: 表示當宿主機是一個虛擬化服務器時啥辨,被其他虛擬操作系統(tǒng)占用("偷取")的 CPU 時間百分比涡匀。
%idle: 表示 CPU 空閑時間的百分比,即 CPU 沒有執(zhí)行任何任務的時間百分比溉知。
拓展:
top命令(推薦htop 可以看每個核的cpu使用率)
cpu 百分比參數(shù)含義:%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us (user):表示用戶空間程序執(zhí)行的時間百分比陨瘩。
sy (system):表示系統(tǒng)內核程序執(zhí)行的時間百分比。
ni (nice):表示執(zhí)行“nice”命令調整過優(yōu)先級的用戶空間程序的時間百分比级乍。 Nice值的范圍從-20到+19(不同系統(tǒng)的值范圍是不一樣的)舌劳,正值表示低優(yōu)先級,負值表示高優(yōu)先級玫荣,值為零則表示不會調整該進程的優(yōu)先級甚淡。
id (idle):表示 CPU 空閑時間的百分比。
wa (wait):表示 CPU 等待 I/O 操作的時間百分比捅厂。
hi (hardware interrupts):表示 CPU 處理硬件中斷的時間百分比贯卦。
si (software interrupts):表示 CPU 處理軟件中斷的時間百分比。
st (steal):表示當宿主機是一個虛擬化服務器時焙贷,被其他虛擬操作系統(tǒng)占用("偷取")的 CPU 時間百分比撵割。
性能分析I/O瓶頸
如果%iowait的值過高,表示硬盤可能存在I/O瓶頸辙芍。還需結合其他參數(shù)具體分析啡彬,解釋如下:
%iowait是%idle的一個子集羹与,其計算方法是這樣的:
如果 CPU 此時處于 idle 狀態(tài),內核會做以下檢查:
- 1庶灿、是否存在從該 CPU 發(fā)起的一個未完成的本地磁盤IO請求
- 2纵搁、是否存在從該 CPU 發(fā)起的網(wǎng)絡磁盤掛載的操作
如果存在以上任一情況,則 iowait 的計數(shù)器加 1往踢,如果都沒有腾誉,則 idle 的計數(shù)器加 1。
如果當前有進程在等待 I/O 請求的話菲语,那么增加 iowait 的時間妄辩。
如果當前沒有進程在等待 I/O 請求的話惑灵,那么增加 idle 的時間山上。
所以正確解釋是:有進程在等待 IO,被阻塞了英支,并且當前系統(tǒng)是空閑的佩憾,沒有其他進程在運行。
內存不足
%idle值高干花,表示CPU較空閑妄帘,如果%idle值高但系統(tǒng)響應慢時,有可能是CPU在等待分配內存池凄,此時應加大內存容量抡驼。
CPU資源不足
如果%idle值持續(xù)低于10肿仑,那么系統(tǒng)的CPU處理能力相對較低致盟,表明系統(tǒng)中最需要解決的資源是CPU
IOPS 計算
計算方式: r/s+w/s
I/O per second尤慰,即每秒鐘可以處理的I/O個數(shù)。
隨機讀寫頻繁的應用(一般指I/O小于64KB的應用場景),如小文件存儲(圖片)、OLTP數(shù)據(jù)庫创肥、郵件服務器,關注隨機讀寫性能,IOPS是關鍵衡量指標叹侄。
吞吐量 計算
計算方式: rkB/s+wkB/s
順序讀寫頻繁的應用巩搏,傳輸大量連續(xù)數(shù)據(jù),如電視臺的視頻編輯趾代,視頻點播VOD(Video On Demand)贯底,關注連續(xù)讀寫性能。數(shù)據(jù)吞吐量是關鍵衡量指標撒强。
其他IO分析工具:
pidstat -d 1 -p 500 //按進程展示io信息 -d 間隔1s -p 指定進程號
iotop //監(jiān)視系統(tǒng)中各進程磁盤 I/O 活動禽捆,可排序
四、測試服務器端 與 客戶端 網(wǎng)絡速度:
iperf3 -s //服務器端監(jiān)聽5201
客戶端測試:
iperf3 -c 10.1.1.100 -P 1 -n 1000M // -P 傳輸線程總數(shù) -n 傳輸數(shù)據(jù)總量
網(wǎng)卡的帶寬速率維持在80Mbits/sec左右飘哨,而測試的服務器是千兆網(wǎng)卡胚想,這個測試值也基本合理。
在輸出的最后芽隆,iperf還給出了總的數(shù)據(jù)發(fā)送浊服、接收量,并給出了帶寬速率平均值胚吁。通過這些值牙躺,基本可以判斷網(wǎng)絡帶寬是否正常,網(wǎng)絡傳輸狀態(tài)是否穩(wěn)定腕扶。
interval傳輸間隔 Transfer傳輸數(shù)據(jù)量 Bitrate傳輸速率 Retr 重試 Cwnd擁塞窗口
Connecting to host 10.1.1.115, port 5201
[ 5] local 10.3.1.172 port 51808 connected to 10.1.1.115 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 9.57 MBytes 80.3 Mbits/sec 0 199 KBytes
[ 5] 1.00-2.00 sec 11.7 MBytes 97.8 Mbits/sec 0 199 KBytes
[ 5] 2.00-3.00 sec 9.67 MBytes 81.1 Mbits/sec 0 199 KBytes
[ 5] 3.00-4.00 sec 11.5 MBytes 96.2 Mbits/sec 1 222 KBytes
[ 5] 4.00-5.00 sec 7.25 MBytes 60.8 Mbits/sec 0 222 KBytes
[ 5] 5.00-6.00 sec 8.56 MBytes 71.8 Mbits/sec 0 222 KBytes
[ 5] 6.00-7.00 sec 8.30 MBytes 69.6 Mbits/sec 0 222 K
五孽拷、dd測試nfs 讀寫速度:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1
nfs掛載 10.1.1.115/data /nfs-data/data
測試寫入速度:dd if=/dev/zero of=/data/testfile bs=1G count=1
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.0247 s, 25.6 MB/s
測試讀取速度:dd if=/nfs-data/data/testfile of=/dev/null bs=10M count=1
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.972609 s, 1.1 GB/s
if=文件名:輸入文件名,默認為標準輸入半抱。即指定源文件脓恕。
of=文件名:輸出文件名,默認為標準輸出代虾。即指定目的文件进肯。
bs=bytes:同時設置讀入/輸出的塊大小為bytes個字節(jié)。
count=blocks:僅拷貝blocks個塊棉磨,塊大小等于ibs指定的字節(jié)數(shù)江掩。
/dev/null,它是一種特殊的虛擬設備乘瓤,用于寫入而不是讀取环形,寫入/dev/null的任何內容都會從操作系統(tǒng)中消失,可以把它視為一個“黑洞”衙傀。
/dev/zero抬吟,它也是一種特殊的虛擬設備,用于讀取而不是寫入统抬,當讀取該文件時火本,他會提供無限的空字符null危队。
六、nfs日志:
NFS日志是NFS服務器生成的日志钙畔,常常用于分析NFS服務的性能和問題茫陆,如擁有瓶頸的文件系統(tǒng)或網(wǎng)絡故障等。NFS日志記錄了NFS服務器和客戶端之間交換的信息和事件擎析,這些信息和事件可以幫助管理員分析和診斷系統(tǒng)問題簿盅。
/var/log/syslog:這個日志文件是系統(tǒng)的主要日志文件,包括了各種系統(tǒng)事件和服務的日志信息揍魂。NFS的相關信息也會記錄在這個文件中桨醋。
/var/log/auth.log:這個日志文件主要用于記錄認證和授權相關的日志信息。如果在NFS的設置中啟用了身份驗證機制(如基于用戶或主機的身份驗證)现斋,那么相關的日志信息會記錄在這個文件中喜最。
NFS日志的格式通常是: 時間戳 | 主機名 | 進程號 | 消息級別 | 消息內容
Sep 15 18:38:51 localhost kernel: [ 2.221981] nfsd: last server has exited
在這個例子中,事件發(fā)生的時間為9月15日18點38分51秒步责;事件發(fā)生在名為localhost的主機上返顺;事件所涉及的進程號是內核;消息級別為“kernel”蔓肯,表示事件的嚴重程度為內核級別;消息內容是“nfsd: last server has exited”振乏,表示NFS服務器的最后一個服務器已退出蔗包。
NFS日志通常記錄了NFS服務器和客戶端之間的交互信息和事件,主要包括以下幾個方面:
(1)連接信息:NFS服務器和客戶端的連接信息慧邮,如IP地址调限、主機名等。
(2)文件訪問信息:NFS客戶端對NFS服務器上的文件進行的訪問操作误澳,如讀耻矮、寫、刪除等忆谓。
(3)緩存信息:NFS客戶端對文件進行緩存的操作裆装,如緩存文件的讀、寫倡缠、刷新等哨免。
(4)錯誤信息:NFS客戶端請求NFS服務器時所產(chǎn)生的錯誤信息,如訪問權限錯誤昙沦、NFS服務器忙等琢唾。
原文鏈接:https://blog.csdn.net/qq_42152032/article/details/134598951
為什么都說NFS讀寫性能差,如何進行優(yōu)化盾饮?
https://mp.weixin.qq.com/s?__biz=MzU4OTc1MTg5Ng==&mid=2247485724&idx=1&sn=072fc175fac322c6ca12e7e041e7a3cd&chksm=fdc9fa2bcabe733d7e37cc1f2d828ad7021167806b140b1e7fe8260bf82d54ec983e9bf92a6b&mpshare=1&scene=23&srcid=03167Q9EYadWzQ0Ee2rVAh0h&sharer_shareinfo=0d3feba6b6927ed244fc02c3e5523abd&sharer_shareinfo_first=0d3feba6b6927ed244fc02c3e5523abd#rd