解決方案:
1. 部署的 tomcat 都在同一個機器上,共享文件位置
2. windows 下,局域網內文件上傳的文件夾設置共享文件夾
3. linux 下 NFS 文件夾共享
4. 第三方工具
NFS 介紹
NFS 就是 Network FileSystem 的縮寫。最大的功能就是可以透過網絡,讓不同的機器,不同的操作系統、可以彼此分享個別的檔案。所以,可以簡單的將其看做是一個文件服務器。這個 NFS 服務器可以讓你的 PC 來將網絡遠程的 NFS 服務器分享的目錄,掛載到本地的機器中,在本地的機器看起來,那個遠程的主機的目錄就好像是自己的一個磁盤分區槽一樣。使用方便。
因為 NFS 支持的功能相當多,而不同的功能都會使用不同的程序來啟動,每啟動一個功能就會啟用一些端口來傳輸數據,因此,NFS 的功能所對應的端口才沒有固定住,而是隨機取用一些未被使用的小於 1024 的埠口來作傳輸用。但如此一來又造成客戶端想要連上服務器是的困擾,因為他不知道端口。。
這時遠程過程調用(RPC)服務來了。RPC 最主要的功能就在指定每個 NFS 功能所對應的 port number,並回報給客戶端,讓客戶端可以連接到正確的端口。那 RPC 是如何知道每個 NFS 的端口呢?這是因為當服務器在啟動 NFS 時會隨機取用數個端口,並主動向 RPC 注冊,因此,RPC 知道每個端口對應的 NFS 功能,然后 RPC 又是固定使用 port 111 來監聽客戶端的需求,並回報客戶端正確的端口。
所以,NFS 啟動之前,RPC 就要先啟動了,否則 NFS 無法向 RPC 注冊。另外, RPC 重新啟動時,原本注冊的數據會不見,因此,RPC 重啟后,它管理的所有服務都要重新啟動來向 RPC 注冊。
當客戶端有 NFS 檔案存取需求時,他會如何向服務端要求數據呢?
- 客戶端會向服務器端的 RPC (port 111)發出 NFS 檔案存取功能的詢問要求
- 服務器端找到對應的已注冊的 NFS daemon 端口后,回報給客戶端
- 客戶端了解正確的端口后,就可以直接與 NFS daemon 來連接
由於NFS 必須要有 RPC 存在時才能成功的提供服務,因此,NFS 被稱為 RPC server 的一種。
NFS安裝使用
1. 看當前有沒有安裝過
rpm -qa|grep nfs
rpm -qa|grep rpcbind
yum -y install nfs-utils rpcbind
touch /etc/exports
里面放這樣一句: /opt/tomcat/static 192.168.101.*(rw,sync,no_root_squash,no_subtree_check)
這里參數:
參數值 |
內容說明 |
rw ro |
該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關 |
sync async sync |
代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存於內存當中,而非直接寫入硬盤 |
no_root_squash root_squash |
客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份? |
all_squash |
不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) |
anonuid anongid anon |
anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody), |
exportfs -r 配置生效
/bin/systemctl start rpcbind.service
/bin/systemctl start nfs.service
showmount -e localhost
客戶端
yum -y install nfs-utils
mount -t nfs 192.168.101.32:/opt/static /opt/static -o proto=tcp -o nolock
