服務(wù)部署-NFS服務(wù)器
目錄
NFS協(xié)議
1.1 工作原理
1.2 激活NFS服務(wù)
1.3 各個版本之間的比較
NFS服務(wù)
2.1 安裝NFS服務(wù)
2.2 服務(wù)文件配置
實戰(zhàn)演示
一、NFS 協(xié)議
NFS服務(wù)工作在
TCP的2049端口,UDP的2049端口。
NFS是Network File System的縮寫,即網(wǎng)絡(luò)文件系統(tǒng),是一種使用于分散式文件系統(tǒng)的協(xié)定。功能是通過網(wǎng)絡(luò)讓不同的機器、不同的操作系統(tǒng)能夠彼此分享個別的數(shù)據(jù),讓應(yīng)用程序在客戶端通過網(wǎng)絡(luò)訪問位于服務(wù)器磁盤中的數(shù)據(jù),是在類Unix系統(tǒng)間實現(xiàn)磁盤文件共享的一種方法。
這個NFS服務(wù)器可以讓你的PC來將網(wǎng)絡(luò)遠程的NFS服務(wù)器分享的目錄,掛載到本地端的機器當(dāng)中, 在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區(qū)槽一樣。
1.1 工作原理
因為 NFS 支持的功能相當(dāng)?shù)亩啵煌墓δ芏紩褂貌煌某绦騺韱樱?每啟動一個功能就會啟用一些端口來傳輸數(shù)據(jù),因此, NFS 的功能所對應(yīng)的端口才沒有固定住, 而是隨機取用一些未被使用的小于 1024 的端口來作為傳輸之用。但如此一來又造成客戶端想要連上服務(wù)器時的困擾, 因為客戶端得要知道服務(wù)器端的相關(guān)端口才能夠聯(lián)機吧!
NFS在文件傳送或信息傳送過程中依賴于RPC協(xié)議。RPC,即遠程過程調(diào)用的縮寫,是能使客戶端執(zhí)行其他系統(tǒng)中程序的一種機制。RPC 最主要的功能就是在指定每個 NFS 功能所對應(yīng)的端口號,并且回報給客戶端,讓客戶端可以連接到正確的端口上去。
NFS本身是沒有提供信息傳輸?shù)膮f(xié)議和功能的,但NFS卻能讓我們通過網(wǎng)絡(luò)進行資料的分享,這是因為NFS使用了一些其它的傳輸協(xié)議。而這些傳輸協(xié)議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序,或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啟動RPC服務(wù),不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現(xiàn)PROGRAM PORT的對應(yīng)。可以這么理解RPC和NFS的關(guān)系:NFS是一個文件系統(tǒng),而RPC是負(fù)責(zé)負(fù)責(zé)信息的傳輸。
事實上,有很多這樣的服務(wù)器都是向 RPC 注冊的,舉例來說,NIS (Network Information Service) 也是 RPC server 的一種。

那RPC又是如何知道每個NFS的端口呢?
這是因為當(dāng)服務(wù)器在啟動 NFS 時會隨機取用數(shù)個端口,并主動的向 RPC 注冊,因此 RPC 可以知道每個埠口對應(yīng)的 NFS 功能,然后 RPC 又是固定使用 111 端口來監(jiān)聽客戶端的需求并報客戶端正確的埠口, 所以當(dāng)然可以讓 NFS 的啟動更為輕松愉快了。 所以你要注意,要啟動 NFS 之前,RPC 就要先啟動了,否則 NFS 會無法向 RPC 注冊。另外,RPC 若重新啟動時,原本注冊的數(shù)據(jù)會不見,因此 RPC 重新啟動后,它管理的所有服務(wù)都要重新啟動來重新向 RPC 注冊。
那客戶端如何向NFS服務(wù)端交換數(shù)據(jù)數(shù)據(jù)呢?
(1) 客戶端會向服務(wù)器端的 RPC 的111端口發(fā)出 NFS 檔案存取功能的詢問要求 (2) 服務(wù)器端找到對應(yīng)的已注冊的 NFS 守護進程端口后,會回報給客戶端 (3) 客戶端了解正確的端口后,就可以直接與 NFS 守護進程來聯(lián)機
1.2 激活 NFS 服務(wù)
NFS服務(wù)需要激活幾個重要的RPC守護進程
工作流程
nfs—client => portmapper => mountd => nfs-server(nfsd)

