最佳化你的 NFS 效能,讓檔案伺服器也會飛
調整NFS(Network File System)的效能可以從多個角度進行,包括調整NFS伺服器和客戶端的參數、網絡配置、以及文件系統的選擇。
調整 NFS 參數:
NFS Server 端
- 使用 NFSv4: NFSv4 提供更好的效能和安全性。
- 根據工作負載調整
rpc.mountd.port
和rpc.nfsd.port
參數的值。 - 調整
nfsd.minthreads
和nfsd.maxthreads
參數的值,以優化執行緒數量。 - 調整
nfs.readahead
和nfs.writebehind
參數的值,以優化讀寫緩衝區大小。
範例如下
我的主機是 4VPU,4G RAM來設計
修改 /etc/nfs.conf
文件(或你系統中相對應的配置文件),設置最小執行緒數為 8,最大執行緒數為 64:
調整邏輯,將 nfsd.minthreads
和 nfsd.maxthreads
參數設置為與 CPU 核心的數量相同或是略高一些
[nfsd] threads=8 64
編輯 /etc/sysctl.conf
# NFS Setup nfsd.minthreads =8 nfsd.maxthreads = 64 nfs.readahead = 65536 nfs.writebehind = 262144
重啟主機
sudo service nfs-kernel-server start
NFS Client 端
- 使用 NFSv4: NFSv4 提供更好的效能和安全性。
- 調整
mount.nfs.rsize
和mount.nfs.wsize
參數的值,以優化讀寫緩衝區大小。 - 調整
mount.nfs.mountd_port
和mount.nfs.nfsd_port
參數的值。
調整邏輯,將 mount.nfs.rsize
和 mount.nfs.wsize
參數設置為與 TCP MTU 相同或是略低一點
範例如下
sudo /etc/fstab
/etc/fstab
server:/path/to/share /mnt/nfs nfs rw,nfsvers=4,noatime,rsize=32768,wsize=32768 0 0
提高讀取的性能
mount -o async,noac,rsize=1048576 nfs://server/share /mnt
兼顧安全性以及效能的設定可以參考
mount -o async,noac,noatime,nodev,noexec,norecovery,rsize=1048576,tcp,nfsvers=4 nfs://server/share /mnt
讀取大型文件,如影音,透過 readahead 來幫助提高性能,這裡將 readahead
設置為 128
塊(每塊的大小依賴於系統配置,通常是 4KB)
sudo mount -t nfs -o rsize=32768,wsize=32768,readahead=128 server:/path/to/share /mnt/nfs
調整網路配置:
- 使用高性能網路設備。
- 調整 TCP/IP 參數,例如
tcp_keepalive
和tcp_window_size
。
常見的 NFS 掛載選項
async
: 允許 NFS 客户端在將數據寫入磁碟之前將其發送到伺服器。這可以提高寫入性能,但可能會導致數據丟失。bg
: 在後台掛載 NFS 共享。intr
: 允許 NFS 客户端在伺服器無響應時中斷操作。noac
: 不使用 NFS 屬性緩衝區。這可以提高性能,但可能會導致文件屬性不一致。noatime
: 不更新文件的訪問時間。這可以提高性能,但可能會導致文件元數據不準確。nodev
: 不將 NFS 共享上的設備映射到本地設備。noexec
: 不允許在本地執行 NFS 共享上的可執行文件。norecovery
: 在 NFS 伺服器發生故障時不嘗試重新掛載共享。ro
: 以唯讀模式掛載 NFS 共享。rsize
: 設置 NFS 客户端每次讀取操作從伺服器接收的最大數據量。rw
: 以讀寫模式掛載 NFS 共享。soft
: 在 NFS 伺服器無響應時允許 NFS 客户端重試操作。tcp
: 使用 TCP 而不是 UDP 進行 NFS 通信。timeo
: 設置 NFS 客户端在伺服器無響應之前等待的時間。nfsvers
: 指定 NFS 協議版本
其中最常用到的是 async, noac, noatime, rsize, nfsvers.
noatime
多數情況下,禁用對文件訪問時間的更新可以提升性能,因為它減少了對伺服器的寫操作。
rsize和wsize:
對於現代網絡,32768
(32KB)或65536
(64KB)是比較常見的設定值,能夠提供良好的效能。你可以從這個基點開始,進行實際的性能測試來找到最適合你環境的值。
NFS 版本的比較說明 (nfsvers)
- NFSv4 比較新,提供了更好的安全性(如Kerberos身份驗證)和效能優化,包括更高效的文件鎖定機制和狀態保持功能。
- NFSv3 在一些舊系統上仍然很流行,對於不需要v4的安全性增強的環境來說,可能仍是一個好選擇。在某些情況下,它可能由於其無狀態性而提供更好的效能。
監控與調整
使用
nfsstat
這樣的工具來監控 NFS 伺服器的性能,然後根據實際運行情況進行調整。
sudo apt install nfsstat
之後就可以輸入 nfsstat 取得相關資訊
nfsstat
高效能伺服器
使用 NFS Ganesha: NFS Ganesha 高性能的 NFS 代理伺服器
近期留言