RHCE_NFS

1.什麼是NFS服務器
NFS就是Network File System的縮寫,它最大的功能就是可以通過網絡,讓不同的機器、不同的操作系統可以共享彼此的文件。
NFS服務器可以讓PC將網絡中的NFS服務器共享的目錄掛載到本地端的文件系統中,而在本地端的系統中來看,那個遠程主機的目錄就好像是自己的一個磁盤分區一樣,在使用上相當便利;

同一掛載點可以連接多個設備 /mnt/sr0 /dev/sda5
一個設備可以連接多個掛載點

2.NFS掛載原理
NFS服務器的掛載結構圖:

在這裏插入圖片描述
當我們在NFS服務器設置好一個共享目錄/home/public後,其他的有權訪問NFS服務器的NFS客戶端就可以將這個目錄掛載到自己文件系統的某個掛載點,這個掛載點可以自己定義,如上圖客戶端A與客戶端B掛載的目錄就不相同。並且掛載好後我們在本地能夠看到服務端/home/public的所有數據。如果服務器端配置的客戶端只讀,那麼客戶端就只能夠只讀。如果配置讀寫,客戶端就能夠進行讀寫。掛載後,NFS客戶端查看磁盤信息命令:#df –h。
既然NFS是通過網絡來進行服務器端和客戶端之間的數據傳輸,那麼兩者之間要傳輸數據就要有想對應的網絡端口,NFS服務器到底使用哪個端口來進行數據傳輸呢?基本上NFS這個服務器的端口開在2049,但由於文件系統非常複雜。因此NFS還有其他的程序去啓動額外的端口,這些額外的用來傳輸數據的端口是隨機選擇的,是小於1024的端口 ;既然是隨機的那麼客戶端又是如何知道NFS服務器端到底使用的是哪個端口呢?這時就需要通過遠程過程調用(Remote Procedure Call,RPC)協議來實現了.RPC服務(portmap 或rpcbind服務)

3.什麼是rpc服務
RPC(Remote Procedure Call)即遠程過程調用。RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,並且回報給客戶端,讓客戶端可以連結到正確的port上去

NFS通訊原理
RPC與NFS如何通訊
因爲NFS支持的功能相當多,而不同的功能都會使用不同的程序來啓動,每啓動一個功能就會啓用一些端口來傳輸數據,因此NFS的功能對應的端口並不固定,客戶端要知道NFS服務器端的相關端口才能建立連接進行數據傳輸,而RPC就是用來統一管理NFS端口的服務,並且統一對外的端口是111,RPC會記錄NFS端口的信息,如此我們就能夠通過RPC實現服務端和客戶端溝通端口信息。PRC最主要的功能就是指定每個NFS功能所對應的port number,並且通知客戶端,讓客戶端可以連接到正常端口上去。
那麼RPC又是如何知道每個NFS功能的端口呢?
首先當NFS啓動後,就會隨機的使用一些端口,然後NFS就會向RPC去註冊這些端口,RPC就會記錄下這些端口,並且RPC會開啓111端口,等待客戶端RPC的請求,如果客戶端有請求,那麼服務器端的RPC就會將之前記錄的NFS端口信息告知客戶端。如此客戶端就會獲取NFS服務器端的端口信息,就會以實際端口進行數據的傳輸了。
提示:在啓動NFS SERVER之前,首先要啓動RPC服務(即portmap服務,下同)否則NFS SERVER就無法向RPC服務區註冊,另外,如果RPC服務重新啓動,原來已經註冊好的NFS端口數據就會全部丟失。因此此時RPC服務管理的NFS程序也要重新啓動以重新向RPC註冊。特別注意:一般修改NFS配置文檔後,是不需要重啓NFS的,直接在命令執行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。

portmap:
功能:主要是把RPC程序號轉化爲Internet的端口號。
特點:只在第一次建立連接時候幫助網絡應用程序找到正確的port,當雙方正確連接時,端 口就和應用綁定,portmap就無用。相當於媒婆。
RPC:Remote Procedure Call,遠程過程調用,如NFS
如:window—服務–
如打印機,是由你計算機上對應的程序去調用打印機上相應的程序來進行工作的。

4.NFS客戶端和NFS服務端通訊過程

1)首先服務器端啓動RPC服務,並開啓111端口
2)服務器端啓動NFS服務,並向RPC註冊端口信息
3)客戶端啓動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS端口
4)服務端的RPC(portmap)服務反饋NFS端口信息給客戶端。
5)客戶端通過獲取的NFS端口來建立和服務端的NFS連接並進行數據的傳輸。

a.執行順序:1(註冊端口)–2(達成協議)-3(直接建立聯繫)–4(達成協議)–5(建立連接)

NFS服務的優缺點
1)優點

a.節省本地存儲空間將常用的數據存放在一臺服務器可以通過網絡訪問
b.簡單容易上手
c.方便部署非常快速,維護十分簡單

2)缺點

a.侷限性容易發生單點故障,及server機宕機了所有客戶端都不能訪問
b.在高併發下NFS效率/性能有限
c.客戶端沒用用戶認證機制,且數據是通過明文傳送,安全性一般(一般建議在局域網內使用)
d.NFS的數據是明文的,對數據完整性不做驗證
e.多臺機器掛載NFS服務器時,連接管理維護麻煩

部署:
要部署NFS服務,必須安裝下面兩個軟件包:nfs-utils:NFS主程序,rpcbind:PRC主程序
1.查看NFS軟件包

#rpm -qa | egrep  "nfs|rpcbind"      grep -E
libnfsidmap-0.25-12.el7.x86_64
rpcbind-0.2.0-32.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64

1)進程

rpc.nfsd        NFS守護進程
rpc.mountd        管理文件系統和權限                 

rpcinfo實用工具顯示那些使用portmap註冊的程序的信息,並向程序進行RPC調用,檢查它們是否正常運行。

[root@localhost 桌面]# rpcinfo -p localhost
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
[root@localhost 桌面]# lsof -i:111

注:rpcbind安裝成功後默認已經開啓,並且爲開機自動啓動。如果沒有啓動的話,我們來重新啓動rcpbind服務

[root@localhost ~]# systemctl restart  nfs

lsof (list open files)是一個列出當前系統打開文件的工具

命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。

nfs服務所開啓的端口號 
NFS常見進程詳解    ps           aux

1)進程
nfsd最主要的NFS服務提供程序,這個daemon主要的功能就是管理客戶端是否能夠使用服務器文件系統掛載信息,其中還包含判斷這個登錄用戶的ID。
rpc.mountd
這個daemon主要功能則是管理NFS的文件系統。當client端順利通過rpc.nfsd登入主機後,在它可以使用NFS服務器提供規定文件之前,還會經過文件使用權限的認證程序。它會去讀取NFS的配置  文件/etc/exports來對比客戶端的權限,當通過這一關之後,client端也就取得使用NFS文件的權限。
rpc.statd(非必要)
這個daemon可以用來檢查文件的一致性,若發生因爲客戶端同時使用同一個文件造成文件損壞時,rpc.statd可以用來檢測並嘗試恢復該文件

2)常用目錄和文件

/etc/exports
/usr/sbin/exportfs
/usr/sbin/showmount
/var/lib/nfs/*tab
etab        記錄NFS分享出來的目錄的完整權限設定值
xtab        記錄曾經鏈接到此NFS主機的相關客戶端數據

3)配置文件

/etc/exports

格式
共享目錄 客戶端(選項)--------(訪問權限,用戶映射,其他) rwx u+s g+s o+t
輸出目錄: 需要共享的目錄路徑
客戶端: 服務的用戶對象
選項: 共享的權限,緊跟客戶端列

4、客戶端
指定ip地址的主機:192.168.171.144
指定子網中的所有主機:192.168.171.0/24, 192.168.171.0/255.255.255.0
指定域名的主機:www.baidu.com
指定域中的所有主機:*.baidu.com
所有主機: i 張三 李四 S

5、選項
S
/test/1 root root

訪問權限選項:

rw	               表示可讀寫
ro	               Read-only表示只能讀權限
sync	           請求或者寫入數據時,數據同步寫入到NFS server的硬盤中後纔會返回
no_root_squash	   訪問nfs server共享目錄的用戶如果是root的話,它對該目錄具有root權限。這個配置原本爲無盤用戶準備的。用戶應避免使用!
root_squash	       允許root身份映射
all_squash  no_all_squash  不管訪問nfs server共享目錄的用戶身份如何包括root,它的權限都將被壓縮成爲匿名用戶,同時他們的udi和gid都會變成nobody或nfsnobody賬戶的uid,gid。在多個nfs客戶端同時讀寫nfs server數據時,這個參數很有用可以確保大家寫入的數據的權限是一樣的。但不同系統有可能匿名用戶的uid,gid不同。因爲此處我們需要服務端和客戶端之間的用戶是一樣的。比如說:服務端指定匿名用戶的UID爲2000,那麼客戶端也一定要存在2000這個賬號纔可以
anonuid	anonuid    就是匿名的uid和gid。說明客戶端以什麼權限來訪問服務端,在默認情況下是nfsnobody。Uid65534.
anongid	           同anongid,就是把uid換成gid而已

其他選項:

atime 在每一次數據訪問是,同步更新每次的訪問的inode的時間,默認是atime,在高併發的情況下,建議加上noatime來取消默認這個選項,以達到IO,優化目的,autofs 能夠被自動掛載
******defaults 這是缺省值,rw,suid,dev,exec,auto,nouser,async 
exec  運行可以執行二進制文件,取消這個參數會提升系統安全性
nodiratime 不更新文件系統上的directory inode訪問時間,高併發時候建議使用此選型
noauto  不自動掛載
noexec  即使設置了noexec shell php 程序還是可以執行
nosuid 禁止已給普通用戶掛載文件系統
secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置);
insecure:允許客戶端從大於1024的tcp/ip端口連接服務器;
sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但可以保證數據的一致性;
async:將數據先保存在內存緩衝區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章