Linux 安裝 NFS 實現文件目錄共享
一、背景介紹
項目中,之前是單節點部署服務,關於文件的上傳和下載,只要配置好路徑即可。
而當集群化部署后,就會有問題。比如:文件上傳的時候,訪問的是主機1,而想要現在文件的時候,卻訪問的主機2,這樣就會導致文件下載失敗。
關於文件共享,可以通過Nginx,Samba,NFS,FastDFS等實現。
本篇博文根據個人項目中的實際使用場景,在不該任何服務代碼的情況下,使用NFS最為合適。
二、NFS安裝和配置
1、何為NFS?
NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過網絡共享資源。
將NFS主機分享的目錄,掛載到本地客戶端當中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,在客戶端看起來,就像訪問本地文件一樣。
2、 NFS 服務端_安裝配置
[檢查是否安裝NFS]
rpm -qa | grep nfs rpm -qa | grep rpcbind
[安裝NFS服務端]
yum -y install nfs-utils rpcbind
[設置開機啟動NFS相關服務]
systemctl enable rpcbind && systemctl enable nfs-server && systemctl enable nfs-lock && systemctl enable nfs-idmap
或者
systemctl enable rpcbind
Created symlink from /etc/systemd/system/multi-user.target.wants/rpcbind.service to /usr/lib/systemd/system/rpcbind.service.
systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
systemctl enable nfs-lock
systemctl enable nfs-idmap
[啟動NFS相關服務]
systemctl start rpcbind && systemctl start nfs-server && systemctl start nfs-lock && systemctl start nfs-idmap
或者
systemctl start rpcbind systemctl start nfs-server systemctl start nfs-lock systemctl start nfs-idmap
[創建需要共享的目錄]
mkdir -p /home/miracle/uploads
chmod -R 777 /home/miracle/uploads
[配置需要共享的目錄]
vim /etc/exports
添加如下內容(可以配置多個共享目錄,IP也可以配置單個,或者模糊匹配多個):
/home/miracle/uploads 192.168.169.2(rw,sync,all_squash)
參數列表
| 參數 |
說明 |
| ro |
只讀訪問 |
| rw |
讀寫訪問 |
| sync |
所有數據在請求時寫入共享 |
| async |
nfs 在寫入數據前可以響應請求 |
| secure |
nfs 通過 1024 以下的安全 TCP/IP 端口發送 |
| insecure |
nfs 通過 1024 以上的端口發送 |
| wdelay |
如果多個用戶要寫入 nfs 目錄,則歸組寫入(默認) |
| no_wdelay |
如果多個用戶要寫入 nfs 目錄,則立即寫入,當使用 async 時,無需此設置 |
| hide |
在 nfs 共享目錄中不共享其子目錄 |
| no_hide |
共享 nfs 目錄的子目錄 |
| subtree_check |
如果共享 /usr/bin 之類的子目錄時,強制 nfs 檢查父目錄的權限(默認) |
| no_subtree_check |
不檢查父目錄權限 |
| all_squash |
共享文件的 UID 和 GID 映射匿名用戶 anonymous,適合公用目錄 |
| no_all_squash |
保留共享文件的 UID 和 GID(默認) |
| root_squash |
root 用戶的所有請求映射成如 anonymous 用戶一樣的權限(默認) |
| no_root_squash |
root 用戶具有根目錄的完全管理訪問權限 |
| anonuid=xxx |
指定 nfs 服務器 /etc/passwd 文件中匿名用戶的 UID |
| anongid=xxx |
指定 nfs 服務器 /etc/passwd 文件中匿名用戶的 GID |
[配置立即生效]
exportfs -r
[查看共享目錄信息]
exportfs -v
3、 NFS 客戶端_安裝配置
[安裝 NFS 客戶端]
yum -y install nfs-utils
[查看服務端的共享目錄設置]
showmount -e 192.168.169.1
[創建本地目錄]
mkdir -p /home/miracle/uploads
[將服務端共享目錄掛載到本地目錄]
mount -t nfs 192.168.169.1:/home/miracle/uploads /home/miracle/uploads
至此,共享目錄的安裝和配置已完成,可以創建一個文件,檢驗共享功能是否正常。
[取消掛載]
如果目錄掛載錯誤的情況下,可以取消掛載。
umount 192.168.166.1:/home/miracle/uploads
或者
umount /home/miracle/uploads
【補充說明】
如果現場環境是不允許訪問外網,只能離線安裝的情況下,就需要提前下載好安裝包。
1、下載離線安裝包(只下載,不安裝)
1)下載NFS服務端安裝文件,存放到 /home/miacle/nfs-server 目錄下,命令如下:
yum install --downloadonly --downloaddir=/home/miracle/nfs-server nfs-utils rpcbind

可以將下載的NFS服務端安裝文件打包,命令如下:
tar -zcvf nfs-server.tar /home/miracle/nfs-server
2)下載NFS客戶端端安裝文件,存放到 /home/miacle/nfs-client 目錄下,命令如下:
yum install --downloadonly --downloaddir=/home/miracle/nfs-client nfs-utils

可以將下載的NFS服務端安裝文件打包,命令如下:
tar -zcvf nfs-client.tar /home/miracle/nfs-client
2、批量安裝 rpm 文件
rpm -Uvh --force --nodeps *.rpm

