NFS存儲服務部署

第1章 NFS介紹

1.1 NFS服務內容的概述

RPC服務知識概念介紹說明,以及RPC服務存在價值
前端

NFS服務工做原理講解
linux

 NFS共享文件系統使用原理講解web

 NFS服務配罝文件exports編寫格式說明vim

1.2 NFS是什麼

NFSNetwork File System)即網絡文件系統centos

   它的主要功能是經過網絡(通常是局域網)讓不一樣的主機系統之間能夠共享文件或目錄。安全

   分佈式文件系統Moosefs(mfs)\glusterFS服務器

1.2.1 NFSqudian

nfs屬於本地文件存儲服務網絡

   缺點一:架構

    winndows上沒法使用併發

   缺點二:

在高併發場景,以及存儲量比較高的場景,對數據安全性要求比較高場景

        須要採用分佈式儲存(mfs  FastDFS

        分佈式文件系統:沒法在服務器中看到真實的文件信息

1.2.2 實現Windowslinux系統文件數據共享方法

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

1.3 NFS共享網絡文件系統企業應用

主要用於存儲web服務器上用戶上傳的數據信息,圖片 附件 頭像 視頻 音頻

1.4 NFS文件系統存在乎義

實現數據共享,數據統一一致

1.4.1 實現的不一樣方法

軟件實現:

本地文件系統NFS  分佈式文件系統 mfs

硬件實現:

IBM (服務器 小型機 大型機 存儲 DS V7000 V5000) oracle EMC = 去IOE

1.5 NFS 網絡文件系統工做方式

* 在nfs服務端建立共享目錄

* 經過mount 網路掛載,將NFS客戶端本地目錄掛載到NFS服務端共享目錄上

* NFS客戶端掛載目錄上建立、刪除、查看數據操做,等價於在服務端進行的建立、刪除、查看數據操做

如圖10-5所示,在 NFS服務器端設置好一個共享目錄 /video後,其餘有權限訪問 NFS服務器端的客戶端均可以將這個共享目錄 /video掛載到客戶端本地的某個掛載點(其實就是一個目錄,這個掛載點目錄能夠本身隨意指定),圖10-5中的兩個 NFS客戶端本地的掛載點分別爲/ v/video和/video ,不一樣客戶端的掛載點能夠不相同。

客戶端正確掛載完畢後,就能夠經過 NFS客戶端的掛載點所在的/v/video或 /video目錄查看

到 NFS服務器端 /video共享出來的目錄下的全部數據。在客戶端上查看時 ,NFS服務器端的 /video目錄就至關於客戶端本地的磁盤分區或目錄,幾乎感受不到使用上的區別,根據 NFS服務器端授予 的 NFS共享權限以及共享目錄的本地系統權限,只要在指定的 NFS客戶端操做掛載/ v/video或/video的目錄,就能夠將數據輕鬆地存取到NFS服務器端上的/video目錄中了。

1.6 NFS網絡文件系統重點要了解兩個重要服務

 RPC服務       NFS服務

1.6.1 NFS工做流程圖

 

 

1.6.2 RPC服務工做原理

1.6.3 NFS詳細的訪問流程

當訪問程序經過NFS客戶端向NFS服務器存取文件時,其請求數據流程大體以下:

01.首先用戶訪間網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這時NFS客戶端(即執行程序的服務器)的RPC服務(rpcbind服務)就會經過網絡向NFS服務器端的RPC服務(rpcbind服務)的111端口發出NFS文件存取功能的詢間請求.
02.NFS服務器端的RPC服務(rpcbind服務)找到對應的已註冊的NFS端口後,通知NFS客戶端的RPC服務(rpcbind服務)。
03.此時NFS客戶端獲取到正確的端口,並與NFS daemon聯機存取數據
04.NFS客戶端把數據存取成功後,返回給前端訪間程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。

     由於NFS的各項功能都須要向RPC服務(rpcbind服務)註冊,因此只有RPC服務才能獲取到NFS服務的各項功能對應的端口號(port number)PIDNFS在主機所監聽的IP等信息,而NFS客戶端也只能經過向RPC服務詢問才能找到正確的端□。也就是說,NFS須要有RPC服務的協助才能成功對外提供服務。從上面的描述,咱們不難推斷,不管是NFS客戶端仍是NFS服務器端,當要使用NFS時,都須要首先啓動RPC服務,NFS服務必須在RPC服務啓動以後啓動,客戶端無需啓動NFS服務,但須要啓動RPC服務。

第2章 實踐操做NFS 服務

2.1 進行服務器架構規劃

NFS服務器部署角色IP

服務器系統

角色

IP

CentOS release 6.9 (Final)

NFS服務器端(NFS-Sever)

10.0.0.31

CentOS release 6.9 (Final)

NFS客戶端1(NFS-Client1)

10.0.0.8

CentOS release 6.9 (Final)

NFS客戶端2(NFS-Client2)

10.0.0.41

2.2 NFS服務端部署過程

2.2.1 第一個里程碑-確認軟件是否已經安裝,安裝NFS服務相關軟件

  rpm -qa|grep nfs
  rpm -qa|grep rpc

安裝rpcbind nfs-utils服務程序,並進行驗證安裝是否成功

  yum install -y nfs-utils rpcbind
  rpm -qa nfs-utils rpcbind 

2.2.2 第二個里程碑-編寫nfs配置文件

  nfs配置文件默認存在/etc/exports

  vim /etc/exports
  #share /data by clsn for share at 20170220
  /data   172.16.1.0/24(rw,sync) 

/etc/exports文件說明:

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

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

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

             rw     表示讀寫,對共享目錄設置的權限

             sync   同步數據會先寫入到NFS服務器內存中,會馬上同步到磁盤裏面==直接存儲硬盤中

2.2.3 第三個里程碑:建立共享目錄,進行權限設定

mkdir /data -p
chown -R nfsnobody.nfsnobody /data

說明:

NFS共享目錄管理用戶爲nfsnobody,此用戶不用建立,安裝nfs軟件時會自動建立

2.2.4 第四個里程碑:啓動服務(注意順序

   首先,啓動rpc服務

/etc/init.d/rpcbind start

   其次,啓動nfs服務

/etc/init.d/nfs start

  rpcbind服務啓動信息查看

[root@nfs01 ~]# ps -ef|grep rpcbind
  rpc        4050      1  0 10:55 ?        00:00:00 rpcbind
  root       4054   3878  0 10:55 pts/1    00:00:00 grep --color=auto rpcbind
  [root@nfs01 ~]# netstat -lntup|grep 111
  tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4050/rpcbind       
  tcp        0      0 :::111                      :::*                        LISTEN      4050/rpcbind       
  udp        0      0 0.0.0.0:111                 0.0.0.0:*                               4050/rpcbind       
  udp        0      0 :::111                      :::*                                    4050/rpcbind       
  [root@nfs01 ~]# rpcinfo -p localhost
   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

  nfs啓動後查看信息

[root@nfs01 ~]# rpcinfo -p localhost
   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  28467  status
    100024    1   tcp  56269  status
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  32886  mountd
    100005    1   tcp   6154  mountd
    100005    2   udp  38339  mountd
    100005    2   tcp  60288  mountd
    100005    3   udp  49824  mountd
    100005    3   tcp  24427  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  61803  nlockmgr
    100021    3   udp  61803  nlockmgr
    100021    4   udp  61803  nlockmgr
    100021    1   tcp   6064  nlockmgr
    100021    3   tcp   6064  nlockmgr
    100021    4   tcp   6064  nlockmgr

2.2.5 到此服務端部署配置完成

[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

NFS服務開啓後,默認的參數文件位置,注意:修改此文件,對nfs服務沒有任何影響

[root@nfs01 ~]# 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,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)

2.3 NFS 客戶端部署

2.3.1 第一個里程碑:確認軟件有沒有安裝,進行nfs rpc 服務軟件安裝部署

yum install rpcbind nfs-utils -y

2.3.2 第二個里程碑:啓動服務

提示:

rpcbindnfs軟件均可以不啓動

2.3.3 第三個里程碑: 檢查NFS服務端是否有能夠進行掛載的目錄

[root@nfs01 ~]# rpm -qf `which showmount`
nfs-utils-1.2.3-75.el6.x86_64

說明:showmount使用,須要安裝nfs-utils軟件

2.3.4 第四個里程碑:進程nfs客戶端掛載

mount -t nfs 172.16.1.31:/data /mnt

測試  

[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

說明: 若是nfs軟件不安裝

        a 沒法使用showmount 命令

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

2.3.5 第五個里程碑: 進行檢查測試

[root@backup ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           19G  1.5G   17G   9% /
tmpfs              238M     0  238M   0% /dev/shm
/dev/sda1          190M   40M  141M  22% /boot
172.16.1.31:/data   19G  1.5G   17G   9% /mnt

【測試】本地nfs客戶端 進行增刪改數據 等價於 nfs服務端共享目錄操做

[root@backup mnt]# echo "test123">test.txt
[root@backup mnt]# ll test.txt
-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
[root@nfs01 data]# cat test.txt
test123

第3章 知識深刻

3.1 NFS服務相關進程信息

3.1.1 簡略說明

rpcbind        rpc啓動進程 主進程
rpc state      檢查數據存儲的一致性
rpc.rquotad    磁盤配額
rpc.mountd     權限管理驗證
nfsd            NFS主進程
rpc.idmapd     用戶壓縮映射

3.1.1 進程/服務 詳細說明

服務或進程名

用途說明

portmapper

rpcbind服務的進程(centos5.x 上爲 portmap軟件)

rquotad

磁盤配額進程

nfsnfs_acl

   nfs服務進程

nfsd (rpc.nfsd )

rpc.nfsd的主要功能是管理NFS客戶端是否可以登入NFS服務器端主機,其中還包括含登入者的ID判別等。

mountd

rpc.mountd的主要功能則是管理NFS文件系統。當NFS客戶端順利經過rpc.nfsd登入NFS服務器端主機時,在使用NFS服務器提供數據以前,它會去讀NFS的配置文件/etc/exports來比對NFS客戶端的權限,經過這一關以後,還要通過NFS服務器端本地文件系統使用權限(就是ownergroupother權限)等認證程序。若是都經過了,NFS客戶端就能夠取得使用NFS服務器端文件的權限。

注意:這個/etc/exports文件也是咱們用來管理NFS共享目錄的使用權限與安全設置的地方,特別強調,NFS自己設置的是網絡共享權限,整個共享目錄的權限還和目錄自身的系統權限有關。

rpc.lockd (非必要)

用來鎖定文件,用於多客戶端同時寫入

rpc.statd (非必要)

檢查文件的一致性,與rpc.lockd有關。cd兩個服務雲要客戶端,服務器端同時開啓才能夠;rpc.statd監聽來自其餘主機重啓的通知,而且管理當本地系統重啓時主機列表。

rpc.idmapd

表示用戶映射或用戶壓縮(重要

3.2 /etc/exports配置文件說明

3.2.1 /etc/exports文件說明

NFS共享目錄:

NFS服務器端要共享的實際目錄,要用絕對路徑,如 /data )。注意共享目錄的本地權限,若是須要讀寫共享,必定要讓本地目錄能夠被 NFS客戶端的用戶 nfsnobody)讀寫。

NFS客戶端地址:

NFS服務器端受權的可訪問共享目錄的NFS客戶端地址,能夠爲單獨的IP地址或主機名、域名等,也能夠爲整個網段地址。還能夠用來匹配全部客戶端服務器,這裏所謂的客戶端通常來講是前端的業務的業務服務器,例如:web服務。

□權限參數集

對受權的NFS客戶端的訪問權限設置。

nfs權限(共享目錄\借給你手機)nfs配置的/ etc/exports /data 172.16.1.0/24(rw)

本地文件系統權限(\手機密碼不告訴你)掛載目錄的權限rwxr- xr-x root root/data

3.2.2 指定 NFS客戶端地址的配置詳細說明 

客戶端地址           

具體地址        

受權單一客戶端訪問NFS

10.0.0.30

通常狀況,生產環境中此配置很少

受權整個網段可訪問NFS

10.0.0.0/24

其中的24等同於255.255.255.0 ,指定網段爲生產環境中最多見的配置。配置簡單,維護方便

受權整個網段可訪問NFS

10.0.0.*

指定網段的另外寫法(不推薦使用)

受權某個域名客戶端訪問

nfs.clsnedu.com

此方法生產環境中通常狀況不經常使用

受權整個域名客戶端訪問

*.clsnedu.com

此方法生產環境中通常狀況不經常使用

3.2.3 常見案例

經常使用格式說明

要共享的目錄客戶端IP地址或IP(1,2,)

配罝例一

/data10.0.0.0/24(ro,sync)

說明:容許客戶端讀寫,而且數據同步寫入到服務器揣的磁盤裏

注意:24"("之間不能有空格

配置例二

/data10.0.0.0/24(rw,sync/all_squash,anonuid=2000,anongid=2000)

說明:容許客戶揣讀寫,而且數據同步寫到服務器揣的磁盤裏,而且指走客戶端

的用戶UIDGID,早期生產環境的一種配罝,適合多客戶端共享一個NFS服務

單目錄,若是全部服務器的nfsnobody帳戶UID都是65534,則本例沒什麼必

要了.早期centos5.5的系統默認狀況下nfsnobodyUID不必定是65534,

此時若是這些服務器共享一個NFS目錄,就會出現訪問權限問題.

配置例三

/home/clsn10.0.0.0/24(ro)

說明:只讀共享

用途:例如在生產環境中,開發人員有查看生產眼務器日誌的需求,但又不希罜

給開發生產服務器的權限,那麼就能夠給開發提供從某個測試服務器NFS客戶端

上查看某個生產服務器的日誌目錄(NFS共享)的權限,固然這不是惟一的方法,

例如能夠把程序記錄的日誌發送到測試服務器供開發查看或者經過收集日誌等其

它方式展示

3.2.4 nfs客戶端訪問服務原理

3.2.5 nfs服務訪問原理

客戶端(不管用什麼用戶訪問)------服務端(nfsnobody rpc.idmapd

3.3 NFS服務端設置rpcbind nfs服務開機自啓動

[root@nfs01 ~]#  chkconfig rpcbind on
[root@nfs01 ~]#  chkconfig nfs  on
[root@nfs01 ~]#  chkconfig |egrep "rpcbinf|nfs"
nfs             0:off  1:off  2:on   3:on   4:on   5:on   6:off
nfslock         0:off  1:off  2:off  3:on   4:on   5:on   6:off

3.4 NFS配置文件編寫說明

3.4.1 官方舉例配置

EXAMPLE
       # sample /etc/exports file
       /               master(rw) trusty(rw,no_root_squash)
       /projects       proj*.local.domain(rw)
       /usr            *.local.domain(ro) @trusted(rw)
       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
       /pub            *(ro,insecure,all_squash)
       /srv/www        -sync,rw server @trusted @external(ro)
       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
       /build          buildhost[0-9].local.domain(rw)

3.4.2 /etc/exports文件配置格式爲:

 NFS共享目錄 NFS客戶端地址1(參數1,參數2,...) 客戶端地址2(參數1,參數2,...)
    或
    NFS共享目錄 NFS客戶端地址1(參數1,參數2,...)
    NFS共享目錄 NFS客戶端地址2(參數1,參數2,...)

注意:nfs服務默認沒有認證機制,安全性不如分佈式文件系統

      只能經過控制配置文件中網絡地址信息,實現安全性

3.5 nfs配置參數說明

參數

說明

rw

可讀寫的權限

ro 

只讀的權限

no_root_squash

登入NFS主機,使用該共享目錄時至關於該目錄的擁有者,若是是root的話,那麼對於這個共享的目錄來講,他就具備root的權限,這個參數『極不安全』,不建議使用

root_squash

登入NFS主機,使用該共享目錄時至關於該目錄的擁有者。可是若是是以root身份使用這個共享目錄的時候,那麼這個使用者(root)的權限將被壓縮成爲匿名使用者,即一般他的UIDGID都會變成nobody那個身份

all_squash

不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是nobody

anonuid

能夠自行設定這個UID的值,這個UID必須要存在於你的/etc/passwd當中

anongid

anonuid,可是變成groupID就是了

sync

資料同步寫入到內存與硬盤當中

async

資料會先暫存於內存當中,而非直接寫入硬盤

insecure

容許從這臺機器過來的非受權訪問

3.6 nfs配置參數實踐

3.6.1 all_squash 參數實踐

服務端修改配置

[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,all_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload

         配置修改須要平滑重啓nfs 服務

         reload    平滑重啓

         用戶的訪問體驗更好

nfs客戶端進行測試

[root@backup mnt]# touch test.txt
[root@backup mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt
[root@backup ~]# su - clsn
[clsn@backup ~]$ cd /mnt/
[clsn@backup mnt]$ touch clsn1.txt
[clsn@backup mnt]$ ll
-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

說明:

不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是nobody

3.6.2 no_all_squash,root_squash 參數實踐

服務端修改配置

[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload

客戶端卸載從新掛載服務器配置修改後客戶端要從新掛載

[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

nfs客戶端測試結果:

[root@backup mnt]# touch test1.txt
[root@backup mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt
[root@backup mnt]# su - clsn
[clsn@backup ~]$ cd /mnt/
[clsn@backup mnt]$ touch clsn1.txt
touch: cannot touch `clsn1.txt': Permission denied
[clsn@backup mnt]$ touch clsn2.txt
touch: cannot touch `clsn2.txt': Permission denied
# 服務端驗證:
[root@nfs01 ~]# ll /data/
-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt
-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

說明:

no_all_squash,是全部用戶都不進行壓縮,因此clsn用戶對nfs的目錄沒有寫入的權限(與nfs服務器的共享目錄權限有關)。root用戶進行壓縮因此能夠寫入。

3.6.3 no_root_squash 參數實踐(root用戶不進行壓縮映射)

服務端修改配置

[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,no_root_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload

客戶端卸載從新掛載服務器配置修改後客戶端要從新掛載

[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

nfs客戶端測試結果:

[root@backup mnt]# touch root.txt
[root@backup mnt]# ll
total 16
-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 root      root         0 Oct 13 12:45 root.txt
-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt
-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

刪除測試

[root@backup mnt]# rm -rf ./*

[root@backup mnt]# ll
total 0

說明:

因爲對root用戶沒有進行壓縮,因此到達nfs服務器後依舊是root身份,root用戶默認對全部的文件都有權限,因此能夠寫入。(很危險)

相關文章
相關標籤/搜索