(1) rpc.nfsd
這個守護進程主要的功能,則是在管理客戶端是否能夠登入主機的權(quán)限,其中還包含這個登入者的 ID 的判別。
(2) rpc.mountd
主要功能
這個守護進程主要的功能,則是在管理 NFS的檔案系統(tǒng),用于給用戶提供訪問令牌。訪問的令牌,由本地的RPC提供隨機端口。本地的RPC叫做 portmapper,可以使用rpcinfo -P查看。RPC的 portmapper服務(wù)工作在1111端口。
請求過程
當(dāng)客戶端順利的通過
rpc.nfsd而登入主機之后,在它可以使用NFS server提供的檔案之前,還會經(jīng)過檔案使用權(quán)限 的認(rèn)證程序,就是那個-rwxrwxrwx、owner、group那幾個權(quán)限啦。然后它會去讀
NFS的設(shè)定檔/etc/exports來比對客戶端的權(quán)限,當(dāng)通過這一關(guān)之后,客戶端就可以取得使用NFS檔案的權(quán)限啦。
注釋:NFS需要有兩個套件
nfs-utils
NFS服務(wù)的主要套件
提供rpc.nfsd和rpc.mountd兩個NFS守護進程和與其它相關(guān)文檔與說明文件、執(zhí)行檔等的套件
portmap
主要負(fù)責(zé)RPC端口和守護進程的映射關(guān)系,即portmapper
在激活任何一個RPC server之前,我們都需要激活portmapper才行
1.3 各個版本之間的比較
NFS是一種網(wǎng)絡(luò)文件系統(tǒng),從1985年推出至今,共發(fā)布了3個版本:NFSv2、NFSv3、NFSv4,NFSv4包含兩個次版本NFSv4.0和NFSv4.1。經(jīng)過20多年發(fā)展,NFS發(fā)生了非常大的變化,最大的變化就是推動者從Sun變成了NetApp,NFSv2和NFSv3基本上是Sun起草的,NetApp從NFSv4.0參與進來,并且主導(dǎo)了NFSv4.1標(biāo)準(zhǔn)的制定過程,而Sun已經(jīng)被Oracle收購了。

