NFS網路文件系統詳解

来源:https://www.cnblogs.com/zeq912/archive/2018/09/07/9606105.html
-Advertisement-
Play Games

第1章 NFS基本概述 1.1 什麼是nfs NFS是Network File System的縮寫及網路文件系統。 主要功能是通過區域網絡讓不同的主機系統之間可以共用文件或目錄。 NFS系統和Windows網路共用、網路驅動器類似, 只不過windows用於區域網, NFS用於企業集群架構中, 如果 ...


第1章 NFS基本概述

1.1 什麼是nfs

NFS是Network File System的縮寫及網路文件系統。

主要功能是通過區域網絡讓不同的主機系統之間可以共用文件或目錄。

NFS系統和Windows網路共用、網路驅動器類似, 只不過windows用於區域網, NFS用於企業集群架構中, 如果是大型網站, 會用到更複雜的分散式文件系統FastDFS,glusterfs,HDFS

1.2 為什麼要使用NFS服務進行數據存儲

1.實現多台伺服器之間數據共用

2.實現多台伺服器之間數據的一致

1.3 本地文件操作方式

當用戶執行mkdir命令, 該命令會通過shell解釋器翻譯給內核,由內核解析完成後驅動硬體,完成相應的操作。

1.4 NFS實現原理(需要先瞭解[程式|進程|線程])

1.用戶進程訪問NFS客戶端,使用不同的函數對數據進行處理

2.NFS客戶端通過TCP/IP的方式傳遞給NFS服務端。

3.NFS服務端接收到請求後,會先調用portmap進程進行埠映射。

4.nfsd進程用於判斷NFS客戶端是否擁有許可權連接NFS服務端。

5.Rpc.mount進程判斷客戶端是否有對應的許可權進行驗證。

6.idmap進程實現用戶映射和壓縮

7.最後NFS服務端會將對應請求的函數轉換為本地能識別的命令,傳遞至內核,由內核驅動硬體。

rpc是一個遠程過程調用,那麼使用nfs必須有rpc服務

1.5 NFS存儲優點

1.NFS文件系統簡單易用、方便部署、數據可靠、服務穩定、滿足中小企業需求。

2.NFS文件系統記憶體放的數據都在文件系統之上,所有數據都是能看得見。

1.6 NFS存儲局限

1.存在單點故障, 如果構建高可用維護麻煩。(web-》nfs()-》backup)

2.NFS數據明文, 並不對數據做任何校驗。

3.客戶端掛載無需賬戶密碼, 安全性一般(內網使用)

1.7 生產應用建議

1.生產場景應將靜態數據儘可能往前端推, 減少後端存儲壓力

2.必須將存儲里的靜態資源通過CDN緩存(jpg\png\mp4\avi\css\js)

3.如果沒有緩存或架構本身歷史遺留問題太大, 在多存儲也無用

第2章 NFS基本使用

2.1 環境準備

伺服器系統

角色

外網IP

內網IP

主機名

CentOS 7.5

NFS服務端

eth0:10.0.0.31

eth1:172.16.1.31

nfs

CentOS 7.5

NFS客戶端

eth0:10.0.0.7

eth1:172.16.1.7

web01

2.2 關閉防火牆及selinux(客戶端,服務端都要關閉)

2.2.1 關閉防火牆

systemctl disable firewalld
systemctl stop firewalld

2.2.2 關閉selinux

sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config

setenforce 0

2.3 服務端安裝nfs

[root@nfs ~]# yum -y install nfs-utils

2.3.1 配置nfs

我們可以按照共用目錄的路徑 允許訪問的NFS客戶端(共用許可權參數)格式,定義要共用的目錄與相應的許可權。

[root@nfs ~]# echo '/data 172.16.1.0/24(rw,sync,all_squash)' > /etc/exports

[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash)

如果想要把/data目錄共用給172.16.1.0/24網段內的所有主機

1.主機都擁有讀寫許可權

2.在將數據寫入到NFS伺服器的硬碟中後才會結束操作,最大限度保證數據不丟失

3.將所有用戶映射為本地的匿名用戶(nfsnobody)

2.3.2 創建對應的目錄

[root@nfs ~]# mkdir /data

2.3.3 啟動服務,並將服務加入開機自啟動

[root@nfs ~]# systemctl enable rpcbind nfs-server

