天天看點

存儲服務nfs

--存儲服務nfs

nfs概述

存儲服務nfs
存儲服務nfs
存儲服務nfs

 nfs的缺點

nfs屬于本地檔案存儲服務

缺點一:

winndows上無法使用

缺點二:

在高并發場景,以及存儲量比較高的場景,對資料安全性要求比較高場景

需要采用分布式儲存(mfs FastDFS)

分布式檔案系統:無法在伺服器中看到真實的檔案資訊

1.2.2 實作Windows與linux系統檔案資料共享方法

a.ftp(ftp服務部署)

b.samba服務

NFS共享網絡檔案系統企業應用

----主要用于存儲web伺服器上使用者上傳的資料資訊,圖檔 附件 頭像 視訊 音頻

NFS檔案系統存在意義(實作資料共享,實作資料統一)

存儲服務nfs

NFS 網絡檔案系統工作方式

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

* 通過mount 網路挂載,将NFS用戶端本地目錄挂載到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目錄中了。

NFS網絡檔案系統重點要了解兩個重要服務

RPC服務

NFS服務

NFS工作流程圖

存儲服務nfs
RPC服務工作原理
存儲服務nfs
NFS詳細的通路流程
存儲服務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)、PID、NFS在主機所監聽的IP等資訊,而NFS用戶端也隻能通過向RPC服務詢問才能找到正确的端□。也就是說,NFS需要有RPC服務的協助才能成功對外提供服務。從上面的描述,我們不難推斷,無論是NFS用戶端還是NFS伺服器端,當要使用NFS時,都需要首先啟動RPC服務,NFS服務必須在RPC服務啟動之後啟動,用戶端無需啟動NFS服務,但需要啟動RPC服務。

存儲服務nfs
存儲服務nfs
存儲服務nfs

nsf實戰

存儲服務nfs

第一個裡程碑-确認軟體是否已經安裝,安裝NFS服務相關軟體

grep nfs

  rpm -qa|grep rpc      

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

utils rpcbind

  rpm -qa nfs-utils rpcbind      

第二個裡程碑-編寫nfs配置檔案

nfs配置檔案預設存在/etc/exports

vim /etc/exports

  #share /data by oldboy for share at 20170220

  /data  172.16.1.0/24(rw,sync)      
存儲服務nfs
存儲服務nfs
mkdir /data -p

chown -R nfsnobody.nfsnobody /data      

說明:

NFS共享目錄管理使用者為nfsnobody,此使用者不用建立,安裝nfs軟體時會自動建立

第四個裡程碑:啟動服務(注意順序)

首先,啟動rpc服務

/etc/init.d/rpcbind start
或者
systemctl start rpcbind
systemctl enable rpcbind      

 其次,啟動nfs服務

systemctl start nfs
systemctl enable nfs      

 rpcbind服務啟動資訊檢視

[root@nfs01 ~]# ps -ef|grep rpcbind
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 localhost100000    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      

nfs啟動後檢視資訊

[root@nfs01 ~]# rpcinfo -p localhost100000    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      

到此服務端部署配置完成

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

服務端本地測試

存儲服務nfs
存儲服務nfs
存儲服務nfs

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      

NFS 用戶端部署

第一個裡程碑:确認軟體有沒有安裝,進行nfs rpc 服務軟體安裝部署

yum install rpcbind nfs-utils -y      

第二個裡程碑:啟動服務

提示:

rpcbind和nfs軟體都可以不啟動

第三個裡程碑: 檢查NFS服務端是否有可以進行挂載的目錄

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

nfs-utils-1.2.3-75.el6.x86_64      

說明:showmount使用,需要安裝nfs-utils軟體

第四個裡程碑:程序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 檔案系統類型

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

