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 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...