JavaWeb項目架構之NFS文件伺服器

来源:https://www.cnblogs.com/lfs2640666960/archive/2018/03/06/8516310.html
-Advertisement-
Play Games

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性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多:

 

 

註:喜歡的小伙伴可以點贊加一波關註,一起學習進步

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、瀏覽器相容性 vue: ie9+ react: ie8+ 二、安裝使用 vue:1、直接引入 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 後直接寫vue代碼(小項目) 2、依賴node.j ...
  • 1、原型鏈繼承 核心: 將父類的實例作為子類的原型 缺點: 父類新增原型方法/原型屬性,子類都能訪問到,父類一變其它的都變了 2、構造繼承 核心:使用父類的構造函數來增強子類實例,等於是複製父類的實例屬性給子類(沒用到原型) 缺點: 方法都在構造函數中定義, 只能繼承父類的實例屬性和方法,不能繼承原 ...
  • 參考書《ECMAScript 6入門》http://es6.ruanyifeng.com/字元串的擴展ES6之前只能識別\u0000 - \uFFFF 之間的字元,超過此範圍,識別會出錯;ES6彌補了這個錯誤 ES6擴展的新方法codePointAt "𠮷".CodePointAt(0)//返回超 ...
  • Vue2學習 醒目中在使用bootstrapTable的時候,在table裡面會有操作結合vue使用過程中點擊相應的操作不會起作用 + 解決辦法 + 1、把事件綁定到父元素上即可,但要判斷什麼樣的需要點擊,用了v if實現的想要的渲染效果。或者(vue的事件綁定支持原生的event參數:event. ...
  • html的標簽的屬性,比如id、class、href需要動態傳遞參數,拼接字元串,查了一些資料,並沒有找到合適的解決方法,琢磨了一上午,終於試出了方法: v-bind:屬性=“ ‘字元串’+自定義變數名”,自己試了沒問題,有需要的朋友可以借鑒下! 最後需要註意一下屬性一定是":屬性="這種形式才會起 ...
  • <!doctype html><html><head><meta charset="utf-8"><title>無標題文檔</title></head><style> *{margin:0;padding:0;list-style:none;}#menu{position:relative; wid ...
  • 1、開胃菜,setTimeout為何物 首先看一下 上面對於 的解釋 很簡單, 只執行 一次,到底什麼時候執行取決於第二個參數 設定的毫秒數,所以很多人習慣上稱之為 ,無非就是延遲一段時間後再執行裡面的代碼。 正常情況下, 這句話並不會馬上輸出而是等1000毫秒以後會在瀏覽器的控制台輸出。 2、主菜 ...
  • onlyNum.js main.js 在component中只需要在input上加上v-limitNum就能生效。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...