NFS网络文件共享存储服务器
NFS網絡文件共享存儲服務器
?
什么是NFS
NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位于遠端NFS服務器上的文件,就像訪問本地文件一樣。
在企業集群架構的工作場景中,NFS網絡文件系統一般被用來共享存儲視頻、圖片、附件等靜態資源文件,通常網站用戶上的文件都會存放到NFS共享里。例如bbs產品的圖片、附件頭像等。然后前段所有的節點訪問這些靜態資源時都會讀取NFS存儲上的資源。
企業生成集群中為什么要部署NFS存儲服務
?
1)在沒有NFS文件共享存儲時的原理解釋:
當A用戶上傳圖片到web1服務器時,然后B用戶訪問這張圖片,結果B用戶訪問圖片的請求到了負載均衡器的時候,被分發到web2服務器上,因為web2沒有A用戶上傳的圖片,所以B用戶就無法看到A用戶上傳的圖片。
實例:淘寶賣家將新出的產品資料上傳到淘寶服務器。如果沒有存儲服務器,那么當大量的用戶訪問到這個淘寶賣家店里的時候,分發器將用戶的請求都分發給淘寶的其他服務器,那么用戶就無法看到賣家新出的產品了,這就導致了降低了用戶體驗。這樣對一個戶門網站來說是一個很大的錯誤。
?
?
2)在有NFS文件共享存儲時的原理解釋:
當A用戶上傳一張圖片到web服務器中,分發器不論是轉發到那一臺web服務器,其內容最后都會被存放到NFS共享文件存儲中。而當B用戶訪問A用戶上傳的圖片時,無論請求被分發器分發web1還是web2上,最終都會到共享存儲上找,都可以找到A用戶上傳的圖片。
NFS的工作原理
?
服務端設置一個專門用來共享的目錄(/test)。設置好共享目錄的權限,IP等內容。然后具有權限的客戶端訪問NFS服務器端,將這個共享目錄掛載到客戶端的某個目錄下。客戶端在正確掛載完之后,就可以通過NFS客戶端的掛載點所在的目錄中查看到NFS服務端共享目錄/test下的所有數據。客戶端查看時,NFS服務端的/test目錄就相當于客戶端本地的磁盤分區或目錄。
什么RPC服務
RPC指遠程過程調用。
因為NFS支持的功能比較多,而不同的功能都會使用不同的程序來啟動,為啟動一個功能就會啟用一些未被使用的端口來作為傳輸只用,因為端口的不固定,這樣一來就會造成NFS客戶端與NFS服務器端的通信障礙沒因為NFS客戶端必須要知道NFS服務器端的數據傳輸端口才能進行通信,才能交互數據。
為了解決上述的問題,就需要RPC服務,NFS服務的RPC服務最主要的功能就是記錄每個NFS功能所對飲的端口號,并且NFS客戶端請求時將該端口和功能對應的信息傳輸給請求數據的NFS客戶端,從而保證客戶端可以連接到正確的NFS端口上去,達到實現數據交互的目的。
服務端的RPC服務如何知道每個NFS的端口的:
當NFS讀取端啟動服務時會隨機取用若干端口,并主動向RPC服務注冊相關端口的對應的功能,然后RPC服務使用固定的111端口來監聽NFS客戶端提交的請求,并將正確的NFS端口信息回復給請求的NFS客戶端。
NFS的掛載基本使用過程
?
請求數據的流程:
1)首先用戶訪問網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這是NFS客戶端的RPC服務就不通過網絡向NFS服務器端的RPC服務的111端口發出NFS文件存取功能的查詢請求,包括要實現的什么功能。
2)NFS服務器端的RPC服務找到對飲的已注冊的NFS端口,通知NFS客戶端的RPC服務。
3)此時NFS客戶端獲取到正確的端口,并與NFS聯機存取數據。
4)NFS客戶端把數據存取成功后,返回給客戶端程序,告知用戶存取結果。
注意:
因為NFS的各項功能都需要向RPC服務注冊端口,所以只有RPC服務才能獲取到NFS服務的各項功能對應的端口號,PID、NFS在主機監聽的Ip等信息,而客戶端也只能通過向RPC服務詢問才能找到正確 的端口,因此,無論是NFS服務端還是NFS客戶端都需要RPC服務的協助才能完成對外服務及請求。
?
一:實驗目標
1、完成NFS的文件共享
?
二:實驗環境
服務器系統 | 主機名 | IP | 作用 | 軟件 |
Rhel6.5 | yu61 | 192.168.1.61 | Nfs-server | nfs-utils、rpcbind |
Rhel6.5 | yu62 | 192.168.1.62 | Nfs-client1 | nfs-utils、rpcbind |
Rhel6.5 | yu63 | 192.168.1.63 | Nfs-client2 | nfs-utils、rpcbind |
三:實驗步驟
1、安裝NFS服務端
[root@yu61 ~]# yum install nfs-utils rpcbind -y
[root@yu61 ~]#
[root@yu61 ~]# /etc/init.d/rpcbind status
rpcbind (pid ?1615) is running...
[root@yu61 ~]# lsof -i :111
COMMAND ?PID USER ??FD ??TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1615 ?rpc ???6u ?IPv4 ?11330 ?????0t0 ?UDP *:sunrpc
rpcbind 1615 ?rpc ???8u ?IPv4 ?11333 ?????0t0 ?TCP *:sunrpc (LISTEN)
rpcbind 1615 ?rpc ???9u ?IPv6 ?11335 ?????0t0 ?UDP *:sunrpc
rpcbind 1615 ?rpc ??11u ?IPv6 ?11338 ?????0t0 ?TCP *:sunrpc (LISTEN)
?
2、查看NFS服務向RPC服務注冊的端口信息
因為NFS服務還沒有啟動,一次沒有太多注冊端口映射信息。
[root@yu61 ~]# rpcinfo -p localhost
???program vers proto ??port ?service
????100000 ???4 ??tcp ???111 ?portmapper
????100000 ???3 ??tcp ???111 ?portmapper
????100000 ???2 ??tcp ???111 ?portmapper
????100000 ???4 ??udp ???111 ?portmapper
????100000 ???3 ??udp ???111 ?portmapper
????100000 ???2 ??udp ???111 ?portmapper
????100024 ???1 ??udp ?43521 ?status
100024 ???1 ??tcp ?60423 ?status
3、啟動NFS服務
[root@yu61 ~]# /etc/init.d/nfs start
rpc.rquotad (pid 49232) is running...
[root@yu61 ~]# rpcinfo -p localhost
???program vers proto ??port ?service
????100000 ???4 ??tcp ???111 ?portmapper
????100000 ???3 ??tcp ???111 ?portmapper
????100000 ???2 ??tcp ???111 ?portmapper
????100000 ???4 ??udp ???111 ?portmapper
????100000 ???3 ??udp ???111 ?portmapper
????100000 ???2 ??udp ???111 ?portmapper
????100024 ???1 ??udp ?43521 ?status
????100024 ???1 ??tcp ?60423 ?status
????100011 ???1 ??udp ???875 ?rquotad
????100011 ???2 ??udp ???875 ?rquotad
????100011 ???1 ??tcp ???875 ?rquotad
????100011 ???2 ??tcp ???875 ?rquotad
????100005 ???1 ??udp ?38917 ?mountd
????100005 ???1 ??tcp ?44150 ?mountd
????100005 ???2 ??udp ?42858 ?mountd
????100005 ???2 ??tcp ?52228 ?mountd
????100005 ???3 ??udp ?41216 ?mountd
100005 ???3 ??tcp ?60796 ?mountd
4、NFS服務常見的進程詳解
[root@yu61 ~]# ps -ef | egrep "rpc|nfs"
rpc ???????1615 ?????1 ?0 11:00 ? ???????00:00:00 rpcbind
rpcuser ???1755 ?????1 ?0 11:00 ? ???????00:00:00 rpc.statd
root ?????49221 ?????2 ?0 18:35 ? ???????00:00:00 [rpciod/0]
root ?????49222 ?????2 ?0 18:35 ? ???????00:00:00 [rpciod/1]
root ?????49223 ?????2 ?0 18:35 ? ???????00:00:00 [rpciod/2]
root ?????49224 ?????2 ?0 18:35 ? ???????00:00:00 [rpciod/3]
root ?????49232 ?????1 ?0 18:35 ? ???????00:00:00 rpc.rquotad
root ?????49236 ?????1 ?0 18:35 ? ???????00:00:00 rpc.mountd
root ?????49242 ?????2 ?0 18:35 ? ???????00:00:00 [nfsd4]
root ?????49243 ?????2 ?0 18:35 ? ???????00:00:00 [nfsd4_callbacks]
root ?????49249 ?????2 ?0 18:35 ? ???????00:00:00 [nfsd]
root ?????49250 ?????2 ?0 18:35 ? ???????00:00:00 [nfsd]
root ?????49251 ?????2 ?0 18:35 ? ???????00:00:00 [nfsd]
root ?????49274 ?????1 ?0 18:35 ? ???????00:00:00 rpc.idmapd
root ?????49318 ??2821 ?0 18:36 pts/0 ???00:00:00 egrep rpc|nfs
(1)Nfs服務啟動的進程說明
NFS服務的主要任務是共享文件刺痛的數據,而文件系統數據的共享離不開權限問題。所以NFS服務器啟動后時擲篩需要兩個不同的進程,一個是管理NFS客戶端是否能夠登入rpxc.nfsd主進程,另一個用于管理NFS客戶端是否能夠取得對應權限的rpc.mountd進程,如果還需要管理磁盤配額,則NFS還需要再加載rpc.rpuotad進程。
服務或進程 | 用途說明 |
nfsd (rpc.nfsd) | Rpc.nfsd的主要功能是管理NFS服務器端主機 |
Mountd (rpc.mountd) | rpc.mountd的主要功能則是管理NFS文件系統,當NFS客戶端順利通過rpc.nfsd登入NFS服務器端的主機時,在使用NFS服務器提供數據之前,他會去讀NFS的配置文件/etc/exports來對比NFS客戶端的權限,通過這一關之后,還要經過NFS服務器端本地文件系統使用權限的認證程序, |
rpc.locke | 可以用來鎖定文件,用于多客戶端同時寫入 |
rpc.statd | 檢查文件的一致性 |
rpc.idmapd | 名字映射后臺進程 |
5、配置NFS服務器端的服務開機自啟動
[root@yu61 ~]# chkconfig rpcbind on
[root@yu61 ~]# chkconfig nfs on
[root@yu61 ~]# chkconfig --list | egrep "nfs\b|rpcbind"
nfs ???????????0:off1:off2:on3:on4:on5:on6:off
rpcbind ???????0:off1:off2:on3:on4:on5:on6:off
[root@yu61 ~]# tail -3 /etc/rc.local
tail: inotify cannot be used, reverting to polling
#start uo nfs
/etc/init.d/rpcbind start
/etc/init.d/nfs start
?
6、Nfs服務器端共享文件的配置文件路徑
[root@yu61 ~]# cat /etc/exports
格式:
Nfs共享目錄 nfs客戶端1地址(權限) nfs客戶端2地址(權限)
例如:可以編輯/etc/exports為:?
/tmp*(rw,no_root_squash)
/home/public192.168.0.*(rw)*(ro)
/home/test192.168.0.100(rw)
/home/linux*.the9.com(rw,all_squash,anonuid=40,anongid=40)
?
7、NFS配置權限設置常用參數說明
參數名稱 | 參數用途 |
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用戶一樣的權限(默認) |
anonuid=xxx | 指定NFS服務器/etc/passwd文件中匿名用戶的UID |
?
?
實戰:NFS服務案例配置
1、創建需要共享的目錄并授權
[root@yu61 ~]# mkdir -p /data
[root@yu61 ~]# touch /data/a.txt
[root@yu61 ~]# cp /etc/shadow /data/
[root@yu61 ~]# chown -R nfsnobody.nfsnobody /data
[root@yu61 ~]# chmod 777 /data/
[root@yu61 ~]# ls -ld /data/
drwxrwxrwx 3 nfsnobody nfsnobody 4096 May 20 19:16 /data/
[root@yu61 ~]# grep nfsnobody /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
2、配置NFS服務的配置文件,并在本地查看掛在信息
[root@yu61 ~]# vim /etc/exports
[root@yu61 ~]# cat /etc/exports
/data 192.168.1.0/24 (rw,sync)
[root@yu61 ~]# exportfs -rv
exporting 192.168.1.0/24:/data
exporting *:/data
[root@yu61 ~]# df -h
Filesystem ?????Size ?Used Avail Use% Mounted on
/dev/sr0 ???????3.6G ?3.6G ????0 100% /mnt
[root@yu61 ~]# mount -t nfs 192.168.1.61:/data/ /mnt/
[root@yu61 ~]# df -h
Filesystem ??????????Size ?Used Avail Use% Mounted on
/dev/sr0 ?????????????20G ?4.6G ??14G ?26% /mnt
192.168.1.61:/data/ ??20G ?4.6G ??14G ?26% /mnt
3、客戶端安裝rpcbind
[root@yu63 ~]# yum install rpcbind nfs-utils -y ?
[root@yu63 ~]# /etc/init.d/rpcbind status
rpcbind (pid ?1695) 正在運行...
[root@yu63?~]# echo "/etc/init.d/rpcbind start" >> /etc/rc.local
[root@yu63?~]# echo "/bin/mount -t nfs 192.168.1.61:/data /mnt " >> /etc/rc.local
[root@yu63?~]# tail -2 /etc/rc.local
tail: inotify cannot be used, reverting to polling
/etc/init.d/rpcbind start
/bin/mount -t nfs 192.168.1.61:/data /mnt
[root@yu63 ~]# showmount -e 192.168.1.61
Export list for 192.168.1.61:
/data (everyone)
4、掛在服務端的共享文件
[root@yu63 ~]# mount -t nfs 192.168.1.61:/data /mnt
[root@yu63 ~]# df -h
Filesystem ?????????Size ?Used Avail Use% Mounted on
hm
/dev/sda1 ??????????4.9G ?162M ?4.5G ??4% /boot
/dev/sr0 ????????????20G ?4.6G ??14G ?26% /mnt
192.168.1.61:/data ??20G ?4.6G ??14G ?26% /mnt
[root@yu63 ~]# mount
.........
192.168.1.61:/data on /mnt type nfs (rw,vers=4,addr=192.168.1.61,clientaddr=192.168.1.63)
5、測試讀寫數據
[root@yu63?~]#?ls /mnt
a.txt ??shoadow
[root@yu63?~]#?mkdir /mnt/test
[root@yu63?~]#?ls /mnt
a.txt shoadow test
[root@yu61 ~]#?ls /mnt
a.txt ??shoadow ??test
?
附件:
NFS常用路徑 | 說明 |
/etc/exports | NFS服務的主配置文件。 |
/usr/sbin/exports | NFS的管理命令,可以加載NFS配置生效等 |
/usr/sbin/showmount | 用來客戶端查看NFS配置及掛在結果命令 |
/var/lib/nfs/etab | NFS配置文件的完整參數設定文件 |
/pro/mounts | 客戶端掛在參數 |
/vae/lib/nfs/rmtab | 客戶端訪問服務器exports的信息列表 |
?
?
?
?
?
總結
以上是生活随笔為你收集整理的NFS网络文件共享存储服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 市场份额十年来首次跌破
- 下一篇: 别跟我这交活儿