NFS(Network Files System),網路檔案系統是1980年由SUN發展出來在UNIX&Linux系統間實現磁碟檔案共享的一種方法。它是一種檔案系統協議:支援應用程式在客戶端通過網路存取位於伺服器磁碟中的資料。NFS的基本原則是讓不同的客戶端及伺服器通過一組RPCs共享相同的檔案系統,它獨立於作業系統,允許不同硬體及作業系統的系統共同進行檔案的共享。
雖然NFS可以在網路中進行檔案共享,但NFS在設計時並沒有提供資料傳輸的功能。需要藉助RPC(Remote Procedure Calls,遠端過程呼叫)。RPC定義了一種程式間通過網路進行互動通訊的機制,它允許客戶端程式通過網路向遠端服務程式請求服務,而不需要了解伺服器底層的通訊協議詳細資訊。
當一個RPC連線建立開始階段,客戶端建立過程呼叫,將呼叫引數傳送到遠端伺服器程式,並等待相應。請求到達時,伺服器通過客戶端請求的服務,呼叫指定的程式。並將結果返回客戶端。當RPC呼叫結束,客戶端程式將繼續進行下一步的通訊操作。
NFS依賴RPC與外部通訊,為保證NFS服務正常工作,其需要在RPC註冊相應的服務埠資訊,這樣客戶端向伺服器的RPC提交訪問某個服務的請求時,伺服器才能夠正確作出相應。
註冊NFS服務時,需要先開啟RPC,才能保證NFS註冊成功。並且如果RPC服務重新啟動,其儲存的資訊將丟失,需重新啟動NFS服務以註冊埠資訊,否則客戶端將無法訪問NFS伺服器。
NFS服務使用埠:2049 此外還使用以下RPC服務的隨機埠: RPC使用埠111:遠端程式呼叫 rpc.lock:隨機埠 rpc.mount:隨機埠 rpc.stat:隨機埠
不同的功能nfs.server使用不同模組,模組的埠不固定
客戶端連線到nfs伺服器都向rpc服務來請求埠,rpc為nfs模組分配埠
rpc 遠端程式呼叫(rpc埠tcp 111)
客戶端先連線到nfs的2049,但是不能正常工作,nfs還要連線相應的模組,才可以正常工作。
安裝NFS軟體包:
# yum install nfs-utils 該軟體包預設已安裝
防火牆如何開啟不固定埠?
systemctl restart nfs rpcinfo -p 192.168.100.1 #檢視rpc註冊的埠 rpcinfo -p localhost #檢視本地rpc註冊的埠
再次重啟nfs,發現rpc埠發生變化
如何固定rpc埠?
vim /etc/sysconfig/nfs LOCKD_TCPPORT=30000 #修改 LOCKD_UDPPORT=30000 #修改 systemctl restart nfs
防火牆規則需要允許所有相關服務和埠
netstat -antulp | grep -i rpc firewall-cmd --permanent --add-port=20048/tcp firewall-cmd --permanent --add-port=20048/udp firewall-cmd --permanent --add-port=2049/tcp firewall-cmd --permanent --add-port=2049/udp firewall-cmd --permanent --add-port=30000/tcp firewall-cmd --permanent --add-port=30000/udp firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd #即20048埠,二者填一個即可 firewall-cmd --reload
附加許可權引數
引數 | 作用 |
ro | 只讀 |
rw | 讀寫 |
root_squash | 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的匿名使用者 |
no_root_squash | 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的root管理員 |
all_squash | 無論NFS客戶端使用什麼賬戶訪問,均對映為NFS伺服器的匿名使用者 |
sync | 同時將資料寫入到記憶體與硬碟中,保證不丟失資料 |
async | 優先將資料儲存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失資料 |
RHEL7預設已安裝NFS,所以在測試過程中不需要安裝任何軟體包,配置完成,啟動即可。
[root@rhel1 ~]# rpm -qa | grep nfs-utils nfs-utils-1.3.0-0.48.el7.x86_64 [root@rhel1 ~]# rpm -qa | grep rpcbind rpcbind-0.2.0-42.el7.x86_64 [root@rhel1 ~]#
實驗1-普通掛載
在RHEL1上
vim /etc/sysconfig/nfs LOCKD_TCPPORT=30000 #修改 LOCKD_UDPPORT=30000 #修改 systemctl restart nfs #新增防火牆策略 firewall-cmd --permanent --add-port=20048/tcp firewall-cmd --permanent --add-port=20048/udp firewall-cmd --permanent --add-port=2049/tcp firewall-cmd --permanent --add-port=2049/udp firewall-cmd --permanent --add-port=30000/tcp firewall-cmd --permanent --add-port=30000/udp firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd #即20048埠,都可以生效 firewall-cmd --reload #建立需要共享出去的測試目錄及檔案 mkdir /share1 mkdir /share2 touch /share1/file{1..99) touch /share2/file{100..199} #修改exports配置檔案 vim /etc/exports /share1 192.168.100.0/24(ro) /share2 192.168.100.0/24(ro) systemctl restart nfs
NFS的安裝配置很簡單,總的來說,包括以下幾步:
1、安裝(在RHEL7上預設已安裝)
2、新增防火牆策略
3、建立共享目錄,並修改exports配置檔案,指定共享許可權
在RHEL2上
showmount -e 192.168.100.1 --檢視RHEL1上共享出來哪些目錄 mkdir /mnt/nfs1 mkdir /mnt/nfs2 mount 192.168.100.1:/share1 /mnt/nfs1 --掛載目錄到本地 mount 192.168.100.1:/share2 /mnt/nfs2 ll /mnt/nfs1 ll /mnt/nfs2
實驗2-fstab開機掛載
vim /etc/fstab 192.168.100.1:/share1 /mnt/nfs1 nfs defaults 0 0 mount -a ll /mnt/nfs1
實驗3-autofs自動掛載
yum install -y autofs vim /etc/auto.master /mnt/nfs2 /etc/auto.nfs2 --timeout=30 #增加 cp /etc/auto.misc /etc/auto.nfs2 vim /etc/auto.nfs2 nfs2 -fstype=nfs,ro 192.168.100.1:/share2 #增加 systemctl restart autofs ll /mnt/nfs2 #發現什麼都沒有 cd /mnt/nfs2 cd nfs2 ll #發現自動掛載,退出目錄後30秒自動解除安裝