1. NFSv2
·NFSv2·是第一個以 RFC形式發(fā)布的版本,實現(xiàn)了基本的功能。
2. NFSv3
協(xié)議特點
NFSv3修正了NFSv2的一些bug,兩者有如下一些差別,但是感覺沒有本質(zhì)的差別。
區(qū)別差別
(1)
NFSv2只支持同步寫,如果客戶端向服務(wù)器端寫入數(shù)據(jù),服務(wù)器必須將數(shù)據(jù)寫入磁盤中才能發(fā)送應(yīng)答消息。NFSv3支持異步寫操作,服務(wù)器只需要將數(shù)據(jù)寫入緩存中就可以發(fā)送應(yīng)答信息了。(2)
NFSv3增加了ACCESS請求,ACCESS用來檢查用戶的訪問權(quán)限。因為服務(wù)器端可能進行uid映射,因此客戶端的uid和gid不能正確反映用戶的訪問權(quán)限。(3) 一些請求調(diào)整了參數(shù)和返回信息,畢竟
NFSv3和NFSv2發(fā)布的間隔有6年,經(jīng)過長期運行可能覺得NFSv2某些請求參數(shù)和返回信息需要改進。
3. NFSv4.0
協(xié)議特點
相比
NFSv3,NFSv4發(fā)生了比較大的變化,最大的變化是NFSv4有狀態(tài)了。NFSv2和NFSv3都是無狀態(tài)協(xié)議,服務(wù)區(qū)端不需要維護客戶端的狀態(tài)信息。無狀態(tài)協(xié)議的一個優(yōu)點在于災(zāi)難恢復(fù),當(dāng)服務(wù)器出現(xiàn)問題后,客戶端只需要重復(fù)發(fā)送失敗請求就可以了,直到收到服務(wù)器的響應(yīng)信息。
區(qū)別差別
(1) NFSv4增加了安全性,支持RPCSEC-GSS身份認(rèn)證。
(2) NFSv4設(shè)計成了一種有狀態(tài)的協(xié)議,自身實現(xiàn)了文件鎖功能和獲取文件系統(tǒng)根節(jié)點功能。
(3) NFSv4只提供了兩個請求NULL和COMPOUND,所有的操作都整合進了COMPOUND中,客戶端可以根據(jù)實際請求將多個操作封裝到一個COMPOUND請求中,增加了靈活性。
(4) NFSv4文件系統(tǒng)的命令空間發(fā)生了變化,服務(wù)器端必須設(shè)置一個根文件系統(tǒng)(fsid=0),其他文件系統(tǒng)掛載在根文件系統(tǒng)上導(dǎo)出。
(5) NFSv4支持delegation。由于多個客戶端可以掛載同一個文件系統(tǒng),為了保持文件同步,NFSv3中客戶端需要經(jīng)常向服務(wù)器發(fā)起請求,請求文件屬性信息,判斷其他客戶端是否修改了文件。如果文件系統(tǒng)是只讀的,或者客戶端對文件的修改不頻繁,頻繁向服務(wù)器請求文件屬性信息會降低系統(tǒng)性能。NFSv4可以依靠delegation實現(xiàn)文件同步。
(6) NFSv4修改了文件屬性的表示方法。由于NFS是Sun開發(fā)的一套文件系統(tǒng),設(shè)計之出NFS文件屬性參考了UNIX中的文件屬性,可能Windows中不具備某些屬性,因此NFS對操作系統(tǒng)的兼容性不太好。
4. NFSv4.1
與
NFSv4.0相比,NFSv4.1最大的變化是支持并行存儲了。在以前的協(xié)議中,客戶端直接與服務(wù)器連接,客戶端直接將數(shù)據(jù)傳輸?shù)椒?wù)器中。當(dāng)客戶端數(shù)量較少時這種方式?jīng)]有問題,但是如果大量的客戶端要訪問數(shù)據(jù)時,
NFS服務(wù)器很快就會成為一個瓶頸,抑制了系統(tǒng)的性能。NFSv4.1支持并行存儲,服務(wù)器由一臺元數(shù)據(jù)服務(wù)器(MDS)和多臺數(shù)據(jù)服務(wù)器(DS)構(gòu)成,元數(shù)據(jù)服務(wù)器只管理文件在磁盤中的布局,數(shù)據(jù)傳輸在客戶端和數(shù)據(jù)服務(wù)器之間直接進行。由于系統(tǒng)中包含多臺數(shù)據(jù)服務(wù)器,因此數(shù)據(jù)可以以并行方式訪問,系統(tǒng)吞吐量迅速提升。
二、NFS 服務(wù)
CentOS7以NFSv4作為默認(rèn)版本,NFSv4使用TCP協(xié)議(端口號是2049)和NFS服務(wù)器建立連接。
# 系統(tǒng)環(huán)境
系統(tǒng)平臺:CentOS release 7.0 (Final)
NFS Server IP:192.168.10.10
防火墻已關(guān)閉/iptables: Firewall is not running.
SELINUX=disabled
2.1 安裝 NFS 服務(wù)
服務(wù)端
服務(wù)端,程序包名 nfs-utils、rpcbind,默認(rèn)都已經(jīng)安裝了可以通過 rpm -ql nfs-utils查看幫助文檔等信息
客戶端
客戶端,需要安裝程序包名 nfs-utils,提供基本的客戶端命令工具
[root@localhost ~]# yum install nfs-utils
Loaded plugins: langpacks, product-id, subscription-manager
......
Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
Nothing to do
查看NFS服務(wù)端口
NFS啟動時會隨機啟動多個端口并向 RPC注冊,為了方便配置防火墻,需要固定NFS服務(wù)端口。這樣如果使用 iptables對NFS端口進行限制就會有點麻煩,可以更改配置文件固定NFS服務(wù)相關(guān)端口分配端口,編輯配置文件 /etc/sysconfig/nfs
# 使用rpcinfo -P會發(fā)現(xiàn)rpc啟動了很多監(jiān)聽端口
[root@localhost ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 49979 mountd
100005 1 tcp 58393 mountd
100003 2 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
......
# 添加如下
[root@localhost ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
啟動服務(wù)
[root@localhost ~]# service nfs start
Starting NFS services: [OK]
Starting NFS quotas: [OK]
Starting NFS mountd: [OK]
Starting NFS daemon: [OK]
Starting NFS idmapd: [OK]
2.2 服務(wù)文件配置
相關(guān)文件和命令

配置文件/etc/exports
我們可以按照“共享目錄的路徑 允許訪問的 NFS 客戶端(共享權(quán)限參數(shù))”的格式,定義要共享的目錄與相應(yīng)的權(quán)限

[root@localhost ~]# cat /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash)
/tmp/serverdir 192.168.174.132(rw,sync,no_root_squash) 192.168.174.133(ro,sync,no_root_squash)
三、實戰(zhàn)演示
如果有興趣,可以嘗試:兩臺 web 服務(wù)器,共享關(guān)系型數(shù)據(jù)庫,共享 NFS 服務(wù)器,利用 DNS 記錄輪詢提供負(fù)載均衡。
第 1 步:機器設(shè)置
創(chuàng)建服務(wù)端和客戶端 關(guān)閉 iptables和selinux服務(wù)
| 主機名稱 | 操作系統(tǒng) | IP地址 |
|---|---|---|
| NFS服務(wù)端 | RHEL 7 | 192.168.10.10 |
| NFS客戶端 | RHEL 7 | 192.168.10.20 |
# 清空NFS服務(wù)器上面iptables防火墻的默認(rèn)策略,以免默認(rèn)的防火墻策略禁止正常的NFS共享服務(wù)
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
第 2 步:創(chuàng)建共享目錄
在 NFS服務(wù)器上,建立用于NFS文件共享的目錄在NFS服務(wù)器上,設(shè)置足夠的權(quán)限確保其他人也有寫入權(quán)限
[root@localhost ~]# mkdir /nfsfile
[root@localhost ~]# chmod -Rf 777 /nfsfile
[root@localhost ~]# echo "welcome to localhost.com" > /nfsfile/readme
第 3 步:編輯配置文件/etc/exports
定義要共享的目錄與相應(yīng)的權(quán)限 請注意,NFS 客戶端地址與權(quán)限之間沒有空格
# 把/nfsfile目錄共享給192.168.10.0/24網(wǎng)段內(nèi)的所有主機,讓這些主機都擁有讀寫權(quán)限
[root@localhost ~]# vim /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash)
第 4 步:啟動和啟用 NFS 服務(wù)程序
在啟動NFS服務(wù)之前,還需要順帶重啟并啟用 rpcbind服務(wù)程序,并將這兩個服務(wù)一并加入開機啟動項中
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
第 5 步:NFS 客戶端的配置
使用 showmount命令查詢NFS服務(wù)器的遠程共享信息showmount命令輸出格式為“共享的目錄名稱 允許使用客戶端地址”
showmount命令
| 參數(shù) | 作用 |
|---|---|
| -e | 顯示NFS服務(wù)器的共享列表 |
| -a | 顯示本機掛載的文件資源的情況NFS資源的情況 |
| -v | 顯示版本號 |
exportfs命令
維護exports文件導(dǎo)出的文件系統(tǒng)表的專用工具,可以修改配置之后不重啟NFS服務(wù) export -ar:重新導(dǎo)出所有的文件系統(tǒng)export -au:關(guān)閉導(dǎo)出的所有文件系統(tǒng)export -u FS: 關(guān)閉指定的導(dǎo)出的文件系統(tǒng)
# 查看NFS服務(wù)器端共享的文件系統(tǒng)
# showmount -e NFSSERVER_IP
[root@localhost ~]# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/nfsfile 192.168.10.*
# NFS客戶端創(chuàng)建一個掛載目錄,掛載服務(wù)端NFS文件系統(tǒng)到本地
# mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point
[root@localhost ~]# mkdir /nfsfile
[root@localhost ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile
# 掛載成功后就應(yīng)該能夠順利地看到在執(zhí)行前面的操作時寫入的文件內(nèi)容了
[root@localhost ~]# cat /nfsfile/readme
welcome to linuxprobe.com
# 如果希望NFS文件共享服務(wù)能一直有效,則需要將其寫入到fstab文件中
# SERVER:/PATH/TO/EXPORTED_FS /mount_point nfs defaults,_netdev 0 0
[root@localhost ~]# vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0
文章作者: Escape
鏈接: https://escapelife.github.io/posts/c49dfbab.html
整理:微信公眾號【開源Linux】
關(guān)注「開源Linux」加星標(biāo),提升IT技能


