第1章 NFS介紹 1.1 NFS基本概述 NFS(Network File System)網路文件系統 主要功能是通過區域網絡讓不同的主機系統之間可以共用文件或目錄。 NFS(Network File System)網路文件系統 NFS系統和Windows網路共用、網路驅動器類似, 只不過wind ...
第1章 NFS介紹
1.1 NFS基本概述
NFS(Network File System)網路文件系統
主要功能是通過區域網絡讓不同的主機系統之間可以共用文件或目錄。
NFS系統和Windows網路共用、網路驅動器類似, 只不過windows用於區域網, NFS用於企業集群架構中, 如果是大型網站, 會用到更複雜的分散式文件系統FastDFS,glusterfs,HDFS
1.2 為什麼要使用NFS服務
實現多台伺服器之間數據共用
實現多台伺服器之間數據的一致
1.3 NFS服務內容概述
NFS優缺點以及生產建議
RPC服務知識概念介紹說明
NFS服務工作原理
NFS共用文件系統使用原理
NFS服務配罝文件exports編寫格式及測試
1.4 NFS配置文件
執行man exports命令,然後切換到文件結尾,可以快速查看如下樣例格式:
nfs共用參數 |
參數作用 |
rw* |
讀寫許可權 |
ro |
只讀許可權 |
root_squash |
當NFS客戶端以root管理員訪問時,映射為NFS伺服器的匿名用戶(不常用) |
no_root_squash |
當NFS客戶端以root管理員訪問時,映射為NFS伺服器的root管理員(不常用) |
all_squash |
無論NFS客戶端使用什麼賬戶訪問,均映射為NFS伺服器的匿名用戶(常用) |
no_all_squash |
無論NFS客戶端使用什麼賬戶訪問,均映射為NFS伺服器的匿名用戶(常用) |
sync* |
同時將數據寫入到記憶體與硬碟中,保證不丟失數據 |
async |
優先將數據保存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失數據 |
anonuid* |
配置all_squash使用,指定NFS的用戶UID,必須存在系統 |
anongid* |
配置all_squash使用,指定NFS的用戶UID,必須存在系統 |
1.5 NFS存儲小結
nfs屬於本地文件存儲服務
1.5.1 NFS存儲優點
NFS文件系統簡單易用、方便部署、數據可靠、服務穩定、滿足中小企業需求。
NFS文件系統記憶體放的數據都在文件系統之上,所有數據都是能看得見。
1.5.2 NFS存儲局限
存在單點故障, 如果構建高可用維護麻煩。
NFS數據明文, 並不對數據做任何校驗。
客戶端掛載無需賬戶密碼, 安全性一般(內網使用)
1.5.3 生產應用建議
生產場景應將靜態數據儘可能往前端推, 減少後端存儲壓力
必須將存儲里的靜態資源通過CDN緩存(jpg\png\mp4\avi\css\js)
如果沒有緩存或架構本身歷史遺留問題太大, 在多存儲也無用
第2章 NFS應用場景
2.1 跨系統文件數據共用
實現Windows與linux系統文件數據共用方法
a.ftp(ftp服務部署) b.samba服務
2.2 共用存儲的價值
圖解集群需要共用存儲服務原因
沒有共用存儲
- A用戶傳圖片到WEB1伺服器
- B用戶訪問這張圖片,結果B用戶訪問的請求分發到了WEB2,因為WEB2上沒有這張圖片,結果B用戶無法看到A用戶傳的圖片。
有共用存儲
1.如果有共用存儲的情況, A用戶上傳圖片無論分發到WEB1還是WEB2, 最終都存儲至共用存儲
2.在當B用戶訪問圖片時,無論分發到WEB1還是WEB2上,最終也都會去共用存儲上訪問,這樣就可以訪問到資源了
2.3 NFS實現原理
本地文件操作方式
當用戶執行mkdir命令, 該命令會通過shell解釋器翻譯給內核,由內核解析完成後驅動硬體,完成相應的操作。
NFS實現原理
需要先瞭解[程式|進程|線程]
1.用戶進程訪問NFS客戶端,使用不同的函數對數據進行處理
2.NFS客戶端通過TCP/IP的方式傳遞給NFS服務端。
3.NFS服務端接收到請求後,會先調用portmap進程進行埠映射。
4.nfsd進程用於判斷NFS客戶端是否擁有許可權連接NFS服務端。
5.Rpc.mount進程判斷客戶端是否有對應的許可權進行驗證。
6.idmap進程實現用戶映射和壓縮
7.最後NFS服務端會將對應請求的函數轉換為本地能識別的命令,傳遞至內核,由內核驅動硬體。
rpc是一個遠程過程調用,那麼使用nfs必須有rpc服務
第3章 NFS服務安裝
伺服器系統 |
角色 |
外網IP |
內網IP |
CentOS 7.5 |
NFS服務端 |
eth0:10.0.0.31 |
eth1:172.16.1.31 |
CentOS 7.5 |
NFS客戶端 |
eth0:10.0.0.41 |
eth1:172.16.1.41 |
註意: 檢查關閉防火牆, 以免預設的防火牆策略禁止正常的NFS共用服務
關閉Firewalld防火牆 [root@xuliangwei ~]# systemctl disable firewalld [root@xuliangwei ~]# systemctl stop firewalld 關閉selinux防火牆 [root@xuliangwei ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config [root@xuliangwei ~]# setenforce 0
3.1 安裝NFS
[root@nfs ~]# yum -y install nfs-utils
3.2 配置NFS
3.2.1 配置內容
NFS服務程式的配置文件為/etc/exports預設該文件里沒有任何內容。
按照共用目錄的路徑 允許訪問的NFS客戶端(共用許可權參數)格式,定義要共用的目錄與相應的許可權。
exports配置文件格式 [root@nfs ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,all_squash) 註意: NFS客戶端地址與許可權之間沒有空格 [root@nfs ~]# vim /etc/exports /data 172.16.1.0/24(rw,sync,all_squash) 在NFS伺服器上建立用於NFS文件共用的目錄,並設置對應許可權 [root@nfs ~]# mkdir /data [root@nfs ~]# chown -R nfsnobody.nfsnobody /data NFS共用目錄會記錄至/var/lib/nfs/etab,如果該目錄不存在共用信息,請檢查/etc/exports是否配置錯誤
如果想要把/data目錄共用給172.16.1.0/24網段內的所有主機
1.主機都擁有讀寫許可權
2.在將數據寫入到NFS伺服器的硬碟中後才會結束操作,最大限度保證數據不丟失
3.將所有用戶映射為本地的匿名用戶(nfsnobody)
3.2.2 exports配置內容說明
/data 172.16.1.0/24(rw,sync,all_squash) 第一部分:/data --指定共用目錄信息 第二部分:172.16.1.0/24 --指定了一個網段信息,表示允許指定的網段主機掛載到我本地的共用目錄上 第三部分:(rw,sync) --表示定義共用參數信息, rw 表示讀寫,對共用目錄設置的許可權 sync 同步,數據會先寫入到NFS伺服器記憶體中,會立刻同步到磁碟裡面==直
3.3 創建對應的目錄
創建/data目錄
並將所屬用戶和組修改成nfsnobody
[root@nfs ~]# mkdir /data [root@nfs ~]# chown -R nfsnobody.nfsnobody /data NFS共用目錄管理用戶為nfsnobody,此用戶不用創建,安裝nfs軟體時會自動創建
3.4 啟動服務
在使用NFS
服務進行文件共用之前,需要使用RPC(Remote Procedure Call
遠程過程調用, 服務將NFS
伺服器的IP
地址和埠號信息發送給客戶端。
因此,在啟動NFS
服務之前,需要先重啟並啟用rpcbind
服務程式,同時都加入開機自啟動
先啟動rpcbind 再啟動nfs-server 順序不能顛倒 [root@nfs-server ~]# systemctl restart rpcbind [root@nfs-server ~]# systemctl restart nfs-server [root@nfs-server ~]# systemctl enable rpcbind [root@nfs-server ~]# systemctl enable nfs-server
3.5 檢查服務
上面都執行過後 檢查 檢查是必不可少的一個環節
有問題可以儘早發現
檢查埠 [root@nfs ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 653/rpcbind 檢查共用的內容 NFS服務開啟後,預設的參數文件位置,註意:修改此文件,對nfs服務沒有任何影響 [root@nfs ~]# cat /var/lib/nfs/etab /data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,all_squash) 檢查匿名用戶對應的真實賬戶,並授權共用目錄為nfsnobody [root@nfs ~]# grep "65534" /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
3.6 配置客戶端
客戶端只啟動rpcbind
服務
showmount -e
查看遠程伺服器rpc
提供的可掛載nfs
信息
客戶端創建一個掛載目錄, 使用mount
命令並結合-t
參數, 指定要掛載的文件系統的類型
說明: 如果nfs軟體不安裝
無法使用showmount 命令
客戶端無法識別nfs 文件系統類型
NFS客戶端的配置步驟 先使用showmount命令,查詢NFS伺服器的遠程共用信息 其輸出格式為“共用的目錄名稱 允許使用客戶端地址”。 配置客戶端 安裝客戶端工具,僅啟動rpcbind服務 [root@web01 ~]# yum install nfs-utils -y [root@web01 ~]# systemctl enable rpcbind [root@web01 ~]# systemctl start rpcbind 使用showmount -e查看遠程伺服器rpc提供的可掛載nfs信息 showmount使用,需要安裝nfs-utils軟體 [root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 配置客戶端-創建掛載點目錄,執行掛載命令 在NFS客戶端創建一個掛載目錄, 使用mount命令並結合-t參數, 指定要掛載的文件系統的類型, 併在命令後面寫上伺服器的IP地址, 以及伺服器上的共用目錄, 最後需要寫上要掛載到本地系統(客戶端)的目錄。 [root@web01 ~]# mkdir /data [root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/ 查看掛載信息 [root@web01 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 172.16.1.31:/data 50G 2.6G 48G 6% /data
3.7 測試客戶端
[root@web01 ~]# echo "123" > /data/test [root@web01 ~]# ll /data/ 總用量 4 -rw-r--r-- 1 nfsnobody nfsnobody 4 9月 6 03:41 test 掛載成功後可以進行增刪改操作 使用客戶端往nfs存儲寫入 [root@web01 ~]# echo "nfs-client" >> /mnt/test.txt 檢查nfs服務端是否存在客戶端創建的新文件 [root@nfs ~]# cat /data/test.txt nfs-client 如果希望NFS文件共用服務能一直有效,則需要將其寫入到fstab文件中 [root@web01 ~]# vim /etc/fstab 172.16.1.31:/data /nfsdir nfs defaults 0 0 如果不希望使用NFS共用, 可進行卸載 umount [root@web01 ~]# umount /nfsdir 註意:卸載的時候如果提示”umount.nfs: /nfsdir: device is busy” 切換至其他目錄, 然後在進行卸載。 NFS Server宕機, 強制卸載umount -lf /nfsdir