天天看點

楊老師課堂之JavaWeb項目架構之NFS檔案伺服器

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/kese7952/article/details/81013750

NFS簡介

NFS(Network File System)即網絡檔案系統。

主要功能:通過網絡(區域網路)讓不同的主機系統之間可以共享檔案或目錄。

主要用途:NFS網絡檔案系統一般被用來存儲共享視訊,圖檔,附件等靜态資源檔案。

NFS存儲服務

無NFS檔案共享存儲

當使用者A通過網際網路上傳檔案時,經過負載均衡,随機或者定向配置設定到某個節點。但是當使用者B去下載下傳這個檔案的時候,并不确定會向哪個節點發送請求,這樣會導緻使用者存在一定幾率下載下傳不到的情況。

楊老師課堂之JavaWeb項目架構之NFS檔案伺服器
NFS_A.png
有NFS檔案共享存儲

當使用者A通過網際網路上傳檔案時,經過負載均衡,無論發送到哪個節點都會被存儲到NFS檔案伺服器。但是當使用者B去下載下傳這個檔案的時候,任何節點都可以讀取NFS檔案伺服器的檔案。

楊老師課堂之JavaWeb項目架構之NFS檔案伺服器
NFS_B.png

NFS服務的優缺點

優點

  • 簡單容易上手
  • 友善部署非常快速,維護十分簡單
  • 節省本地存儲空間将常用的資料存放在一台伺服器可以通過網絡通路

缺點

  • 在高并發下NFS效率/性能有限
  • NFS的資料是明文的,對資料完整性不做驗證
  • 多台機器挂載NFS伺服器時,連接配接管理維護麻煩
  • 容易發生單點故障,如果服務端當機,所有用戶端将不能通路
  • 用戶端沒用使用者認證機制,且資料是通過明文傳送,安全性一般(一般建議在區域網路内使用)

RPC工作流程

楊老師課堂之JavaWeb項目架構之NFS檔案伺服器
170621082430983.png

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聯機存取資料。
  • 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

作者: 楊校

出處:

https://blog.csdn.net/kese7952

分享是快樂的,也見證了個人成長曆程,文章大多都是工作經驗總結以及平時學習積累,基于自身認知不足之處在所難免,也請大家指正,共同進步。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 如有問題, 可郵件([email protected])咨詢。