NFS網路共用介紹與使用

来源:https://www.cnblogs.com/su-root/archive/2018/12/04/10061857.html
-Advertisement-
Play Games

什麼是NFS(網路文件系統)? NFS(Network File System)即網路文件系統,是FreeBSD支持的文件系統中的一種,它允許網路中的電腦之間通過TCP/IP網路共用資源。它的主要功能是通過網路(一般是區域網)讓不同主機系統之間可以共用文件或目錄。NFS客戶的(一般是應用伺服器,例 ...


什麼是NFS(網路文件系統)?

         NFS(Network File System)即網路文件系統,是FreeBSD支持的文件系統中的一種,它允許網路中的電腦之間通過TCP/IP網路共用資源。它的主要功能是通過網路(一般是區域網)讓不同主機系統之間可以共用文件或目錄。NFS客戶的(一般是應用伺服器,例如,web)可以通過掛載(mount)的方式將NFS服務端共用的數據目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從NFS客戶端的機器本地看,NFS伺服器端共用的目錄就好像是客戶機自建的磁碟分區或目錄一樣,而實際上確是遠端的NFS伺服器的目錄。

       NFS網路文件系統很像windows系統的網路共用、安全功能、網路驅動器映射,這也和linux系統里的samba服務類似。只不過一般情況,windows網路共用服務或者samba服務用於辦公區域網共用,互聯網中小型網站集群架構後端常用NFS作為數據共用,如果是大型網站。那麼有可能還會用到更複雜的分散式 文件系統,例如,Moosefs(mfs),glusterfs,FastDFS等等。

 

例如:共用/data目錄給192.168.43.0/24整個網段的主機可讀寫。

測試數據如下:

一、NFS服務測試環境環境:

伺服器部署:

centos6.5X86_64       伺服器角色     ip  192.168.43.117

centos6.5X86_64       客戶端角色1   ip  192.168.43.118

centos6.5X86_64       客戶端角色2   ip  192.168.43.119

服務端配置:

配置主機名:

hostname nfs-server     臨時生效

vi /etc/sysconfig/nework  永久生效

 

查看操作系統及內核版本信息:

cat /etc/redhat-release   系統版本

uname –r              內核信息

uname –m             系統位數

我們下查詢一下機器上是否安裝了NFS服務:

rpm –qa nfs-utils rpcbind  如果知道伺服器名字,此命令效率高

rpm –qa|egrep “nfs-utils|recbind”

安裝nfs軟體:centos6.5預設沒有安裝NFS軟體包(centos5預設是會安裝的。)因此我們可以:yum install nfs-utils rpcbind –y 命令來安裝nfs軟體。

rpcinfo –p localhost  //查看NFS服務向rpc服務註冊的埠信息,因為沒啟動nfs。

如果rpcbind服務未啟動,執行命令rpcinfo –p localhost檢查時,會報如下錯誤:

解決辦法:執行/etc/init.d/rpcbind start 啟動rpcbind服務即可。

啟動rpcbind服務:

/etc/init.d/rpcbind status    //查看rpcbind服務狀態

/etc/init.d/rpcbind start    //啟動rpcbind服務

lsof -i :111                     //111埠為rpcbind服務對外提供服務的主埠。

啟動NFS服務:

  啟動順序:rpcbind服務,再啟動nfs服務。

etc/init.d/nfs start          //啟動nfs服務

netstat –lntup|grep 2049   //nfs主埠2049

rpcinfo –p localhost  //查看NFS服務向rpc服務註冊的埠信息。發現很多埠和功能的對應。

我們可以把啟動命令放到/etc/rc.lcal文件里。當然也可以用chkconfig管理。

下麵我們開始操作NFS服務端配置文件:

NFS服務的預設配置文件路徑為:/etc/exports且預設是空的。

exports配置文件格式:

NFS 共用的目錄 NFS客戶端地址(參1,參2…)

NFS 共用的目錄  NFS客戶端地址1(參1,參2…) 客戶端地址2(參1,參2…)

接下來,我們開始配置客戶端1:

如果執行showmunt -e 192.168.43.117命令出現No route to host錯誤提示,多數原因是因為防火牆沒有關導致的。

解決方法:執行service iptables stop命令即可。

NFS客戶端mount掛載的命令:

掛載命令   掛載的格式類型   NFS伺服器提供的共用目錄   NFS客戶端要掛載的目錄

mount             -t nfs                 ip地址:共用目錄                   要掛載的目錄(必須存在)

----------------------------------------------------------------------------------------------------------

mount –t nfs 192.168.43.117:/data /mnt 

df -h  查看磁碟掛載信息的情況(也可以用cat /proc/mounts)

此時我們測試一下:

①在共用目錄/data里創建一個a.txt文件,並寫入123值a.txt中,然後再客戶端掛載的目錄中看是否有服務端創建的文件。

②在服務端刪除a.txt文件,過後再客戶端創建b.log文件。

服務端:

客戶端:

此時發現無法再客戶端創建文件:

原因是/data屬主為root,解決方法:修改屬主

在NFS服務端把要共用的NFS目錄賦予預設用戶nfsnobody用戶和用戶組的許可權,
如果不設置會導致NFS客戶端訪問時無法通過NFS本地共用目錄許可權寫入數據,
當然也可以給NFS服務端本地共用目錄許可權,但工作中最好不用,因為777許可權太大了。

用戶和用戶組都是nfsnobody,服務端認為所有的客戶端寫入的文件和目錄都會被壓縮成預設的uid為65534和nfsnobody用戶。

我們將rpcbind服務和掛載加入開啟啟動項:

到此,nfs客戶端1掛載成功。

註意:
實戰的情況下,客戶端是不用安裝nfs軟體的,centos6.4以前版本;
但是6.5、6.6要是不裝的話有時會有問題。所有我們在做測試的時候,
都裝nfs和rpbind。但是客戶端不用配置nfs和啟動

我們可以用同樣的方法配置客戶端2:

/etc/init.d/rpcbind start

vi /etc/rc.local

/etc/init.d/rpcbind start

mount –t nfs 192.168.43.117:/data /mnt

showmount –e 192.168.43.117

df –h

.......截圖省略

此時在客戶端2上,我們可以創建文件,也可以管理掛載的目錄文件:

創建c.txt文件,並刪除服務端a.txt和客戶端1b.txt文件。

卸載掛載點: umount -t nfs 192.168.43.117:/data /mnt

個人總結:

在工作中,我們配置/etc/exports內容為:/data 10.1.1.0/24(rw,sync,all_squash)

rw:表示讀寫。
ro:表示只讀
sync:請求或寫入數據時,數據同步寫入到NFS Server的硬碟後才返回。

優點:數據安全不會丟;缺點:性能比不啟用該參數要差

async:寫入時數據會先寫到記憶體緩存區,直到硬碟有空擋才會再寫入磁碟,
這樣可以提升寫入效率!風險為若伺服器宕機或不正常關機,會損失緩存區中
未寫入磁碟的數據

解決辦法:伺服器主板電池或加UPS不間斷電源

all_squash:不管訪問NFS Server共用目錄的用戶身份如何,它的許可權都將被壓縮成匿名
用戶,同時它的UID和GID都會變成nfsnobody賬號身份。在早期多個NFS客戶端同時讀
寫NFS Server數據時,這個參數很有用
在生產中配置NFS的重要技巧:
1)確保所有客戶端伺服器對NFS共用目錄具備相同的用戶訪問許可權
a、all_squash把所有客戶端都壓縮成固定的匿名用戶(UID相同)。
b、就是anonuid,anongid指定的UID和GID的用戶。
2)所有的客戶端和伺服器端都需要有一個相同的UID和GID的用戶,即nfsnobody(UID必須相同)


