差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
tech:nfs_ganesha [2024/01/03 14:50] – 建立 jonathantech:nfs_ganesha [2025/03/27 18:22] (目前版本) – [常見問題] jonathan
行 1: 行 1:
 ====== 在 Ubuntu/Debian 安裝 NFS Ganesha 取代 NFS-kernel service ====== ====== 在 Ubuntu/Debian 安裝 NFS Ganesha 取代 NFS-kernel service ======
-  * 因為詢問 ChatGPT 詢問是否有提升 NFS 服務效能的輔助軟體, 結果給了一個答案: \\ **使用 NFS 緩存 : 某些軟體和硬體方案提供 NFS 緩存,可減少對伺服器的存取,提升效能。這些緩存可以是軟體層面的,例如 nfs-ganesha 或硬體層面的存儲緩**+  * 因為詢問 ChatGPT 是否有提升 NFS 服務效能的輔助軟體, 結果給了答案: \\ **使用 NFS 緩存 : 某些軟體和硬體方案提供 NFS 緩存,可減少對伺服器的存取,提升效能。這些緩存可以是軟體層面的,例如 nfs-ganesha 或硬體層面的存儲緩**。
   * 也看到預設 Ubuntu/Debian 可透過 apt 直接安裝, 門檻很低就直接安裝測試   * 也看到預設 Ubuntu/Debian 可透過 apt 直接安裝, 門檻很低就直接安裝測試
  
-===== 安裝方式 =====+===== 安裝與設定方式 =====
   * 安裝程序 <cli>   * 安裝程序 <cli>
 sudo apt update sudo apt update
 sudo apt install nfs-ganesha nfs-ganesha-vfs sudo apt install nfs-ganesha nfs-ganesha-vfs
 </cli> </cli>
-  * 設定 nfs 分享目錄 Exp. /nfsshare 可讀寫 <cli>+  * 設定 nfs 分享目錄 Exp. /nfsshare 可讀寫, 只允許 10.20.0.0/22 這網段的用戶存取 <cli>
 vi /etc/ganesha/ganesha.conf</cli><file> vi /etc/ganesha/ganesha.conf</cli><file>
 EXPORT EXPORT
 { {
     Export_ID = 1;     Export_ID = 1;
-    Path = /nfsshare;+    Path = /mnt/datastore/zfs-backup/nfsshare;
     Pseudo = /nfsshare;     Pseudo = /nfsshare;
     Access_Type = RW;     Access_Type = RW;
     Squash = No_Root_Squash;     Squash = No_Root_Squash;
-    FSAL +    FSAL {
-    {+
         Name = VFS;         Name = VFS;
 +    }
 +    SecType = sys;
 +    CLIENT {
 +        Clients = 10.20.0.0/22;
 +        Access_Type = RW;
     }     }
 } }
 </file> </file>
   * 設定啟動 nfs-ganesha 服務 <cli>   * 設定啟動 nfs-ganesha 服務 <cli>
-sudo systemctl start nfs-ganesha+sudo systemctl restart nfs-ganesha
 sudo systemctl enable nfs-ganesha sudo systemctl enable nfs-ganesha
 </cli> </cli>
行 32: 行 36:
  
 <note tip> <note tip>
-  * 如果服務狀態不是完全正常, 可以查詢 log 了解問題發生的原因: Exp. <cli>tail -100 /var/log/ganesha/ganesha.log</cli> +  * 如果服務狀態不是完全正常 
-  * ++看範例紀錄|<cli>+    * 確認是否原本的 nfs-kernel service 還沒關閉關閉方式如下: <cli> 
 +sudo systemctl stop nfs-kernel-server 
 +sudo systemctl disable nfs-kernel-server 
 +</cli> 
 +    * 查詢 log 了解問題發生的原因: Exp. <cli>tail -100 /var/log/ganesha/ganesha.log</cli> 
 +      * ++看範例紀錄|<cli>
 # tail -100 /var/log/ganesha/ganesha.log # tail -100 /var/log/ganesha/ganesha.log
 03/01/2024 05:24:53 : epoch 6594efa5 : test-jonathan-45 : ganesha.nfsd-4407[main] config_errs_to_log :CONFIG :CRIT :Config File (/etc/ganesha/ganesha.conf:6): Unexpected character (▒) 03/01/2024 05:24:53 : epoch 6594efa5 : test-jonathan-45 : ganesha.nfsd-4407[main] config_errs_to_log :CONFIG :CRIT :Config File (/etc/ganesha/ganesha.conf:6): Unexpected character (▒)
行 67: 行 76:
 </note> </note>
  
 +===== 進階調教 =====
 +  * 調整自訂記憶體當 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 內<cli>vi /etc/ganesha/ganesha.conf</cli><file>
 +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
 +:
 +</file>
 +  * 重啟 nfs-ganesha 服務讓設定生效<cli>
 +systemctl restart nfs-ganesha
 +</cli>
 +  * 使用 fio 來驗證調教後效能提升大概 18%
 +    * 調教前 [[tech/nfs_ganesha/test_default|看完整測試資料]]<cli>
 +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
 +</cli>
 +    * 調教後 [[tech/nfs_ganesha/test_addcache|看完整測試資料]]<cli>
 +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
 +</cli>
 +
 +===== 常見問題 =====
 +  * 關閉 Ganasha 的作法 <cli>
 +systemctl stop nfs-ganesha
 +systemctl disable nfs-ganesha
 +</cli>
  
 {{tag>nfs}} {{tag>nfs}}
  
  • tech/nfs_ganesha.1704264624.txt.gz
  • 上一次變更: 2024/01/03 14:50
  • jonathan