NFS共用存儲服務部署

来源:https://www.cnblogs.com/wenrulaogou/archive/2018/09/06/9599248.html
-Advertisement-
Play Games

第1章 NFS介紹 1.1 NFS基本概述 NFS(Network File System)網路文件系統 主要功能是通過區域網絡讓不同的主機系統之間可以共用文件或目錄。 NFS(Network File System)網路文件系統 NFS系統和Windows網路共用、網路驅動器類似, 只不過wind ...


第1章 NFS介紹

1.1 NFS基本概述

NFS(Network File System)網路文件系統

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

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

1.2 為什麼要使用NFS服務

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

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

1.3 NFS服務內容概述

NFS優缺點以及生產建議

RPC服務知識概念介紹說明

NFS服務工作原理

NFS共用文件系統使用原理

NFS服務配罝文件exports編寫格式及測試

1.4 NFS配置文件

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

nfs共用參數 

參數作用

rw* 

讀寫許可權

ro  

只讀許可權

root_squash   

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

no_root_squash

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

all_squash      

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

no_all_squash

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

sync*     

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

async     

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

anonuid*

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

anongid*

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

1.5 NFS存儲小結

nfs屬於本地文件存儲服務

1.5.1 NFS存儲優點

NFS文件系統簡單易用、方便部署、數據可靠、服務穩定、滿足中小企業需求。
NFS文件系統記憶體放的數據都在文件系統之上,所有數據都是能看得見。

1.5.2 NFS存儲局限

存在單點故障, 如果構建高可用維護麻煩。
NFS數據明文, 並不對數據做任何校驗。
客戶端掛載無需賬戶密碼, 安全性一般(內網使用)

1.5.3 生產應用建議

生產場景應將靜態數據儘可能往前端推, 減少後端存儲壓力
必須將存儲里的靜態資源通過CDN緩存(jpg\png\mp4\avi\css\js)
如果沒有緩存或架構本身歷史遺留問題太大, 在多存儲也無用

第2章 NFS應用場景

2.1 跨系統文件數據共用

實現Windows與linux系統文件數據共用方法

a.ftp(ftp服務部署)        b.samba服務  

2.2 共用存儲的價值

圖解集群需要共用存儲服務原因

沒有共用存儲

  1. A用戶傳圖片到WEB1伺服器
  2. B用戶訪問這張圖片,結果B用戶訪問的請求分發到了WEB2,因為WEB2上沒有這張圖片,結果B用戶無法看到A用戶傳的圖片。

有共用存儲

1.如果有共用存儲的情況, A用戶上傳圖片無論分發到WEB1還是WEB2, 最終都存儲至共用存儲
2.在當B用戶訪問圖片時,無論分發到WEB1還是WEB2上,最終也都會去共用存儲上訪問,這樣就可以訪問到資源了

 

2.3 NFS實現原理

 

 

本地文件操作方式

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

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服務

第3章 NFS服務安裝

伺服器系統

角色

外網IP

內網IP

CentOS 7.5

NFS服務端

eth0:10.0.0.31

eth1:172.16.1.31

CentOS 7.5

NFS客戶端

eth0:10.0.0.41

eth1:172.16.1.41

註意: 檢查關閉防火牆, 以免預設的防火牆策略禁止正常的NFS共用服務

關閉Firewalld防火牆

[root@xuliangwei ~]# systemctl disable firewalld

[root@xuliangwei ~]# systemctl stop firewalld

關閉selinux防火牆