例如exports內配置的為:
/data 192.168.43.0/24(rw,sync)
/etc/init.d/nfs reload //在服務端
在客戶端df -h 查看依舊是掛載狀態,root用戶切到/mnt目錄下,可以創建目錄寄文件;如果用普通用戶切換到/mnt目錄下,無法創建目錄及文件。

反之,如果exports內配置為:/data 192.168.43.0/24(rw,sync,all_squash)
既可以在普通用戶下創建目錄及文件,可讀可寫。並且常見的文件及目錄屬主及屬組都為nfsnobody。

如果追求極致:可以用如下參數掛載:
mount –t nfs –o bg,hard,intr,rsize=121072,wsize=121072 192.168.43.0:/data /mnt

安全掛載參數:
mount –t nfs –o nosuid,noexec,nodev,rw 192.168.43.117:/data /mnt

nosuid:不希望共用的存儲被執行setuid的功能;
noexec:不希望共用的存儲被執行二進位文件;
nodev: 不希望共用的存儲創建的設備。

通過mount –o 指定掛載參數和在/etc/fstab里指定掛載參數效果是一樣的,網路文件系統和本地的文件系統效果也是一樣的。

有關NFS服務的所有伺服器內核優化:
cat >>/etc/sysctl.conf<<eof
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
eof
執行sysctl –p 生效。

