NFS簡介 NFS(Network File System)即網路文件系統。 主要功能:通過網路(區域網)讓不同的主機系統之間可以共用文件或目錄。 主要用途:NFS網路文件系統一般被用來存儲共用視頻,圖片,附件等靜態資源文件。 NFS存儲服務 無NFS文件共用存儲 當用戶A通過互聯網上傳文件時,經過 ...
NFS簡介
NFS(Network File System)即網路文件系統。
主要功能:通過網路(區域網)讓不同的主機系統之間可以共用文件或目錄。
主要用途:NFS網路文件系統一般被用來存儲共用視頻,圖片,附件等靜態資源文件。
NFS存儲服務
無NFS文件共用存儲
當用戶A通過互聯網上傳文件時,經過負載均衡,隨機或者定向分配到某個節點。但是當用戶B去下載這個文件的時候,並不確定會向哪個節點發送請求,這樣會導致用戶存在一定幾率下載不到的情況。
有NFS文件共用存儲
當用戶A通過互聯網上傳文件時,經過負載均衡,無論發送到哪個節點都會被存儲到NFS文件伺服器。但是當用戶B去下載這個文件的時候,任何節點都可以讀取NFS文件伺服器的文件。
NFS服務的優缺點
優點
簡單容易上手 方便部署非常快速,維護十分簡單 節省本地存儲空間將常用的數據存放在一臺伺服器可以通過網路訪問
缺點
在高併發下NFS效率/性能有限 NFS的數據是明文的,對數據完整性不做驗證 多台機器掛載NFS伺服器時,連接管理維護麻煩 容易發生單點故障,如果服務端宕機,所有客戶端將不能訪問 客戶端沒用用戶認證機制,且數據是通過明文傳送,安全性一般(一般建議在區域網內使用)
RPC工作流程
NFS支持的功能非常多,不同的功能會有不同的服務來完成,很多服務都需要監聽在一些埠,其中的很多埠並不是固定的。這些服務在啟動時,都需要向rpcbind服務註冊一個埠,rpcbind服務隨機選取一個未被使用的埠予以分配。rpcbind服務監聽在111埠,所以rpcbind的主要功能就是指定每個RPC service對應的port number,並且通知給客戶端,讓客戶端連接到正確的埠上去。
客戶端向NFS伺服器端請求的步驟:
首先用戶訪問網站程式,由程式在NFS客戶端上發出存取NFS文件的請求,這是NFS客戶端的RPC服務就不通過網路向NFS伺服器端的RPC服務的111埠發出NFS文件存取功能的查詢請求,包括要實現的什麼功能。
NFS伺服器端的RPC服務找到對應的已註冊的NFS埠,通知NFS客戶端的RPC服務。
此時NFS客戶端獲取到正確的埠,並與NFS聯機存取數據。
我特意整理了一下,裡面的技術不是靠幾句話就能講清楚,所以乾脆找朋友錄製了一些視頻,很多問題其實答案很簡單,但是背後的思考和邏輯不簡單,要做到知其然還要知其所以然。如果想學習Java工程化、高性能及分散式、深入淺出。性能調優、Spring,MyBatis,Netty源碼分析的朋友可以加我新建的Java群:650385180,群里有阿裡大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
NFS客戶端把數據存取成功後,返回給客戶端程式,告知用戶存取結果。
註意:由於rpc service在啟動時需要向rpcbind註冊埠,所以rpcbind要先啟動。另外若rpcbind重新啟動,原來註冊的數據也會不見,因此一但rpcbind重新啟動,讓所管理的服務因為需要重新啟動以重新向rpcbind註冊。
NFS伺服器端配置
NFS伺服器:192.168.1.180
檢查並安裝NFS
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# rpm -qa rpcbind nfs-utils
nfs-utils-1.3.0-0.48.el7_4.1.x86_64
rpcbind-0.2.0-42.el7.x86_64
如果沒有,安裝 NFS 伺服器所需的軟體包,實際上需要安裝兩個包nfs-utils(nfs服務主程式)和rpcbind(rpc主程式), 不過當使用yum安裝nfs-utils時會把rpcbind一起安裝上。
yum install -y nfs-utils
配置說明
/etc/sysconfig/nfs #NFS的主配置文件
/etc/exports #配置共用目錄的文件
/etc/exports的配置格式:
nfs共用目錄 nfs客戶端地址1(參1,參2.....) 客戶端地址2(參1,參2...)
說明:
nfs共用目錄:為nfs伺服器要共用的實際目錄,絕對目錄。註意許可權問題。
nfs客戶端地址:為nfs伺服器授權可以訪問的客戶端的地址,可以是單獨的ip地址或主機名,功能變數名稱。也可以是整個網段。
授權整個網段:eg:10.0.0.0/24
文件配置實例說明:
/data/fileserver 192.168.1.190(rw,sync,no_root_squash)
若伺服器端對/etc/exports文件進行了修改,可以通過exportfs命令重新載入服務而不需要重啟服務。若重啟服務需要重新向prcbind註冊,而且對客戶端的影響也很大,所以儘量使用exportfs命令來使配置文件生效。
exportfs: exportfs -ar #重新導出所有的文件系統
exportfs -r #導出某個文件系統
exportfs -au #關閉導出的所有文件系統
exportfs -u #關閉指定的導出的文件系統
相關參數 (man exports)
A. 選項:選項用來設置輸出目錄的訪問許可權、用戶映射等。
設置輸出目錄只讀:ro
設置輸出目錄讀寫:rw
B. 用戶映射選項
all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(預設設置);
root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(預設設置);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx);
anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,並指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
C. 其它選項
secure:限制客戶端只能從小於1024的tcp/ip埠連接nfs伺服器(預設設置);
insecure:允許客戶端從大於1024的tcp/ip埠連接伺服器;
sync:將數據同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證數據的一致性;
async:將數據先保存在記憶體緩衝區中,必要時才寫入磁碟;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(預設設置);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs伺服器將檢查其父目錄的許可權(預設設置);
no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的許可權,這樣可以提高效率;
啟動NFS服務端上nfs服務
1、先為rpcbind和nfs做開機啟動:
systemctl enable rpcbind.service
systemctl enable nfs-server.service
2、然後分別啟動rpcbind和nfs服務:
systemctl start rpcbind.service
systemctl start nfs-server.service
查看服務是否啟動
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# rpcinfo -p
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 47426 status
100024 1 tcp 35379 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 53046 nlockmgr
100021 3 udp 53046 nlockmgr
100021 4 udp 53046 nlockmgr
100021 1 tcp 38280 nlockmgr
100021 3 tcp 38280 nlockmgr
100021 4 tcp 38280 nlockmgr
使用exportfs查看本機上已經共用的目錄:
exportfs
NFS客戶端配置
NFS客戶端:192.168.1.190
安裝nfs,並啟動服務。
yum install -y nfs-utils
systemctl enable rpcbind.service
systemctl start rpcbind.service
客戶端不需要啟動nfs服務,只需要啟動rpcbind服務。
檢查 NFS 伺服器端是否有目錄共用
showmount -e 192.168.1.180
掛載遠程服務
mount -t nfs 192.168.1.180:/data/fileserver /data/itstyle
查看掛載
df -h
開機掛載,編輯/etc/fstab
vim /etc/fstab 加入以下內容:
#設備文件 掛載點 文件系統類型 mount參數 dump參數 fsck順序
192.168.1.180:/data/fileserver /data/itstyle nfs defaults,_netdev 0 0
_netdev明確說明這是網路文件系統,避免網路啟動前掛載出現錯誤。
保存後,重新掛載 /etc/fstab 裡面的內容。
mount -a
推薦一個交流學習群:650385180裡面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分散式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多:
註:喜歡的小伙伴可以點贊加一波關註,一起學習進步