一、需求背景
筆者項目中此前有這么個需求,需要支持文件進行預(yù)覽,文件的存儲位置都在后端服務(wù)器上,想要支持預(yù)覽是比較困難的(若是在前端服務(wù)器上則比較方便),因為無法做到跨服務(wù)器之間的靜態(tài)文件預(yù)覽,然后解決這個問題的思路就設(shè)定在了將后端服務(wù)器的文件所在位置掛載到前端服務(wù)器上,然后再使用nginx的反向代理,將文件地址代理出去,這樣就可以實現(xiàn)文件預(yù)覽功能了。方案確定以后就是技術(shù)選型了,最后確定使用了nfs來解決服務(wù)器之間的磁盤掛載,當(dāng)然不止nfs可以實現(xiàn),其他也可以。這里對nfs的使用做一次總結(jié)。
二、使用nfs實現(xiàn)多服務(wù)器之間磁盤掛載
1.nfs安裝
# ubuntu 安裝nfs
sudo apt-get install -y nfs-kernel-server
# centos 安裝nfs
sudo yum install nfs-utils rpcbind
2.nfs使用
nfs使用不難,只需要很少量的配置即可,下面來展示下這個配置
2.1服務(wù)端配置
服務(wù)端負(fù)責(zé)把文件共享出去,我們相當(dāng)于把某個文件夾暴露給某個ip或者暴露在公網(wǎng)環(huán)境下。
# 先安裝nfs
# 編輯服務(wù)端配置文件
vim /etc/exports
# 添加共享信息:將本地的/data目錄共享給192.168.150.166,并讓該ip擁有對該目錄的rw權(quán)限
/data 192.168.150.166(rw)
# 重啟nfs
systemctl restart nfs-server.service
# rpc如果沒有啟動的話,這里啟動下就行,啟動過則無需重啟
systemctl start rpcbind.service
# 重載 /etc/exports
exportfs -rv
2.2客戶端配置
客戶端負(fù)責(zé)將本地的某個文件夾與服務(wù)端建立連接,這樣就可以在本地操作遠(yuǎn)端服務(wù)器目錄了。
# 先安裝nfs
# 啟動nfs
systemctl restart nfs-server.service
systemctl restart rpcbind.service
# 與服務(wù)端建立連接:將本地的mnt掛載到 192.168.150.167:/data 目錄下
mount -t nfs 192.168.150.167:/data /mnt
# 查看掛載是否成功,掛載成功的話會能看到成功掛載的信息
df -h
# 客戶端取消掛載:將本地的mnt掛載進行取消
umount /mnt
一個服務(wù)端是可以同時被n個客戶端進行掛載的,所以服務(wù)端與客戶端其實是1對n的關(guān)系。
3.nfs介紹
上面說了是啥,這里介紹下他的原理。原理都是網(wǎng)絡(luò)上搜的,作為了解。
3.1nfs是什么
NFS是一種基于TCP/IP 傳輸?shù)木W(wǎng)絡(luò)文件系統(tǒng)協(xié)議。通過使用NFS協(xié)議,客戶機可以像訪問本地目錄一樣訪問遠(yuǎn)程服務(wù)器中的共享資源
NAS存儲: NFS服務(wù)的實現(xiàn)依賴于RPC (Remote Process Call,遠(yuǎn)端過程調(diào)用)機制,以完成遠(yuǎn)程到本地的映射過程。需要安裝nfs-utils、 rpcbind 軟件包來提供NFS共享服務(wù),前者用于NFS共享發(fā)布和訪問,后者用于RPC支持。手動加載NFS共享服務(wù)時,應(yīng)該先啟動rpcbind, 再啟動nfs。
nfs端口:2049
RPC端口:111
3.2nfs特點
采用TCP/IP傳輸網(wǎng)絡(luò)文件
安全性低
簡單易操作
適合局域網(wǎng)環(huán)境
3.3共享時權(quán)限選項
常用的賦予權(quán)限類型,如下命令:
# 將本地的/data目錄共享給192.168.150.166,該ip對于該目錄及文件具有括號內(nèi)的這些權(quán)限
/data 192.168.150.166(rw,sync,no_subtree_check,no_root_squash)
下面是權(quán)限的所有可選項:
ro 只讀訪問
rw 讀寫訪問
sync 所有數(shù)據(jù)在請求時寫入共享
async NFS在寫入數(shù)據(jù)前可以相應(yīng)請求
secure NFS通過1024以下的安全TCP/IP端口發(fā)送
insecure NFS通過1024以上的端口發(fā)送
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權(quán)限(默認(rèn))
no_subtree_check 和上面相對,不檢查父目錄權(quán)限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
no_all_squash 保留共享文件的UID和GID(默認(rèn))
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權(quán)限(默認(rèn))
no_root_squash root用戶具有根目錄的完全管理訪問權(quán)限
anonuid=xxx 指定NFS服務(wù)器/etc/passwd文件中匿名用戶的UID
3.4其他常用命令
# 服務(wù)端命令,查看服務(wù)端共享出去的文件信息
exportfs -v
# 服務(wù)端命令,重新加載配置文件,通常這么使用:exportfs -rv
exportfs -r
三、實踐中碰到的問題
1.掛載時報錯:mount.nfs: Stale file handle
這個報錯筆者這里是因為之前客戶端掛載過別的服務(wù)器,但是服務(wù)端直接將掛載取消了,這里再從客戶端進行別的掛載就報了這個錯誤,只需要執(zhí)行以下命令即可解決該問題文章來源:http://www.zghlxwxcb.cn/news/detail-445385.html
# /mnt是之前掛載的目錄
umount -lf /mnt
2.共享時報錯:exportfs: does not support NFS export
解決辦法:查看文件類型:cat /etc/fstab,若文件類型不是ext4則無法正常共享,若本來就是掛載的文件夾也是無法共享的。文章來源地址http://www.zghlxwxcb.cn/news/detail-445385.html
到了這里,關(guān)于服務(wù)器(linux)磁盤掛載nfs的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!