Nginx
在生產 Web 伺服器上使用 NFS 是否合理?
假設連接是通過 LAN 1Gbe 或 10Gbe 連接,是否可以在生產伺服器上合理使用 NFS 作為將計算伺服器連接到儲存伺服器的一種方式?
如果啟用了同步模式,顯然會有一些網路成本,並且 NFS 的寫入速度似乎特別慢。否則,它似乎相當輕巧並且能夠根據我的判斷進行擴展,但我個人對此幾乎沒有經驗。我錯了嗎?
問題是我現在有一個伺服器,它既可以用作儲存伺服器,也可以用作 Web 伺服器,但我最終可能需要將兩者分開,並且考慮到某些請求需要通過 Web 應用程序層進行身份驗證在初始化文件傳輸之前,這個軟體有點棘手。網路 fs 掛載是我最簡單的選擇.. 不知道這是否是一個好的選擇。
我還計劃嘗試將本地記憶體與 NFS 結合使用,這應該會大大提高性能,但我不確定這是否足夠。
至於替代品,我知道只有 iSCSI 是真正的競爭對手,而且大多數人似乎都推薦 NFS 而不是其他鮮為人知的產品。
NFS 很好,除非滿足某些特定的其他標準,即:
- 所涉及的系統都能夠本地使用 NFS。Windows 在這裡不算,它有點工作,但它有很多怪癖,並且在跨平台環境中處理 NFS 時通常很痛苦(如果只是Windows,使用 SMB3,它消除了大多數NFS 的其他問題)。請注意,在客戶端,這意味著核心級支持,因為使用者級實現要麼必須處理使用 FUSE 之類的東西所固有的效率問題,要麼必須直接連結到需要訪問分享。
- 您已正確驗證 NFS 客戶端如何處理 NFS 伺服器重新啟動。這包括作業系統本身(在大多數情況下應該沒問題),以及將訪問共享的軟體。特別是,當使用共享的軟體長時間保持文件打開時,在某些客戶端平台上需要特別小心,因為並非所有 NFS 客戶端實現都通過顯式重新安裝和重新驗證鎖和文件句柄來優雅地處理伺服器重新啟動(這導致客戶端軟體出現各種問題)。請注意,無論何時升級或重新配置堆棧的任何部分,您都應該重新檢查這一點。
- 您願意設置正確的使用者/組 ID 映射。這很大,因為沒有它,您要麼需要鏡像系統之間的 UID/GID 映射(可行,但我會警惕針對面向 Internet 的系統的內部網路設置 SSO),或者您最終可能會嚴重安全隱患(即,您在一個系統上看到的權限與您在其他系統上看到的不匹配)。
- 您正在通過安全的網路連結進行操作,或者願意為共享正確設置身份驗證。如果沒有身份驗證,連結上的任何人都可以訪問它(惡意客戶端可以輕鬆繞過基本的 UNIX 自主訪問控制)。
假設您滿足所有這些標準,並且您擁有相當快的網路,那麼您應該沒問題。此外,如果您可以執行巨型幀,那麼這樣做,它們對任何網路文件系統或網路塊儲存都有很大幫助。