如果卸載的時候提示: umount:/mnt:device is busy
解決方法:需要退出掛載目錄再進行卸載,或者是否NFS server宕機了,需要強制卸載:
mount –lf /mnt
此命令也可以:fuser –km /mnt 不建議用。

nfs性能優化掛載的例子:

①禁止更新目錄及文件時間戳掛載
mount –t nfs –o noatime,nodiratime 192.168.43.117:/data
②安全加優化的掛載方式
mount –t nfs –o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,
wsize=131072 192.168.43.117:/data /mnt (intr:避免出問題時真個系統被NFS鎖死)
③預設的掛載方式
mount –t nfs 192.168.43.117:/data /mnt

NFS客戶端掛載排錯思路:

首先確認NFS服務端配置和服務是否ok(服務端最後自己掛載自己看是否ok)

確認NFS客戶端showmount是否ok(提示NO route to host關閉防火牆即可)


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

-Advertisement-
Play Games
更多相關文章
  • "原文" 原文很簡單,以下為機翻 WIRER ON THE WIRE SIGNALR協議的非正式描述 我已經看到詢問有關SignalR協議的描述的問題出現了很多。哎呀,當我開始關註SignalR時,我也在尋找類似的東西。現在,差不多一年之後,在我從架構上重新設計了SignalR C#客戶端並從頭開始 ...
  • IocPerformance "IocPerformance" 基本功能、高級功能、啟動預熱三方面比較各IOC,可以用作選型參考。 Lamar: StructureMap的替代品 "Lamar" "文檔" 相容StructureMap操作,針對.Net Core DI抽象進行設計 功能較全 性能較好 ...
  • 1 處理程式“ExtensionlessUrlHandler-Integrated-4.0”在其模塊列表中有一個錯誤模塊“ManagedPipelineHandler” 以管理員運行下麵的命令註冊: 32位機器: C:\Windows\Microsoft.NET\Framework\v4.0.303 ...
  • C# -- 結構、訪問修飾符 1. 結構: struct 類型 對於結構,不像類那樣存在繼承。 一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。 但是,結構從基類 Object 繼承。 結構可實現介面,其方式同類完全一樣。無法使用 struct 關鍵字聲明類。 在 C# 中,類與結構在語義 ...
  • 在前後端分離的業務開發中,我們總是需要返回各種各樣的數據包格式,一個良好的 json 格式數據包是我們一貫奉行的原則,下麵就利用 Json.Net 來做一個簡單具有跨平臺的序列化數據包實現類 ...
  • 實驗目的和要求 瞭解windows系統環境下的進程通信機制 熟悉windows系統提供的進程通信API 完成兩個進程之間的通信,需要建立兩個工程文件,在Microsoft Visual C++ 6. 0環境下建立伺服器工程文件PipeServer和客戶端工程文件PipeClient.在伺服器程式中, ...
  • vim編輯器常用的三種模式 vim /文件路徑 進入編輯器,編輯該文件 例:vim /etc/passwd 命令行模式:在編輯器中直接輸入命令 dd:刪除游標所在的一行 ndd:刪除游標所在的向下的n行 yy:複製游標所在的一行 nyy:複製游標所在的向下的n行 p(小寫的):將複製到內容粘貼到游標 ...
  • 三.常見linux命令: (1).組成(預設):[root@localhost~]# (2)[root@localhost~] (3).#:root賬戶, $:為普通賬戶 (1).預設終端控制台:tty1 tty6 , 共六個控制台 (2)遠程登錄的控制台:pts/0 (1)格式:pwd (2)作用 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...