您好,登錄后才能下訂單哦!
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的信息列表 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。