[root@xuliangwei ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config

[root@xuliangwei ~]# setenforce 0

3.1 安裝NFS

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

3.2 配置NFS

3.2.1 配置內容

NFS服務程式的配置文件為/etc/exports預設該文件里沒有任何內容。
按照共用目錄的路徑 允許訪問的NFS客戶端(共用許可權參數)格式,定義要共用的目錄與相應的許可權。

exports配置文件格式

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

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

註意: NFS客戶端地址與許可權之間沒有空格

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

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

在NFS伺服器上建立用於NFS文件共用的目錄,並設置對應許可權

[root@nfs ~]# mkdir /data

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

NFS共用目錄會記錄至/var/lib/nfs/etab,如果該目錄不存在共用信息,請檢查/etc/exports是否配置錯誤

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

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

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

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

3.2.2 exports配置內容說明

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

 

第一部分:/data            --指定共用目錄信息

第二部分:172.16.1.0/24  --指定了一個網段信息,表示允許指定的網段主機掛載到我本地的共用目錄上

第三部分:(rw,sync)       --表示定義共用參數信息,

     rw    表示讀寫,對共用目錄設置的許可權

     sync   同步,數據會先寫入到NFS伺服器記憶體中,會立刻同步到磁碟裡面==直

3.3 創建對應的目錄

創建/data目錄

並將所屬用戶和組修改成nfsnobody

[root@nfs ~]# mkdir /data

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

NFS共用目錄管理用戶為nfsnobody,此用戶不用創建,安裝nfs軟體時會自動創建

3.4 啟動服務

在使用NFS服務進行文件共用之前,需要使用RPC(Remote Procedure Call遠程過程調用, 服務將NFS伺服器的IP地址和埠號信息發送給客戶端。
因此,在啟動NFS服務之前,需要先重啟並啟用rpcbind服務程式,同時都加入開機自啟動

先啟動rpcbind  再啟動nfs-server  順序不能顛倒

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

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

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

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

3.5 檢查服務

上面都執行過後  檢查 檢查是必不可少的一個環節

有問題可以儘早發現

檢查埠

[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

檢查共用的內容

NFS服務開啟後,預設的參數文件位置,註意:修改此文件,對nfs服務沒有任何影響

[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)

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

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

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

3.6 配置客戶端

客戶端只啟動rpcbind服務

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

客戶端創建一個掛載目錄, 使用mount命令並結合-t參數, 指定要掛載的文件系統的類型

說明: 如果nfs軟體不安裝

           無法使用showmount 命令

           客戶端無法識別nfs 文件系統類型

NFS客戶端的配置步驟 先使用showmount命令,查詢NFS伺服器的遠程共用信息

其輸出格式為“共用的目錄名稱 允許使用客戶端地址”。

配置客戶端   

安裝客戶端工具,僅啟動rpcbind服務

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

[root@web01 ~]# systemctl enable rpcbind

[root@web01 ~]# systemctl start rpcbind

使用showmount -e查看遠程伺服器rpc提供的可掛載nfs信息 showmount使用,需要安裝nfs-utils軟體

[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

配置客戶端-創建掛載點目錄,執行掛載命令

在NFS客戶端創建一個掛載目錄, 使用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

3.7 測試客戶端

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

[root@web01 ~]# ll /data/

總用量 4

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

掛載成功後可以進行增刪改操作

使用客戶端往nfs存儲寫入

[root@web01 ~]# echo "nfs-client" >> /mnt/test.txt

檢查nfs服務端是否存在客戶端創建的新文件

[root@nfs ~]# cat /data/test.txt

nfs-client

如果希望NFS文件共用服務能一直有效,則需要將其寫入到fstab文件中

[root@web01 ~]# vim /etc/fstab

172.16.1.31:/data /nfsdir nfs defaults 0 0

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

[root@web01 ~]# umount /nfsdir

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

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

NFS Server宕機, 強制卸載umount -lf /nfsdir

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 參考 ...
  • 進程調度程式是多任務操作系統的基礎,它是確保進程能有效工作的一個內核子系統,負責決定哪個進程投入運行、何時運行以及運行多長時間。只有通過進程調度程式的合理調度,系統資源才能夠最大限度地發揮作用,多進程才會有併發執行的效果。在一組處於可運行狀態的進程中選擇一個來執行,是調度程式所需完成的基本工作。 在 ...
  • 今天在使用 fedora 安裝 chrome 的時候遇到了問題,今天進行將安裝過程進行記錄下來。需要安裝第三方軟體倉庫。 我們需要進行安裝 fedora-workstation-repositories 這個倉庫 使用 yum/dnf 命令 安裝並開啟chrome 倉庫,安裝這個 rpm 包就是在/ ...
  • 當我們進行重新安裝系統(fedora 28)的時候,需要初始安裝一些 gnome 插件,來進行完善我們的使用。 首先我們應該進行安裝 gnome-tweak 工具來進行定製化系統。 tweak 可以進行定製化系統和管理gnome 插件來進一步定製化系統。想要安裝 gnome插件可以訪問:https: ...
  • 1. CGroup(控制群組)、slice(切片)、scop、service 控制群組(control group)是linux kernel的一項功能, 該功能允許linux對RHEL7中systemd下掛載的所有進程按類別分組, 從而使得系統管理員可以按需對linux的系統資源(如CPU時間、系 ...
  • segmentfault對應博文頁面:https://segmentfault.com/a/1190000016300215 最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,需要對用戶態的代碼進行調試,一開始想直接使用linux中的GDB進行調試,但是ovs的工程太過於複雜,從網上找了些文章,發現 ...
  • 訪問 https://extensions.gnome.org/ 網站(註意:需要安裝 chrome-gnome-shell rpm 包來使得系統能與web進行通信) 安裝插件: notifications alert 消息提醒 permanent notification 消息提醒,不消失 在用戶 ...
  • 在11上安裝mysql yum install mariadb mariadb-server -y 在mysql的配置文件my.cnf中加入 init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAM ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...