NFS存儲服務(下)


第1章 回顧及練習

1.1  回顧總結

1.1.1 NFS存儲服務是什麼?

        網絡文件系統,實現數據共享統一一致 node

1.1.2 NFS工做原理

1. 什麼是rpc服務web

rpc服務相似於中介,nfs服務將啓動的進程和端口信息,向rpc服務進行註冊vim

nfs客戶端向rpc服務發出請求,進行共享目錄掛載,從而實現經過網絡存儲數據信息centos

2. 服務端作了三件事:緩存

①. 首先啓動rpc服務安全

②. 其次啓動nfs服務服務器

③. nfs服務向rpc服務進行註冊,只註冊一次(若是nfs服務進行了重啓,會再次註冊)網絡

3. 客戶端作了三件事:架構

①. 啓動rpc服務(能夠不用啓動)併發

②. 利用tcp協議,與nfs服務端rpc服務(111端口)創建網絡鏈接

③. 利用mount命令進行網絡存儲設備掛載

1.1.3 NFS服務部署流程

1. 服務端部署流程:

01. 檢查服務軟件是否正確安裝,進行軟件安裝

02. 編寫nfs配置文件

03. 建立共享存儲目錄,並進行受權

04. 啓動nfs相關服務(先啓動rpcbind服務 再啓動nfs服務)

05. 檢查服務啓動狀況

    rpcinfo -p 172.16.1.31    ---檢查nfs服務是否向rpc服務進行註冊

   showmount -e 172.16.1.31  ---檢查nfs服務端是否有可使用的共享目錄

2. 客戶端部署流程:

01. 檢查服務軟件是否正確安裝,進行軟件安裝

02. 檢查服務啓動狀況

    rpcinfo -p 172.16.1.31    ---檢查nfs服務是否向rpc服務進行註冊

showmount -e 172.16.1.31  ---檢查nfs服務端是否有可使用的共享目錄

03. 進行網絡掛載

    mount -t nfs 172.16.1.31:/data /mnt

1.1.4 NFS配置文件編寫說明

      1. 配置共享目錄信息

      2. 設置容許網絡共享目錄的主機或網絡信息

      3. 設置共享目錄權限和相關參數

1.1.5 配置文件中重要參數說明

rw     ---共享目錄權限爲讀寫

ro     ---共享目錄權限爲只讀

sync   ---將數據同步存儲到硬盤中(通過內存以後存儲到硬盤)

async  ---將數據異步存儲到內存中

root_squash      ---root進行壓縮映射

no_root_squash   ---root用戶不進行壓縮映射

all_squash       ---所有用戶進行壓縮映射

no_all_squash    ---所有用戶不進行壓縮映射

anonuid          ---修改默認映射用戶信息,將默認nfsnobody映射用戶變爲指定用戶

說明:實現用戶靈活壓縮映射的進程rpc.idmapped

    爲何默認映射用戶是nfsnobody

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

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

[root@nfs01 ~]# id nfsnobody

uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

[root@nfs01 ~]#  cat /var/lib/nfs/etab           ---etab文件爲nfs默認配置記錄文件

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

 說明:在默認配置記錄文件中,已經默認指明,默認映射用戶爲nfsnobody

 知識點總結:

man exports查閱更多exports參數說明

配置好NFS服務後,經過cat /var/lib/nfs/etab命令能夠看到NFS配置的參數以及默認自帶的參數

1.2 測驗鏈接nfs服務配置

1.2.1 要求:共享不一樣的兩個目錄,分別賦予讀和寫權限

    服務端上面要求:

    nfs服務器172.16.1.31,共享下面兩個目錄:

    /data/w 要求的權限可讀寫,同步數據,全部用戶都壓縮爲匿名用戶

    /data/r 要求的權限爲只讀,同步數據,全部用戶都壓縮爲匿名用戶

    客戶端上面要求:

    backup服務器 NFS服務器的/data/r 掛載到/data/r

    web01服務器 NFS服務器的/data/w 掛載到/data/w

1.2.2  服務端部署過程

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

vim /etc/exports

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

/data/r  172.16.1.0/24(ro,sync,all_squash)

 第二個里程:建立配置文件中指定的共享目錄,並進行受權