[root@nfs ~]# systemctl start rpcbind nfs-server

2.3.4 檢查埠

[root@nfs ~]# netstat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address    State       PID/Program name                  
tcp        0      0 0.0.0.0:2049            0.0.0.0:*     LISTEN      -                     
tcp        0      0 0.0.0.0:111             0.0.0.0:*     LISTEN      653/rpcbind

2.3.5 檢查共用的內容

[root@nfs ~]# cat /var/lib/nfs/etab

/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,all_squash)

2.3.6 檢查匿名用戶對應的真實賬戶,並授權共用目錄為nfsnobody

[root@nfs ~]# grep "65534" /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

[root@nfs ~]# chown -R nfsnobody.nfsnobody /data

2.4 客戶端安裝nfs

[root@web01 ~]# yum install nfs-utils -y

2.4.1 啟動rpcbind服務

[root@web01 ~]# systemctl enable rpcbind

[root@web01 ~]# systemctl start rpcbind

2.4.2 使用showmount -e查看遠程伺服器rpc提供的可掛載nfs信息

[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

2.4.3 創建掛載點目錄,執行掛載命令

mount命令並結合-t參數, 指定要掛載的文件系統的類型, 併在命令後面寫上伺服器的IP地址, 以及伺服器上的共用目錄, 最後需要寫上要掛載到本地系統(客戶端)的目錄

[root@web01 ~]# mkdir /data

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/

[root@web01 ~]# df -h

文件系統                   容量  已用   可用    已用% 掛載
172.16.1.31:/data 50G 2.6G 48G 6% /data

2.4.4 掛載成功後可以進行增刪改操作,測試客戶端是否擁有寫的許可權

[root@web01 ~]# echo "123" > /data/test

[root@web01 ~]# ll /data/

總用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9月   6 03:41 test

2.4.5 檢查nfs服務端是否存在數據

[root@nfs ~]# ll /data/

總用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9月   6 03:41 test

2.4.6 如果希望NFS文件共用服務能一直有效則永久掛載

(防止伺服器重啟掛載失效->伺服器不會重啟)

[root@web01 ~]# echo '172.16.1.31:/data       /data                   nfs     defaults        0 0' >> /etc/fstab

[root@web01 ~]# tail -1 /etc/fstab

172.16.1.31:/data       /data                   nfs     defaults        0 0

驗證fstab是否ok,前提要先卸載掛載

[root@web01 ~]# umount /data/

df -h 發現掛載沒有了

[root@web01 ~]# mount -a

fstab如果ok,df -h查看會看到已經自動掛載了

2.4.7 如果不希望使用NFS共用, 可進行卸載

[root@web01 ~]# umount /data/

卸載的時候如果提示”umount.nfs: /data: device is busy” 

1.切換至其他目錄, 然後在進行卸載。

2.NFS宕機, 強制卸載umount -lf /data

2.5 配置多台客戶端伺服器的配置方法何上面客戶端方法一致

註意:客戶端的必須是服務端配置允許訪問的NFS客戶端網段內的所有主機

第3章 NFS配置參數及驗證

3.1 nfs共用參數及作用

執行man exports命令,然後切換到文件結尾,可以快速查看如下樣例格式:

共用參數

參數作用

rw*

讀寫許可權

ro

只讀許可權

root_squash

當NFS客戶端以root管理員訪問時,映射為NFS伺服器的匿名用戶(不常用)

no_root_squash

當NFS客戶端以root管理員訪問時,映射為NFS伺服器的root管理員(不常用)

all_squash

無論NFS客戶端使用什麼賬戶訪問,均映射為NFS伺服器的匿名用戶(常用)

no_all_squash

無論NFS客戶端使用什麼賬戶訪問,都不進行壓縮

sync*

同時將數據寫入到記憶體與硬碟中,保證不丟失數據

async

優先將數據保存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失數據

anonuid*

配置all_squash使用,指定NFS的用戶UID,必須存在系統

anongid*

配置all_squash使用,指定NFS的用戶UID,必須存在系統

3.2 驗證ro許可權

[root@nfs ~]# echo '/data 172.16.1.0/24(ro,sync,all_squash)' > /etc/export

[root@nfs ~]#cat /etc/exports

/data 172.16.1.0/24(ro,sync,all_squash)

3.2.1 重載nfs(exportfs)

[root@nfs ~]# systemctl restart nfs-server

3.2.2 先卸載客戶端已掛載好的共用

[root@web01 ~]# umount /data/

3.2.3 重新進行掛載

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/

3.2.4 測試是否能寫數據

[root@web01 ~]# cd /data/

[root@web01 data]# touch file-test        不允許寫入數據

touch: cannot touch 'file-test': Read-only file system

3.3 驗證all_squash,anonuid,anongid許可權

[root@nfs ~]# echo '/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' > /etc/exports

[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

3.3.1 需要添加一個uid是666,gid是666的用戶

[root@nfs ~]# groupadd -g 666 www

[root@nfs ~]# useradd -u666 -g666 www

[root@nfs ~]# id www

uid=666(www) gid=666(www) 組=666(www)

3.3.2 必須重新授權為www用戶,否則無法寫入文件

[root@nfs ~]# chown -R www.www /data/

3.3.3 重啟服務

[root@nfs ~]# systemctl restart nfs-server

3.3.4 客戶端重新掛載

[root@web01 /]# umount /data/

[root@web01 /]# mount -t nfs 172.16.1.31:/data /data/

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

3.3.5 測試是否能寫入數據

[root@web01 data]# touch tes1

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 0 Sep  7 10:38 tes1

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

3.3.6 為了防止許可權不一致導致許可權不足,建議在客戶端創建一模一樣的用戶

[root@web01 ~]# groupadd -g 666 www

[root@web01 ~]# useradd -u666 -g666 www

[root@web01 ~]# id www

uid=666(www) gid=666(www) groups=666(www)

3.3.7 在此檢查文件身份

[root@web01 ~]# ll /data/

total 4

-rw-r--r-- 1 www www 0 Sep  7 10:38 tes1

-rw-r--r-- 1 www www 4 Sep  6 03:41 test

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

-Advertisement-
Play Games
更多相關文章
  • [TOC]### 操作系統理論####站在馮諾依曼角度,理解操作系統定位管理和控制電腦硬體與軟體資源的電腦程式馮諾伊曼(存儲程式原理)1. 馮諾伊曼體系的存儲器指的是記憶體2. 不考慮緩存的情況,CPU只能對記憶體進行操作,不能訪問外設(輸入或輸出設備)3. 外設(輸入輸出設備)如果想輸入輸出數據也... ...
  • 簡介Varnish 是一款高性能且開源的反向代理伺服器和 HTTP 加速器,其採用全新的軟體體系機構,和現在的硬體體繫緊密配合,與傳統的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等諸多優點; 目前最新版本是4.0.0,而3.x的版本也是可以生產環境下使用的穩定版本,但y... ...
  • 一、基本環境 操作系統:CentOS7.4 內核版本:3.10.0-862.11.6.el7.x86_64 二、組件部署 yum安裝tftp tftpd-server xinetd http dhcp. 安裝完成後進行簡單必要的配置: 1. tftp守護進程xinetd配置 2. dhcp配置 vi ...
  • 1、ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa // 在自己主機生成私鑰和公鑰 2、scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys // 分發公鑰 // 安裝 scp yum -y ins ...
  • 一、安裝ubuntu: 我在window10上裝了VMware,好像window10自帶虛擬機吧;然後傻瓜式裝機,裝好後發現沒網不知道什麼原因,然後百度啪啦啪啦找了一堆,解決方法是: 然後重啟下ubuntu就ojbk了,自己的共用網路也要開啟。 二、然後就開始裝ssh 1、ctrl + alt + ...
  • 使用dockerfile構建nginx鏡像 docker構建鏡像的方法: commit、dockerfile 1、使用commit來構建鏡像: commit是基於原有鏡像基礎上構建的鏡像,使用此方法構建鏡像的目的:保存鏡像里的一些配置信息和修改的信息。相當於一個鏡像的快照。 2、使用dockerfi ...
  • 字元串方法如下: 列表操作如下: ...
  • 一. 文件重命名與移動(mv) 在linux中,重命名文件稱為移動(moving)。mv命令可以將文件和目錄移動到另一個位置或重新命名。 1.1 使用mv重命名 下麵在/usr/local下麵創建一個空文件為test, 使用mv命令重命名為test1, 查看inode編號和時間將會保持不變,因為mv ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...