1. 程式人生 > >NFS網絡文件系統原理及案例

NFS網絡文件系統原理及案例

NFS 菜鳥

從現在開始我決定把我所學的知識以博客的形式分享給大家,希望對和我一樣的菜鳥,同時夢想成為一只老鳥的IT小夥伴有一定的幫助!而對於我而言,這本身也是一種學習呢!好了廢話不多說,我們開始進入主題;
我們人在接觸一個新事物或者是一個新技一個新技術的時候,我們往往想到的第一個問題就是“這是什麽呀?”或者“這是幹什麽的呀?”
那麽NFS網絡文件系統到底是一個什麽東西,它的作用又是什麽,我們在這裏圍繞這兩個問題進行討論;

1、什麽是NFS

NFS是Network File System的縮寫中文名網絡文件系統,它的主要功能就是通過網絡讓不同的機器系統之間可以彼此共享文件或目錄,NFS客戶端可以通過掛載(mount)的方式將NFS服務器共享的目錄掛載到本地,在NFS客戶端看來就像是訪問自己本地的目錄或分區一樣;

下面是我在網上找的NFS掛載流程圖; -- 如圖,NFS客戶端共享自身/home/sharefile這個目錄,客戶端1和客戶端2將NFS服務器共享的目錄/home/sharefile掛載到本機 ---在這裏我們可以理解成Windows7裏邊的共享目錄,然後通過網絡映射的方式映射到本地
技術分享圖片

2、NFS的用作

NFS的作用是用來存放數據的,一般來說他的客戶端就是應用服務器如web,NFS在工作場景中一般用來存儲靜態文件(如圖片,視頻,附件等)是當前互聯網最長見的數據存
那麽在實際架構中如果沒有NFS服務器到底行不行呢?我們在這裏簡單的舉一個例子與大家分享,以此來突出NFS服務的作用;
技術分享圖片
這是我用思科模擬器簡單的畫的一個圖,方便大家理解;
如圖:我們先假設這就是騰訊qq的服務器,當小明在客戶端A通過qq空間發布了一條帶圖片的說說,這時候會通過路由器把這條說說交給負載均衡調度器,調度器通過自身的一個算法,分配一臺服務器來響應這個請求,假設把這個請求分配到了服務器A,那麽這時候這條說說的圖片也就存在了WEB服務A裏邊,

這時候小明和小紅正好是qq好友,小紅這時候通過客戶端B要去訪小明發的說說,咦!很奇怪,訪問不到,怎麽回事呢?原來這次調度在分配請求的時候將小紅的請求分配給了WEB服務B,所以訪問不到,那這時候如果WEB服務器A和WEB服務器B將NFS服務器共享的目錄都掛載到本地,那麽這時候小明在上傳圖片的時候,不管調度器把請求分配到哪一臺WEB服務器,這時候WEB服務器都會把這張圖片上傳到NFS服務器;所以這時候小紅在去訪問這條說說的時候就可以順利的看到圖片啦!!!!
在了解完什麽是NFS服務和NFS的作用之後,我們總得知道NFS客戶端與NFS服務端是怎麽建立連接,進行通信的吧!在這裏也做一個簡單描述;
技術分享圖片
為了節約點時間我就在word上簡單的畫了一個圖,方便大家理解記憶;
在理解通信流程之前我們首先要知道,NFS的端口號是不固定的,每次連接都會隨機的分配一個小於1024的端口
首先服務端在開啟NFS服務的時候會將自己的端口和其他信息註冊到RPC服務裏邊,然後客戶端的RPC(默認端口號:111)服務會通過TCP/IP協議向客戶端發起請求,說我要連接到NFS服務器,請給我端口號,這時候服務器收到請求後,服務端的RPC服務就會通過TCP/IP協議把已經註冊好的NFS端口信息發送給客戶端的RPC服務,客戶端收到端口信息後直接與NFS進行連接;在這裏我們可以吧RPC服務理解成一個中介,當客戶端需什麽商品的時候就會想RPC索取,NFS就像是廠家,把自己所有的商品信息都註冊給RPC服務;
最後我們來看看NFS是如何實現的吧!這裏通過案例的形式與大家分享;重點註意配置的細節!!!!
server端配置:
[root@server 桌面]# cat /etc/redhat-release------------------>查看系統版本
CentOS release 6.5 (Final)
[root@server 桌面]# uname -r---------------------->查看內核
2.6.32-431.el6.x86_64
[root@server 桌面]# uname -m ---------------查看是多少位的系統
x86_64