[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      

------------知識深入----------------

NFS服務相關程序資訊

rpcbind        rpc啟動程序 主程序

rpc state     檢查資料存儲的一緻性

rpc.rquotad    磁盤配額

rpc.mountd    權限管理驗證

nfsd            NFS主程序

rpc.idmapd    使用者壓縮映射      

程序/服務 詳細說明

服務或程序名 用途說明
portmapper rpcbind服務的程序(centos5.x 上為 portmap軟體)
rquotad 磁盤配額程序
nfs、nfs_acl   nfs服務程序
nfsd (rpc.nfsd ) rpc.nfsd的主要功能是管理NFS用戶端是否能夠登入NFS伺服器端主機,其中還包括含登入者的ID判別等。
mountd

rpc.mountd的主要功能則是管理NFS檔案系統。當NFS用戶端順利通過rpc.nfsd登入NFS伺服器端主機時,在使用NFS伺服器提供資料之前,它會去讀NFS的配置檔案/etc/exports來比對NFS用戶端的權限,通過這一關之後,還要經過NFS伺服器端本地檔案系統使用權限(就是owner、group、other權限)等認證程式。如果都通過了,NFS用戶端就可以取得使用NFS伺服器端檔案的權限。

注意:這個/etc/exports檔案也是我們用來管理NFS共享目錄的使用權限與安全設定的地方,特别強調,NFS本身設定的是網絡共享權限,整個共享目錄的權限還和目錄自身的系統權限有關。

rpc.lockd (非必要) 用來鎖定檔案,用于多用戶端同時寫入
rpc.statd (非必要) 檢查檔案的一緻性,與rpc.lockd有關。c、d兩個服務雲要用戶端,伺服器端同時開啟才可以;rpc.statd監聽來自其他主機重新開機的通知,并且管理當本地系統重新開機時主機清單。
rpc.idmapd 表示使用者映射或使用者壓縮(重要)

 /etc/exports配置檔案說明

--- /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

指定 NFS用戶端位址的配置詳細說明

用戶端位址            具體位址        說 明
授權單一用戶端通路NFS 10.0.0.30 一般情況,生産環境中此配置不多
授權整個網段可通路NFS 10.0.0.0/24 其中的24等同于255.255.255.0 ,指定網段為生産環境中最常見的配置。配置簡單,維護友善
授權整個網段可通路NFS 10.0.0.* 指定網段的另外寫法(不推薦使用)
授權某個域名用戶端通路 nfs.oldboyedu.com 此方法生産環境中一般情況不常用
授權整個域名用戶端通路 *.oldboyedu.com 此方法生産環境中一般情況不常用

常見案例

常用格式說明 要共享的目錄用戶端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)

說明:允許客戶揣讀寫,并且資料同步寫到伺服器揣的磁盤裡,并且指走用戶端

的使用者UID和GID,早期生産環境的一種配罝,适合多用戶端共享一個NFS服務

單目錄,如果所有伺服器的nfsnobody賬戶UID都是65534,則本例沒什麼必

要了.早期centos5.5的系統預設情況下nfsnobody的UID不一定是65534,

此時如果這些伺服器共享一個NFS目錄,就會出現通路權限問題.

配置例三

/home/oldboy10.0.0.0/24(ro)

說明:隻讀共享

用途:例如在生産環境中,開發人員有檢視生産眼務器日志的需求,但又不希罜

給開發生産伺服器的權限,那麼就可以給開發提供從某個測試伺服器NFS用戶端

上檢視某個生産伺服器的日志目錄(NFS共享)的權限,當然這不是唯一的方法,

例如可以把程式記錄的日志發送到測試伺服器供開發檢視或者通過收集日志等其

它方式展現

nfs服務通路原理

用戶端(無論用什麼使用者通路)---門---服務端(nfsnobody) rpc.idmapd

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      

NFS配置檔案編寫說明

 官方舉例配置

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)      

/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)的權限将被壓縮成為匿名使用者,即通常他的UID與GID都會變成nobody那個身份
all_squash 不論登入NFS的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody
anonuid 可以自行設定這個UID的值,這個UID必需要存在于你的/etc/passwd當中
anongid 同anonuid,但是變成groupID就是了
sync 資料同步寫入到記憶體與硬碟當中
async 資料會先暫存于記憶體當中,而非直接寫入硬碟
insecure 允許從這台機器過來的非授權通路

 nfs配置參數實踐

all_squash 參數實踐

-------不論登入NFS的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody

存儲服務nfs

服務端修改配置

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

[oldboy@backup ~]$ cd /mnt/

[oldboy@backup mnt]$ touch oldboy1.txt

[oldboy@backup mnt]$ ll

-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 oldboy1.txt

-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28      

說明:

不論登入NFS的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody

no_all_squash,root_squash 參數實踐

存儲服務nfs

服務端修改配置

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

[oldboy@backup ~]$ cd /mnt/

[oldboy@backup mnt]$ touch oldboy1.txt

touch: cannot touch `oldboy1.txt': Permission denied

[oldboy@backup mnt]$ touch oldboy2.txt

touch: cannot touch `oldboy2.txt': Permission denied      

服務端驗證:

[root@nfs01 ~]# ll /data/

-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 oldboy1.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      

說明:

no_all_squash,是所有使用者都不進行壓縮,是以oldboy使用者對nfs的目錄沒有寫入的權限(與nfs伺服器的共享目錄權限有關)。root使用者進行壓縮是以可以寫入。

 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 oldboy1.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使用者預設對所有的檔案都有權限,是以可以寫入。(很危險)

推薦方式:

存儲服務nfs

建立使用者和使用者組并指定id

所有伺服器:
groupadd -g 888 www

useradd -s /sbin/nologin -M -u 888 -g 888 www
服務端:
chown  -R www.www /data/rw      
存儲服務nfs