NFS存儲服務(上)

第1章 NFS介紹

1.1 什麼是NFS

  NFSNetwork File System的縮寫,中文意思是網絡文件系統html

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

  NFS==網絡共享文件系統linux

  互聯網中小型網站集羣架構後端經常使用NFS進行數據共享web

  若是大型網站,那麼有可能還會用到更復雜的分佈式文件系統,例如:Moosefs(mfs)GlusterFSFastDFS vim

  擴展:NFS網絡文件系統很像Windows系統的網絡共享,可是沒法部署在windows系統上,NFS服務windows

            只能應用在Linux系統上,FTP Samba服務均都支持Linuxwindow後端

1.2 NFS在企業中的應用場景

1.2.1 爲何要用這個NFS軟件?

    實現web集羣中服務器數據一致性安全

a.  實現數據信息的共享服務器

b.  實現數據信息的一致網絡

 

image.png 

  NFS在網絡文件共享服務做用總結:

  1.  負載均衡設備會將訪問流量,進行分流,但不便於文件和數據的互相訪問;

  2.  利用服務器間的數據同步可使用戶之間數據互訪,但同步管理操做過於複雜;

  3.  利用NFS服務器能夠統一管理數據,使用戶之間能夠順利互訪

1.3 共享存儲服務分類

    硬件存儲:IBM oraclesunEMC(去IOE

軟件存儲:NFS mfs ftp samba

第2章 NFS共享系統原理

2.1 NFS系統掛載結構

image.png 

  簡單描述NFS工做原理:

1. 部署好NFS服務,在NFS服務端建立一個video共享目錄

2. web服務器(NFS客戶端)建立一個本地video目錄,做爲一個掛載點

3. web服務器經過mount命令實現網絡掛載,將nfs服務器上video目錄掛載到本地video目錄掛載點上

4. web服務器(NFS客戶端)上在video目錄中,增長 刪除 修改數據的操做,都等價於在NFS服務端 

   video 目錄中的操做

2.2 什麼是RPCRemote Procedure Call

2.2.1 簡單理解

image.png 

  根據上圖能夠簡單理解RPC至關於中介服務

  默認NFS服務啓動會產生多個進程,多個端口號信息而且產生的多個端口號信息會在服務重啓時,發生變化,所以不便於nfs客戶端進行鏈接訪問

  在擁有rpc服務端以後,可讓nfs客戶端直接訪問rpc服務,提供中介服務,便於nfs客戶端進行鏈接訪問

2.2.2 沒有RPC服務的情況

因每一個服務進程對應的端口號不一樣,而且是隨機的,全部對於客戶端說不知道該訪問哪一個端口。

image.png

2.2.3 RPC服務的狀況

NFS服務端的每一個服務進程都會向RPC服務進程註冊,客戶端也只需訪問RPC服務的111端口便可,由RPC服務來告訴客戶端訪問服務端口號。

image.png 

2.2.4 標準工做流程圖

image.png 

NFS服務工做流程圖:

01. 啓動rpc服務,創建中介服務

02. 啓動nfs服務,開啓進程信息(房源信息),向rpc服務進行註冊

03. rpc服務接收到nfs服務進程信息(房源信息)

04. nfs客戶端向rpc服務發出請求(訪問共享目錄)

05. rpc服務響應nfs客戶端請求

06. nfs客戶端與nfs服務端共享目錄創建網絡鏈接,實現數據網絡存儲

 

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

1. 首先用戶訪問網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這時NFS客戶端(即執行程序的服務器)的RPC服務(rpcbind服務)就會經過網絡向NFS服務器端的RPC服務(rpcbind服務)的111端口發出NFS文件存取功能的詢問請求。

2. NFS服務器端的RPC服務(rpcbind服務)找到對應的已註冊的NFS端口後,通知NFS客戶端的RPC服務(rpcbind服務)。

3. 此時NFS客戶端獲取到正確的端口,並與NFS daemon聯機存取數據。

4. NFS客戶端把數據存取成功後,返回給前端訪問程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。

更多的NFS相關信息能夠參考:

http://www.citi.umich.edu/projects/nfsv4/linux/

http://www.vanemery.com/Linux/NFSv4/NFSv4-no-rpcsec.html

http://www.ibm.com/developerworks/cn/linux/l-network-filesystems/

http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

第3章 NFS網絡共享文件系統服務部署流程

3.1 NFS服務端部署流程

3.1.1 第一個里程:檢查nfs服務相關軟件是否安裝

rpm -qa|grep -E "nfs-utils|rpcbind"

yum install -y nfs-utils rpcbind

[root@nfs01 ~]# rpm -qa|grep -E "nfs-utils|rpcbind"

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

[root@nfs01 ~]# rpm -qa|grep -E "nfs-utils|rpcbind"

nfs-utils-lib-1.1.5-13.el6.x86_64

rpcbind-0.2.0-13.el6_9.1.x86_64

nfs-utils-1.2.3-75.el6_9.x86_64

3.1.2 第二個里程:編寫nfs服務配置文件

   NFS服務的默認配置文件/etc/exports是安裝完軟件就有的,而且默認是空的,須要用戶自行配置。

vim /etc/exports

1. 定義共享目錄      --------->    /data   

2. 定於容許使用共享目錄的主機或網段地址信息

3. 定義共享目錄權限信息(注意:24(」之間沒有空格)

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

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

01.定義共享目錄    02.定於容許使用共享目錄的主機或網段地址信息(03.定義共享目錄權限信息)

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

3.1.3 第三個里程:建立共享目錄

   mkdir /data

   chown -R nfsnobody.nfsnobody /data/ 

[root@nfs01 ~]# mkdir /data

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

[root@nfs01 ~]# ll /data/ -d

drwxr-xr-x 2 nfsnobody nfsnobody 4096 Jan 24 12:11 /data/

 nfsnobody是默認用戶

3.1.4 第四個里程:啓動nfs相關服務

/etc/init.d/rpcbind start

/etc/init.d/nfs start

[root@nfs01 wuhuang]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@nfs01 wuhuang]# /etc/init.d/nfs start

Starting NFS services:                                       [  OK  ]

Starting NFS quotas:                                        [  OK  ]

Starting NFS mountd:                                      [  OK  ]

Starting NFS daemon:                                      [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

注意:要先啓動rpcbind ,後啓動 nfs

 

3.1.5 第五個里程:本地檢查測試

rpcinfo -p 172.16.1.31      ---檢查rpc服務中是否有註冊的進程服務和對應端口號信息

showmount -e 172.16.1.31  ---檢查是否有能夠共享目錄

[root@nfs01 wuhuang]# rpcinfo -p 172.16.1.31

   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

    100011    1   udp    875  rquotad

    100011    2   udp    875  rquotad

    100011    1   tcp    875  rquotad

    100011    2   tcp    875  rquotad

    100005    1   udp  62058  mountd

    100005    1   tcp  53154  mountd

    100005    2   udp  22521  mountd

    100005    2   tcp  30878  mountd

    100005    3   udp  56674  mountd

    100005    3   tcp  12281  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   9976  nlockmgr

    100021    3   udp   9976  nlockmgr

    100021    4   udp   9976  nlockmgr

    100021    1   tcp  24261  nlockmgr

    100021    3   tcp  24261  nlockmgr

100021    4   tcp  24261  nlockmgr

[root@nfs01 wuhuang]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

3.2 NFS客戶端部署流程

3.2.1 第一個里程碑:確認是否安裝nfs服務相關軟件

     rpm -qa|grep -E "nfs-utils|rpcbind"

     yum install nfs-utils rpcbind -y

[root@backup ~]# rpm -qa|grep -E "nfs-utils|rpcbind"

nfs-utils-lib-1.1.5-13.el6.x86_64

rpcbind-0.2.0-13.el6_9.1.x86_64

nfs-utils-1.2.3-75.el6_9.x86_64

3.2.2 第二個里程碑:檢查局域網中是否存在共享存儲服務(目錄)

   rpcinfo -p 172.16.1.31       ---rpcinfo命令須要安裝rpcbind軟件才能擁有

   showmount -e 172.16.1.31

[root@backup ~]# rpm -qf `which rpcinfo`

rpcbind-0.2.0-13.el6_9.1.x86_64

[root@backup ~]# rpm -qf `which showmount`

nfs-utils-1.2.3-75.el6_9.x86_64

[root@backup ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

3.2.3 第三個里程碑:實現共享目錄應用(網絡掛載應用)

當客戶端沒有安裝nfs相關軟件

掛載失敗:沒有安裝nfs相關軟件

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

mount: wrong fs type, bad option, bad superblock on 172.16.1.31:/data/,

       missing codepage or helper program, or other error

       (for several filesystems (e.g. nfs, cifs) you might

       need a /sbin/mount.<type> helper program)

       In some cases useful info is found in syslog - try

       dmesg | tail  or so

當客戶端安裝nfs相關軟件

掛載成功:安裝好nfs先關軟件

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

[root@backup ~]#  df -h

Filesystem          Size  Used Avail Use% Mounted on

/dev/sda3            20G  1.5G   17G   9% /

tmpfs               238M     0  238M   0% /dev/shm

/dev/sda1           190M   40M  141M  22% /boot

172.16.1.31:/data/   20G  1.5G   17G   9% /mnt

 第4章 NFS服務常見進程詳解

[root@nfs01 ~]# ps -ef |egrep "rpc|nfs"

rpc        1833      1  0 10:41 ?        00:00:00 rpcbind

root       1869      2  0 10:41 ?        00:00:00 [rpciod/0]

root       1878      1  0 10:41 ?        00:00:00 rpc.rquotad   < -磁盤配額進程(remote quote                                                                                                                                                       server

root       1883      1  0 10:41 ?        00:00:00 rpc.mountd      < - 權限管理驗證等(NFS                                                                                                                                         mount daemon

root       1890      2  0 10:41 ?        00:00:00 [nfsd4]                               

root       1891      2  0 10:41 ?        00:00:00 [nfsd4_callbacks]

root       1892      2  0 10:41 ?        00:00:00 [nfsd]             < -  NFS主進程

root       1893      2  0 10:41 ?        00:00:00 [nfsd]             < -  NFS主進程,管理登陸,

                                                                                                                     ID身份判別

root       1894      2  0 10:41 ?        00:00:00 [nfsd]                        

root       1895      2  0 10:41 ?        00:00:00 [nfsd]

root       1896      2  0 10:41 ?        00:00:00 [nfsd]

root       1897      2  0 10:41 ?        00:00:00 [nfsd]

root       1898      2  0 10:41 ?        00:00:00 [nfsd]              < -  NFS主進程

root       1899      2  0 10:41 ?        00:00:00 [nfsd]

root       1930      1  0 10:41 ?        00:00:00 rpc.idmapd         < - name mapping                                                                                              daemon 用戶壓縮/用戶映射(記錄)

root       2509   1231  0 17:42 pts/0    00:00:00 egrep rpc|nfs             

 

服務或進程名

用途說明

nfsd(rpc.nfsd)

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

 

 

mountd (rpc  mountd)

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

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

 

rpc.lockd (非必要)

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

rpc.statd(非必要)

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

rpc.idmapd

名字映射後臺進程

 重點掌握:

  rpc.statd主要做用:檢查數據存儲的一致性

  rpc.rquotad主要做用:控制磁盤配額

  rpc.mountd主要做用:覈對/etc/exports配置文件中的權限,和NFS服務器端本地文件系統權限

  rpc.idpamd主要做用:實現用戶壓縮/映射(經用戶壓縮後,身份轉換爲nfsnobody

第5章 NFS服務配置文件格式信息說明

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

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

    

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

查看exports語法文件格式幫助的方法爲:

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

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)

5.1 NFS共享目錄:

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

5.2 NFS客戶端地址

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

image.png 

5.3 權限參數集

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

nfs權限(共享目錄) nfs配置的/etc/exports /data 172.16.1.0/24(rw)

本地文件系統權限 掛載目錄的權限rwxr-xr-x root root /data                            

5.3.1 重要配置文件參數說明——權限相關       

參數名稱

參數用途

rw         < -重點掌握

read-write,表示可讀可寫模式---設置共享目錄讀寫模式

ro         

read-only,表示只讀權限---設置共享目錄只讀模式

 

sync       < -重點掌握

請求或寫入數據時,數據同步寫入到NFS Server硬盤後才返回。

優勢:數據安全不會丟;缺點:性能比不啓動該參數要差

---採用同步方式存儲數據,存儲數據到硬盤中

 

 

 

 

async      < -重點掌握 

寫入時數據會先寫到內存緩衝區,直到硬盤有空擋纔會寫人磁盤,這樣能夠提高寫入效率!風險爲若服務器宕機或不正常關機,會損失緩衝區中未寫入磁盤的數據(解決辦法:服務器主板電池或加UPSAB(雙路電源)不間斷電源)!

停電---ups---發電機

---採用異步方式存儲數據,存儲數據到內存中

no_root_squash

保持root用戶不進行壓縮

訪問NFS Server共享目錄的用戶若是是root的話,它對該共享目錄具備root權限,這個配置本來是爲無盤客戶端準備的,用戶應避免使用。

root_squash

若是訪問NFS Server共享目錄的用戶是root,則它的權限將被壓縮成匿名用戶,同時,它的UIDGID一般會變爲nfsnobody帳號身份

 

 

 

 

 

 

 

all_squash   < -重點掌握

無論訪問NFS Server共享目錄的用戶身份如何,它的權限都將被壓縮成匿名用戶,同時它的UIDGID都會變成nfsnobody帳號身份。在早期多個NFS客戶端同時讀寫NFS Server數據時,這個參數頗有用

在生產中配置NFS的重要技巧

1. 確保全部客戶端服務器對NFS共享目錄具有相同的用戶訪問權限。

a. all_squash把全部客戶端都壓縮成固定的匿名用戶(UID相同)

b. 就是anonuidanongid指定的UIDGID的用戶

2. 全部的客戶端和服務器端都須要有一個相同的UIDGID的用戶,即nfsnobodyUID必須相同)

 

image.png 

總結:

1. rw參數:可讀寫

2. ro參數:只讀

   /data 172.16.1.0(ro,sync,all_squash) ro權限給開發人員用於讀取配置文件,而不能修改

3. sync參數的做用:同步,保證數據的可靠性

4. async參數:ups  AB雙路電源

5.3.2 用戶壓縮映射相關參數

1. no_all_squash參數:全部用戶都不映射(什麼身份過來就是什麼身份)

2.  all_squash參數:全部用戶都映射(成指定nfsnobody

3. root_squash參數:root用戶映射(成指定nfsnobody

4. no _root_squash參數:不對root用戶映射(進來NFS服務器後是root身份,權限 很大)

image.png 

注意:

  /etc/init.d/nfs reload  ---平滑重啓(只是從新加載了配置文件,已有的鏈接不會斷開)

  /etc/init.d/nfs restart  ---重啓(從新將服務關閉再開啓,已有的鏈接會斷開)

 

5.4 企業生產環境常見NFS案例

image.pngimage.png 

image.pngimage.png 

 

5.5 企業實戰需求

1.  /data/共享目錄權限固定爲www用戶管理

2. nfs配置文件中,設置all_squash所有用戶都映射參數

3. nfs客戶端能夠向共享目錄存儲數據

5.5.1 第一個里程:設置/data/權限信息

       chown -R www.www /data/

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

[root@nfs01 ~]# ll -d /data/

drwxr-xr-x 2 www www 4096 Jan 25 21:04 /data/

5.5.2 第二個里程:編寫nfs配置文件

1. 查看www用戶的UIDGID信息

   id  www

[root@nfs01 ~]# useradd -s /sbin/nologin -M www -u 502

[root@nfs01 ~]# id www

uid=502(www) gid=502(www) groups=502(www)

2. 編輯配置文件:vim /etc/exports

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

3. 平滑重啓:

 /etc/init.d/nfs reload

  anonuid和anongid參數做用說明:

 將客戶端全部用戶,映射爲指定用戶,而再也不是默認nfsnobody用戶了

 ps:兩點注意

 01. 客戶端要有nfs配置文件anonuid或者anongid指定用戶,此處是www

 02. 客戶端和服務端建立默認映射用戶,uidgid信息須要保持一致,即客戶端的www用戶的UID

     GID也要是502


5.5.3 第三個里程:從新掛載共享目錄

(1) 先卸載   umount /mnt

(2) 再掛載   mount -t nfs 172.16.1.31:/data /mnt

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

[root@backup ~]# df -h

Filesystem         Size  Used Avail Use% Mounted on

/dev/sda3           20G  1.5G   17G   9% /

tmpfs              238M     0  238M   0% /dev/shm

/dev/sda1          190M   40M  141M  22% /boot

172.16.1.31:/data   20G  1.5G   17G   9% /mnt

5.5.4 第四個里程:進行數據存儲測試

 建立測試文件查看屬主信息是否爲www

[root@backup mnt]# touch /mnt/wuhuang.txt

[root@backup mnt]# ll /mnt/wuhuang.txt

-rw-r--r-- 1 www www 0 Jan 25 21:04 /mnt/wuhuang.txt

服務端

[root@nfs01 ~]# ll /data/wuhuang.txt

-rw-r--r-- 1 www www 0 Jan 25 21:04 /data/wuhuang.txt

相關文章
相關標籤/搜索