[root@server 桌面]# rpm -qa | egrep "rpcbind|nfs"------------>查看系統有沒有安裝rpcbind和nfs軟件(如果沒有 可以用 yum install rpcbind nfs -y進行安裝)這裏我們可以看到已經安裝
nfs-utils-1.2.3-39.el6.x86_64
nfs4-acl-tools-0.3.3-6.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
rpcbind-0.2.0-11.el6.x86_64
[root@server 桌面]# /etc/init.d/rpcbind status-------->查看RPC是否已經運行
rpcbind (pid 1576) 正在運行...
[root@server 桌面]# /etc/init.d/nfs status--------查看NFS是否已經運行
rpc.svcgssd 已停
rpc.mountd 已停
nfsd 已停
rpc.rquotad 已停
在這裏我們要註意rpc和NFS的一個啟動順序,必須要在確保RPC啟動的情況下才可啟動nfs,因為nfs在啟動的時候要向RPC服務進行註冊自己端口信息;
[root@server 桌面]# /etc/init.d/nfs start----------------啟動NFS服務
啟動 NFS 服務: [確定]
關掉 NFS 配額: [確定]
啟動 NFS mountd: [確定]
啟動 NFS 守護進程: [確定]
正在啟動 RPC idmapd: [確定]
[root@server 桌面]# rpcinfo -p localhost--------------------->我們可以使用rpcinfo查看nfs註冊的信息
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 59901 status
100024 1 tcp 54732 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
[root@server 桌面]# vim /etc/exports----------->編輯配置文件,我們可以看到打開什麽都沒有;
格式:共享的目錄 共享客戶端的網段(參數)
/mnt/test 172.20.10.0/24(rw,sync)---->註意沒有空格,括號內是英文的逗號
[root@server 桌面]# chown nfsnobody:nfsnobody /mnt/test/ -----> 把文件的屬主改成nfsnobody,因為NFS系統默認使用這個用戶進行上傳文件
[root@server 桌面]# /etc/init.d/nfs reload---------->使用reload讓配置文件生效,平滑重啟
[root@server 桌面]# showmount -e 172.20.10.13-------->可以使用showmount 進行查看共享了哪些目錄
Export list for 172.20.10.13:
/mnt/test 172.20.10.0/24
客戶端配置;
[root@client 桌面]# rpm -qa|grep rpcbind---->查看RPC安裝情況如沒有也可用yum install rpcbind -y 安裝
rpcbind-0.2.0-11.el6.x86_64
[root@client 桌面]# /etc/init.d/rpcbind status---查看運行狀態(客戶端只需要開啟RPC服務,如果沒有看起用/etc/init.d/rpcbind start開啟服務)
rpcbind (pid 1646) 正在運行..
[root@client 桌面]# mount -t nfs 172.20.10.13:/mnt/test /test --->用mount將服務器共享的目錄掛載到本地掛載完成之後可以用df -h進行查看掛載情況
這時候我們可以在客戶端的、/test目錄裏邊創建一個文件touch aa 然後到服務端裏的/mnt/test用ls -l 查看發現同樣也會存在一個文件aa這時候我們的nfs文件系統就配置完成了
更多關於NFS的一些配置參數可以使用man nfs 尋求在線幫助;

NFS網絡文件系統原理及案例