mkdir /data/{w,r} -p

chown -R nfsnobody.nfsnobody /data/{w,r}

 第三個里程:重啓nfs服務(平滑重啓)

/etc/init.d/nfs reload

 第四個里程:檢查是否生成新的共享目錄信息

showmount -e 172.16.1.31

Export list for 172.16.1.31:

    /data/r 172.16.1.0/24

    /data/w 172.16.1.0/24

1.2.3 客戶端部署過程:(web01 backup兩臺客戶機)

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

yum install -y nfs-utlis rpcbind

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

第二個里程:進行網絡掛載

    web01

mkdir /data/w -p

mount -t nfs 172.16.1.31:/data/w  /data/w


    backup

    mkdir /data/r -p

mount -t nfs 172.16.1.31:/data/r  /data/r

 第三個里程:檢查測試

    web01:對共享目錄有讀寫權限

    backup:對共享目錄只有只讀權限

[root@backup r]# touch test.txt

touch: cannot touch `test.txt': Read-only file system

 

 說明強調:在nfs服務端配置共享目錄時,會遵循目錄的繼承條件

                 當上一級共享目錄爲讀寫時,下一級共享目錄就算爲只讀模式,也會繼承上一級目錄的權限

第2章  NFS服務常見故障排查

2.1 【第一個常見錯誤】

2.1.1 【錯誤出現提示】

    ls: cannot open directory .: Stale file handle

提示文件句柄錯誤:

2.1.2 【錯誤出現緣由】

客戶端原有掛載的共享目錄,在服務端已經取消共享了,但客戶端並無進行卸載

2.1.3 【錯誤解決方法】

nfs客戶端,將不存在共享目錄進行卸載

若是經過df -h命令沒法查詢到不存在的共享目錄的掛載點信息,能夠經過一個特殊文件獲取

    nfs客戶端查看文件:cat /proc/mounts           ---nfs客戶端掛載默認配置記錄文件

nfs服務端查看文件:cat /var/lib/nfs/etab         ---nfs服務端默認配置記錄文件

2.2 【第二個常見錯誤】

2.2.1 【錯誤出現提示】

  客戶端掛載報錯No such file or directory

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

mount.nfs: mounting 172.16.1.31:/data/ failed, reason given by server: No such file or directory

2.2.2 【錯誤出現緣由】

NFS服務端沒有共享目錄/data

2.2.3 【錯誤解決方法】

NFS服務端,建立便可。

2.3 【第三個常見錯誤】

2.3.1 【錯誤出現提示】

[root@nfs-client1 ~]# showmount -e 10.0.0.7

    clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

2.3.2 【錯誤出現緣由】

nfs服務端防火牆開啓了,阻止了鏈接rpc 111端口的請求

2.3.3 【錯誤解決方法】

nfs服務端防火牆服務關閉,或者配置容許用戶主機訪問111端口策略

2.4 【第四個常見錯誤】

2.4.1 【錯誤出現提示】

    [root@nfs-client1 ~]# showmount -e 10.0.0.7

clnt_create: RPC: Program not registered

2.4.2 【錯誤出現緣由】

01. nfs服務先啓動了,rpcbind服務後啓動了

02. nfs服務中止了

說明:rpc服務中沒有nfs服務註冊的信息了

2.4.3 【錯誤解決方法】

從新先啓動rpcbind服務,在啓動nfs服務

2.5 【第五個常見錯誤】

2.5.1 【錯誤出現提示】

卸載掛載設備時顯示device is busy

[root@nfs-client mnt]# umount /mnt

    umount.nfs: /mnt: device is busy

    umount.nfs: /mnt: device is busy

2.5.2 【錯誤出現緣由】

01. 可能nfs客戶端掛載和nfs服務端共享目錄有網絡數據傳輸

02. 你所處的目錄路徑,就是在掛載點之中

2.5.3 【錯誤解決方法】

    umount -lf  /data/r

-l   Lazy unmount          --- 懶惰卸載

-f   Force  unmount      --- 表示強制卸載

2.6 【第六個常見錯誤】

2.6.1 【錯誤出現提示】

    共享目錄掛載很卡

2.6.2 【錯誤緣由說明】

    nfs服務端服務進行重啓的時候(不是平滑重啓),nfs服務會進入一個90s無敵時間

    nfs服務重啓就比如發出一個大招, 要有90秒冷卻時間

在系統配置中/etc/sysconfig/nfs中指定了無敵時間的配置參數

    NFSD_V4_GRACE=90

    NFSD_V4_LEASE=90

    NLM_GRACE_PERI0D=90

2.7 NFS報錯排查思路

2.7.1 排查nfs服務端是否存在問題

rpcinfo -p 172.16.1.31

showmount -e 172.16.1.31

本地掛載測試:mount -t nfs 172.16.1.31:/data /mnt (掛載成功,進入mnt目錄建立文件 刪除文件測試一下)

2.7.2 排查nfs客戶端是否存在問題

rpcinfo -p 172.16.1.31

showmount -e 172.16.1.31

網絡掛載測試:mount -t nfs 172.16.1.31:/data /mnt (掛載成功,進入mnt目錄建立文件 刪除文件測試一下)

第3章  NFS服務的重點知識梳理

3.1 權限相關

3.1.1 NFS客戶端訪問服務端的權限

  當多個NFS客戶端訪問服務器端的讀寫文件時,須要具備如下幾個權限:

 NFS服務器/etc/exports設置須要開放可寫入的權限,即服務器端的共享權限。

 NFS服務器實際要共享的NFS目錄權限具備可寫入w的權限,即服務器端本地目錄的安全權限。

 ③ 每臺機器對應存在和NFS默認配置UID的相同UID 65534nfsnobody用戶(確保全部客戶端的訪問權限統一,不然每一個機器須要同時創建相同UID的用戶,並覆蓋NFS的默認用戶配置)

3.1.2 共享目錄權限總結

    1)與服務端配置文件中權限參數設置有關

    2)本地共享目錄自己權限有關

    3)與客戶端掛載參數有關

3.2 相關執行配置文件

/usr/sbin/exportfs         ---能夠管理nfs服務運行狀態 能夠配置共享目錄

/usr/sbin/exportfs -r      ---nfs服務平滑重啓命令

/usr/sbin/exportfs   -v #顯示共享詳細信息

注:通常組合用/usr/sbin/expostfs -rv

[root@nfs01 ~]# /usr/sbin/exportfs -rv

exporting 172.16.1.0/24:/data/r

exporting 172.16.1.0/24:/data/w

3.2.1 擴展:exportfs

 man exportfs

 NAME

       exportfs - maintain table of exported NFS file systems

用於管理當前的NFS共享的文件系統列表,exportfs -rv=/etc/init.d/nfs  reload 加載配置生效;啓動了NFS服務以後,若是修改了/etc/exports,就須要從新啓動nfs,使修改的配置文件生效,就能夠用exportfs命令完成。

[root@nfs01 ~]# exportfs -o rw,sync  172.16.1.0/24:/data     < - 利用exportfs命令指定要共享的目                                                                                                          錄,並指定共享給那些客戶端地址

[root@nfs01 ~]# showmount -e 172.16.1.31                     exportfs命令建立共享目錄,是臨時生效

 Export list for 172.16.1.31:

/data   172.16.1.0/24

/data/r 172.16.1.0/24

/data/w 172.16.1.0/24

image.png 

3.3 NFS客戶端開機自啓動掛載

3.3.1  利用/etc/rc.local文件實現自動掛載

echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local

3.3.2 利用/etc/fstab文件實現自動掛載    

vim /etc/fstab

掛載什麼         掛載到哪  類型    掛載參數 是否備份  是否檢查磁盤

172.16.1.31:/data       /mnt           nfs     defaults    0dump  0fsck

須要netfs服務的配合:chkconfig netfs on

說明:netfs服務做用:在網絡服務啓動以後,讓系統從新讀取加載/etc/fstab文件(由於默認狀況  /etc/fstab會先啓動,network服務會後啓動,致使網絡自動掛載不上,因此須要讓netfs服務在network服務後啓動一下)

image.png 

查看命令的啓動順序:

[root@backup ~]# head /etc/init.d/netfs

# chkconfig: 345 25 75

# description: Mounts and unmounts all Network File System (NFS), \

[root@backup ~]# head /etc/init.d/network 

# network       Bring up/down networking

# chkconfig: 2345 10 90

[root@backup ~]# ll /etc/rc.d/rc3.d/|grep local   ---網絡服務啓動後加載rc.local文件

lrwxrwxrwx. 1 root root 11 Dec  8 12:38 S99local -> ../rc.local

注:S99表示最後加載這個配置文件

3.4 NFS客戶端掛載參數說明

3.4.1 共享目錄權限總結:

01. 共享目錄權限和配置文件中權限參數設置有關

02. 共享目錄權限和目錄自己權限有關

03. 共享目錄權限和客戶端掛載參數有關

3.4.2 查看客戶端掛載歷史記錄與默認參數

  cat /proc/mounts

3.4.3 客戶端前臺和後臺掛載 

mount -t nfs -o fg 172.16.1.31:/data  /mnt    --- 前臺掛載(默認)

mount -t nfs -o bg 172.16.1.31:/data  /mnt    --- 後臺掛載

3.4.4 軟掛載和硬掛載

soft 軟掛載 :一直嘗試掛載,超時後退出(timeout後有可能丟失數據,不推薦使用)

  hard 硬掛載:一直嘗試掛載,不中止(通常配合intr參數使用),默認爲head

hard+intr =soft軟掛載

3.4.5 rsizewsize的做用

rsize      ---設定數據讀取到內存中,內存中預留空間大小

wsize      ---設定數據存儲到內存中,內存中預留空間大小

設置大一點,提高NFS傳輸的能力(設置的值爲2的倍數,centos6默認爲130721)

相似於緩存區,會影響客戶端和服務端緩存數據的存儲量,最大傳輸速率越快,根據網絡傳輸帶寬決定大小,不要超過帶寬

image.png 

3.4.6  suid的做用

讓普通用戶執行命令時至關於root用戶,通常用於腳本(默認值)

  如目錄和目錄下的文件都是suid,root和普通用戶均可以訪問,其餘的狀況普通用戶都不能訪問。

image.png              

3.4.7 execnoexec的做用

至關於x權限,若是是noexec,用戶則沒有執行權限

3.4.8 usernouser的做用

是否容許普通用戶掛載或卸載文件系統(默認不容許,root才行)

3.4.9  autonoauto的做用

執行mount -a 時,是否自動掛載(默認爲auto)

3.4.10 atime noatimenodiratime的做用

每次訪問數據時,會同步更新訪問文件的Inode時間戳。

  高併發環境使用noatime,nodiratime,提高系統I/O性能

3.4.11 remount的做用

從新掛載,針對於已經掛載的設備或目錄

例:mount -t nfs -o remount,ro 172.16.1.31:/data /mnt

image.png 

3.5  NFS客戶端優化掛載的參數

 Centos6優化參數: 

mount -t nfs -o noatimenodiratime,nosuid,noexec,nodevp,rsize=131072,wsize=131072         172.16.1.31:/data  /mnt

 通過實際測試,默認參數性能也不錯:mount -t nfs 172.16.1.31:/data /mnt

3.6 NFS系統應用的優勢

    1.    簡單,易操做

    2.    NFS內的數據是在文件系統之上的,能夠看得見的。

    3.    部署方便,可控制,配置文件一條命令便可搞定,

    4.    可靠性高

5.    服務很是穩定

3.7 NFS系統應用缺點

 1. 存在單點故障(NFS服務器宕機了,其餘用戶都不能訪問了)

 2. 不適用於高併發(2千萬以上訪問量)

 3. 沒有認證(基於IP和主機名),安全性低

 4. NFS數據是明文的(通常內網通訊)

 5. 其餘與架構有關,好比客戶端與服務端的耦合性(實時同步可解耦)  

應用建議

對於大中小網站(參考點2000萬/日 PV如下)線上應用,都有用武之地,門戶網站也會有應用,生產場景應用多將數據的訪問往前推,即儘可能將靜態存儲裏的資源經過CDN或緩存服務器提供服務,若是沒有緩存服務或架構很差,存儲服務器數量再多也是扛不住壓力的,並且用戶體驗會不好。

相關文章
相關標籤/搜索