1.什麼是nfs,具體能幹什麼及使用環境?css
nfs network file system網絡文件系統,能爲不一樣主機之間,實現文件共享,在集羣架構中使用。linux
2.nfs能解決什麼問題及注意事項?web
功能:1.解決多臺機器靜態資源一致性問題shell
2.解決多臺機器資源共享vim
3.解決磁盤空間浪費windows
注意事項:1.添加共享存儲,只會帶來網站的訪問延時和消耗,並不會增長網站訪問速度。後端
2.CDN緩存
3.nfs實現原理解析bash
本地文件操做1.當用戶執行mkdir命令,bashshell沒法完成該命令操做,會將其翻譯給內核服務器
2.kernel內核解析完成後會驅動對應的磁盤設備,完成文件目錄的建立
NFS實現原理 1.NFS客戶端執行增、刪等操做,客戶端會使用不一樣的函數對該操做進行封裝。(windows linux mac)
2.NFS客戶端會經過TCP/IP的方式傳遞給NFS服務端。(可靠)
3.NFS服務端接收到請求後,會先調用portmap進程進行端口映射。
4.nfsd進程用於判斷NFS客戶端是否擁有權限鏈接NFS服務端。
5.Rpc.mount進程判斷客戶端是否有對應的權限進行驗證。讀 寫
6.idmap進程實現用戶映射和壓縮。
7.最後NFS服務端會將客戶端的函數轉換爲本地能執行的命令,而後將命令傳遞至內核,由內核驅動硬件
注意:rpc是一個遠程過程調用,那麼使用nfs必須有rpcbind服務
7.安裝配置nfs服務
1.安裝
[root@nfs ~]# yum install nfs-utils -y
2.配置
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,all_squash,anonuid=666,anongid=666)
3.根據配置初始化環境
[root@nfs data]# groupadd -g 666 www
[root@nfs data]# useradd -u666 -g666 www
[root@nfs data]# id www
uid=666(www) gid=666(www) groups=666(www)
[root@nfs data]# chown -R www.www /data/
4.啓動
[root@nfs ~]# systemctl enable nfs #加入開機自啓動
[root@nfs ~]# systemctl start nfs #啓動服務
5.客戶端
[root@backup ~]# yum install nfs-utils -y
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@backup ~]# showmount -e 172.16.1.31 #查看
Export list for 172.16.1.31:
/data 172.16.1.0/24
客戶端使用(必定要與服務端使用的匿名用戶一致
[root@web01 ~]# groupadd -g 666 www
[root@web01 ~]# useradd -u666 -g666 www
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/ /media/ #掛載,服務端ip地址爲172.16.1.31
6.nfs相關的配置參數
nfs共享參數 參數做用
rw* 讀寫權限 (最多)
ro 只讀權限 (只但願看,不但願寫)
root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的匿名用戶nfsnobody(不經常使用)
no_root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的root管理員(不經常使用)
no_all_squash 不管NFS客戶端使用什麼帳戶訪問,都不進行用戶壓縮 ( 後面講雲計算課程會用上 )
all_squash 不管NFS客戶端使用什麼帳戶訪問,均映射爲NFS服務器的匿名用戶(經常使用)
sync* 同時將數據寫入到內存與硬盤中,保證不丟失數據
async 優先將數據保存到內存,而後再寫入硬盤;這樣效率更高,但可能會丟失數據
anonuid* 配置all_squash使用,指定NFS的用戶UID,必須存在系統
anongid* 配置all_squash使用,指定NFS的用戶UID,必須存在系統
7.nfs如何共享多個文件
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data_2 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
ps:客戶端分別掛載在不一樣目錄下
8.NFS優缺點,侷限性及應用建議
優勢:1.NFS簡單易用,方便部署,數據可靠,服務穩定,知足中小企業的需求
2.NFS的數據都在文件系統之上,全部的數據都是能看的見的
侷限性:1.存在單點故障,自己NFS不支持高可用,也不支持集羣
2.NFS數據都是明文,並不對數據作任何校驗,也沒有密碼驗證(建議內網使用)
應用建議:1.生產場景應將靜態數據(jpg\png\mp4\avi\css\js)儘量放置CDN場景進行環境,以此來減小後端存儲壓力
2.若是沒有緩存或架構,代碼等,自己歷史遺留的問題太大,再多存儲也沒意義
9.實現開機自動掛載(由於服務器不重啓)
[root@web01 ~]# cat /etc/fstab
172.16.1.31:/data /media nfs defaults 0 0
常見錯誤:
PS: 若是nfs服務端出現問題: 客戶端重啓則會沒法啓動成功
1.等待1分38s 自動進入系統
2.進入單用戶模式,註釋開機自啓動nfs
3.將nfs恢復正常
錯誤的示範
#訪問被拒絕 (沒有容許該網段訪問)
[root@backup ~]# mount -t nfs 10.0.0.31:/data /media/
mount.nfs: access denied by server while mounting 10.0.0.31:/data
#可以鏈接,可是權限被拒絕
[root@backup mnt]# touch file
touch: cannot touch ‘file’: Permission denied
PS:ls /var/lib/nfs/etab 查看nfs權限路徑