NFS4 掛載同主機多個目錄


寫在前面的話

 

事情是醬嬸兒的,前兩天實在是幫他們查日志查的心里交瘁了,而且有些時候下班了,也就不想再接到這樣的需求,於是想基於 Nginx 做一個文件下載中心,在這個文件下載中心里面存有各個服務的日志。用戶認證采用 Nginx 自己的用戶認證方式。所以想到了將服務器多個日志目錄都采用 NFS 掛載的方式交予 Nginx 的機器,但是在這個時候,驚喜發生了。

以前用 NFS 的時候都是每個服務器都只有一個目錄需要掛載,這一次多個,於是美滋滋的掛載上去,在網上隨便搜了一個參數。然后愉快的掛載上了。結果過了幾天他們在使用的時候,突然給我反饋,所有目錄的日志是一樣的,於是瞬間懵逼,完全不相信,登錄上去一看,我x,還真是。然后問了幾個老哥,終於有人遇到這個問題,推薦我使用 NFS4 協議,然后愉快實現了需求,在這里做個分享~

 

 

談談 NFS 和 NFS4 協議

 

NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源,分為服務端(Server)和客戶端(Client)。最早由 sun 公司開發,是類 unix 系統間實現磁盤共享的一種方法。

這是網上到處都可以看到的一個概念,我這里可以加一些個人理解:NFS,及 Network File Share,文件共享。我們需要記住一個很重要的概念,服務端和客戶端的區別,這是很多人至始至終都沒有弄清楚的一個東西。

服務端:文件在我這里,由我共享出去,所以我是老大,我是服務端。

客戶端:我去網絡中找服務端,將他共享的文件掛載我的系統下,從而實現訪問。

至於 NFS4,及 NFS 協議的 version 4,在原有的基礎上對多目錄文件共享做了優化~

 

 

安裝部署 NFS

 

閑話少說,直接開干,具體拓撲圖如下:

 

我們以兩台測試機器為例,系統都為 CENTOS 7.5~

我們要共享的目錄結構如下圖,我們想把 node1 上面的三個目錄都剛想出去給 node2 掛載:

 

【1】在 node1 上面部署配置 NFS 服務端:

# 安裝需要的包
yum -y install nfs-utils rpcbind 

# 添加共享配置
vim /etc/exports

 

內容如下:

/nfsdata 192.168.100.101(rw,fsid=0,sync,no_wdelay,insecure_locks,no_root_squash)

簡單的說一下配置:

1. 這是一個通用的配置,幾乎對掛載目錄沒做什么限制,參數后續會就行補充說明。

2. 三個目錄,但是我們只做了 1 條規則,這個規則是下面需要共享目錄的頂層目錄。

3. 在規則的后面有個 fsid=0 的配置,這是 NFS4 不可缺少的。 

 

啟動服務:

# 啟動 rpcbind 和配置開機自啟動
systemctl start rpcbind
systemctl enable rpcbind

# 啟動 nfs 和配置開機自啟動
systemctl start nfs
systemctl enable nfs

 

查看本機共享目錄情況:

showmount -e

如圖:

注意:在我們修改 exports 文件的添加其他目錄的時候,我們需要重啟 rpcbind 和 nfs 服務端服務,再度查看才會存在!

 

【2】在 node2 上面部署 nfs 客戶端: 

yum -y install nfs-utils rpcbind

 

啟動服務,和服務端不同的是,我們只需要啟動 rpcbind 服務即可~

# 啟動 rpcbind 和配置開機自啟動
systemctl start rpcbind
systemctl enable rpcbind

 

查看指定服務器授權給我們的目錄:

showmount -e 192.168.100.100

結果如圖:

 

本地的目錄結構:

我們依次想把 node1 上面的 test123 掛載到 node2 上面的 data123 ~

mount -t nfs4 192.168.100.100:/test1 /nfsdata/data1
mount -t nfs4 192.168.100.100:/test2 /nfsdata/data2
mount -t nfs4 192.168.100.100:/test3 /nfsdata/data3

和傳統的 nfs 不一樣,這里我們指定協議為 nfs4

 

查看掛載結果: 

nfsstat -m

結果如圖: 

 

查看目錄效果: 

至此,NFS 同主機多目錄 NFS4 協議掛載完成~ 

 

 

參數說明

 

【1】掛載授權 IP 說明:

配置 說明
授權某個IP 192.168.1.1
授權某個網段 192.168.1.0/24
授權某個域名 www.baidu.com
授權某個域 *.baidu.com
授權所有 *

 

【2】授權參數:

參數 說明
ro 目錄只讀
rw 目錄可讀寫
all_squash 將遠程訪問的所有普通用戶和組都映射為匿名(nfsnobody)
no_all_squash 與 all_squash 取反(默認設置)
root_squash 將 root 用戶及所屬組都映射為匿名用戶或用戶組(默認設置)
no_root_squash 與 root_squash 取反
anonuid=xxx 將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx)
anongid=xxx 將遠程訪問的所有用戶組都映射為匿名用戶組,並指定該匿名用戶組為本地用戶組(GID=xxx)
secure 限制客戶端只能從小於 1024 的 tcp/ip 端口連接 nfs 服務器(默認設置)
insecure 允許客戶端從大於 1024 的 tcp/ip 端口連接服務器
sync 將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性
async 將數據先保存在內存緩沖區中,必要時才寫入磁盤
wdelay 檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置)
no_wdelay 若有寫操作則立即執行,應與 sync 配合使用
subtree_check 若目錄是一個子目錄,則 nfs 服務器將檢查其父目錄的權限(默認設置)
no_subtree_check 即使目錄是一個子目錄,nfs 服務器也不檢查其父目錄的權限,這樣可以提高效率

 

 

小結

 

目前就這些內容,如果出現問題可以聯系我,當然,如果你覺得這個文章對你有幫助,請點擊 推薦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM