👨?🎓博主簡介
??🏅CSDN博客專家
??🏅云計算領域優質創作者
??🏅華為云開發者社區專家博主
??🏅阿里云開發者社區專家博主
💊交流社區:運維交流社區 歡迎大家的加入!
🐋 希望大家多多支持,我們一起進步!😄
🎉如果文章對你有幫助的話,歡迎 點贊 👍🏻 評論 💬 收藏 ?? 加關注+💗
文章目錄
- 一、NFS簡介與RPC簡介
- 1. NFS服務簡介
- 2. RPC協議簡介
- 3. NFS工作流程
- 二、準備工作
- 2.1 服務器信息
- 2.2 防火墻配置
- 2.3 selinux沙盒
- 三、部署 NFS 和 RPC 服務
- 四、配置共享目錄
- 五、掛載共享目錄及配置永久掛載
一、NFS簡介與RPC簡介
1. NFS服務簡介
NFS是一種網絡協議,NFS依賴RPC才能工作。(RHEL5.0上是NFS V3而RHEL6.0上是NFS V4)
NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立于操作系統,容許不同硬件及操作系統的系統共同進行文件的分享。
NFS在文件傳送或信息傳送過程中依賴于RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以這么理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責信息的傳輸。
2. RPC協議簡介
RPC(Remote Procedure Call)遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。其工作在TCP/UDP的111端口。建立在Socket之上的,主要是簡化編程的工作在底層提供網絡之間的通信。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
RPC遠程過程調度:
- NFS 協議本身并沒有網絡傳輸功能,而是基于遠程過程調用協議實現的
- 提供一個面向過程的遠程服務的接口
- 可以通過網絡從遠程主機程序上請求服務,而不需要了解底層網絡技術的協議
- 工作在 OSI 模型的會話層,它可以為遵從 RPC 協議應用層協議提供端口注冊功能
- 事實上,有很多服務(NFS 和 NIS 等)都可以向 RPC 注冊端口
- RPC 使用網絡端口 111 來監聽客戶端的請求
3. NFS工作流程
1.首先服務器端啟動RPC服務,并開啟111端口
2.然后還需要服務器端啟動NFS服務,并向RPC注冊端口信息
3.客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS端口
4.服務端的RPC(portmap)服務反饋NFS端口信息給客戶端。
5.客戶端通過獲取的NFS端口來建立和服務端的NFS連接并進行數據的傳輸。
- 掛載原理
??當我們在NFS服務器設置好一個共享目錄/opt 后,其他人是有權訪問/opt這個共享目錄的,NFS客戶端就可以將這個目錄掛載到自己文件系統的某個掛載點(這個掛載點可以自己定義),路徑不同也可以;如下圖客戶端A與客戶端B掛載的目錄就不相同。并且掛載好后我們在本地能夠看到服務端/opt下的所有數據。
二、準備工作
2.1 服務器信息
主機 | IP | 服務 | 端口 |
---|---|---|---|
服務端 | 172.16.11.201 | nfs、rpc | 2049、111 |
客戶端 | 172.16.11.202 | nfs、rpc | 2049、111 |
2.2 防火墻配置
- 關閉防火墻服務
# 關閉防火墻
systemctl stop firewalld
# 禁止防火墻開機自啟
systemctl disable firewalld
- 如果是必須要開啟防火墻,可以使用兩種方法,開端口或服務
# 開啟nfs和rpc服務
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
# 重載防火墻規則
firewall-cmd --reload
# 放行端口
# nfs端口為:2049、rpc端口為:111
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=111/udp
# 重載防火墻規則
firewall-cmd --reload
- 如果使用的是
iptables
防火墻,可以使用以下命令:
iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
2.3 selinux沙盒
# 臨時關閉
setenforce 0# 永久關閉
vim /etc/selinux/config# 將selinux=修改為disabled
修改配置文件永久生效要重啟服務器;
三、部署 NFS 和 RPC 服務
兩臺都安裝
yum install -y nfs-utils rpcbind# 啟動并設置開機自啟
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server
查看服務狀態
systemctl status nfs
systemctl status rpcbind
四、配置共享目錄
①、首先,在服務端需要確認好要掛載的共享目錄;這里我們要掛載的共享目錄為:/data/test/
,就需要先創建此目錄
# 服務端
mkdir -p /data/test
②、然后,需要確認好共享目錄要掛載到客戶端的哪個目錄上,這里就同目錄吧;
# 客戶端
mkdir -p /data/test
③、配置服務端NFS配置文件
NFS配置文件格式:共享目錄 [客戶端1(參數)] [客戶端2(參數)]
共享目錄:NFS服務器需要共享的實際路徑(絕對路徑);
客戶端:可以訪問共享目錄的服務器地址或網段。
- 客戶端常用形式:
客戶端 | 說明 |
---|---|
172.16.11.202 | 指定IP地址的主機 |
172.16.10.1/24 | 指定子網的所有主機 |
172.16.10.* | 指定子網的所有主機 |
www.xxx.com | 指定域名的主機 |
*.xxx.com | 指定域中的所有主機 |
* | 所有主機 |
vim /etc/exports/data/test *(rw,sync,no_root_squash)
解析:
參數 | 參數解析 |
---|---|
/data/test | 要共享的目錄 |
* | 要共享給誰,可以是網段,可以是ip,*代表是所有都可以共享 |
----括號內,NFS訪問權限參數---- | ---------------括號內,NFS訪問權限參數--------------- |
ro | 只讀 |
rw | 讀寫 |
sync | 同時將數據寫入到內存與硬盤中,保證不丟失數據 |
async | 優先將數據保存到內存,然后再寫入硬盤;效率更高,但可能會丟失數據 |
root_squash | 當NFS客戶端以root管理員訪問時,映射為NFS服務器的匿名用戶 |
no_root_squash | 當NFS客戶端以root管理員訪問時,映射為NFS服務器的root管理員 |
all_squash | 無論NFS客戶端使用什么賬戶訪問,均映射為NFS服務器的匿名用戶 |
no_all_squash | 保留共享文件的UID和GID(默認) |
④、重啟服務端NFS和RPC服務
systemctl restart nfs rpcbind
⑤、在客戶端查看NFS服務共享信息
showmount [選項] (參數/服務端IP)
-d:僅顯示已被NFS客戶端加載的共享目錄;
-e:顯示NFS服務器上所有的共享目錄。
[root@localhost ~]# showmount -e 172.16.11.201
Export list for 172.16.11.201:
/data/test *
五、掛載共享目錄及配置永久掛載
注意:
1、掛載目錄服務端的數據會覆蓋客戶端的數據;
1、掛載目錄服務端的數據會覆蓋客戶端的數據;
1、掛載目錄服務端的數據會覆蓋客戶端的數據;
? 執行
mount
掛載的為客戶端;
2、如果卸載掛載,提示:設備正忙(umount.nfs4: /data/test: device is busy),可以使用
umount -l /data/test
,不過存在一定風險,容易丟失數據
- 臨時掛載
在客戶端執行掛載目錄命令
mount -t 指定掛載的文件類型 nfs服務端的IP:服務端要共享的路徑目錄 要掛載到本機的路徑目錄
mount -t nfs 172.16.11.201:/data/test /data/test/
如果遇到以下報錯,有可能是:目錄權限問題、服務端配置文件ip范圍寫的有問題、防火墻、selinux問題;
mount.nfs: access denied by server while mounting 172.16.11.201:/data/test
- 永久掛載
這樣只是臨時掛載,重啟服務器之后就會消息,所以可以配置永久掛載,在客戶端上;
vim /etc/fstab172.16.11.201:/data/test /data/test nfs defaults 0 0
保存退出之后,重啟服務器可以進行測試,一旦寫錯,重啟服務器將造成啟動不了服務器,所以要謹慎;
- 卸載掛載(客戶端)
umount 掛載點舉例:
umount /data/test
數據測試的話可自行測試;