在 Ubuntu/Debian 安裝 NFS Ganesha 取代 NFS-kernel service
- 因為詢問 ChatGPT 是否有提升 NFS 服務效能的輔助軟體, 結果給了這答案:
使用 NFS 緩存 : 某些軟體和硬體方案提供 NFS 緩存,可減少對伺服器的存取,提升效能。這些緩存可以是軟體層面的,例如 nfs-ganesha 或硬體層面的存儲緩存。 - 也看到預設 Ubuntu/Debian 可透過 apt 直接安裝, 門檻很低就直接安裝測試
安裝與設定方式
- 安裝程序
sudo apt update sudo apt install nfs-ganesha nfs-ganesha-vfs
- 設定 nfs 分享目錄 Exp. /nfsshare 可讀寫, 只允許 10.20.0.0/22 這網段的用戶存取
vi /etc/ganesha/ganesha.conf
EXPORT { Export_ID = 1; Path = /mnt/datastore/zfs-backup/nfsshare; Pseudo = /nfsshare; Access_Type = RW; Squash = No_Root_Squash; FSAL { Name = VFS; } SecType = sys; CLIENT { Clients = 10.20.0.0/22; Access_Type = RW; } }
- 設定啟動 nfs-ganesha 服務
sudo systemctl restart nfs-ganesha sudo systemctl enable nfs-ganesha
- 查詢服務狀態
sudo systemctl status nfs-ganesha
- 如果服務狀態不是完全正常
- 確認是否原本的 nfs-kernel service 還沒關閉, 關閉方式如下:
sudo systemctl stop nfs-kernel-server sudo systemctl disable nfs-kernel-server
- 查詢 log 了解問題發生的原因: Exp.
tail -100 /var/log/ganesha/ganesha.log
進階調教
- 調整自訂記憶體當 Cache
- Mem_Max 預設可能是 64 MB 調高至 2048 MB → Mem_Max = 2147483648
- Mem_Cache_Size 預設可能是 32 MB 調高至 512 MB → Mem_Cache_Size = 536870912
- Dir_MaxCacheSize 預設可能是 512 KB 調高至 4096 KB → Dir_MaxCacheSize = 4194304
- 將設定加入 ganesha.conf 內
vi /etc/ganesha/ganesha.conf
NFS_Core_Param { MNT_Port = 20048; # MNT 協議端口 NLM_Port = 32803; # NLM 協議端口 Bind_Addr = 0.0.0.0; # 監聽所有網卡 Protocols = 3,4; # 支持 NFSv3 和 NFSv4 } _9P { Nb_Worker = 16; # 工作線程現在在這裡 } MDCACHE { Cache_Size = 536870912; # 512MB Dir_Chunk = 4194304; # 4MB } TIRPC { Max_Connections = 1024; # 替代 RPC_Max_Connections Idle_Timeout_S = 300; # 替代 RPC_Idle_Timeout_S Default_Buffer_Size = 1048576; # 替代 RPC_Buffer_Size } Cache_Parameters { Entries_HWMark = 100000; # 設定緩存條目上限 NParts = 32; # 增加分區數量以減少鎖競爭 Cache_Size = 1000; # 緩存大小 Use_Getattr_Directory_Invalidation = true; } # 關閉 Kerberos 以避免那些錯誤 NFS_KRB5 { Active_krb5 = false; KeytabPath = "/dev/null"; # 避免嘗試讀取實際的 keytab 文件 PrincipalName = ""; # 清空主體名稱 CCacheDir = ""; # 清空憑證緩存目錄 } LOG { Default_Log_Level = EVENT; RPC_Debug_Flags = 0; # 減少 RPC 調試信息 } EXPORT :
- 重啟 nfs-ganesha 服務讓設定生效
systemctl restart nfs-ganesha
- 使用 fio 來驗證調教後效能提升大概 18%
- 調教前 看完整測試資料
Run status group 0 (all jobs): READ: bw=1637KiB/s (1676kB/s), 1637KiB/s-1637KiB/s (1676kB/s-1676kB/s), io=192MiB (202MB), run=120272-120272msec WRITE: bw=1637KiB/s (1677kB/s), 1637KiB/s-1637KiB/s (1677kB/s-1677kB/s), io=192MiB (202MB), run=120360-120360msec
- 調教後 看完整測試資料
Run status group 0 (all jobs): READ: bw=1935KiB/s (1981kB/s), 1935KiB/s-1935KiB/s (1981kB/s-1981kB/s), io=228MiB (239MB), run=120434-120434msec WRITE: bw=1953KiB/s (2000kB/s), 1953KiB/s-1953KiB/s (2000kB/s-2000kB/s), io=230MiB (241MB), run=120500-120500msec
常見問題
- 關閉 Ganasha 的作法
systemctl stop nfs-ganesha systemctl disable nfs-ganesha