1. 程式人生 > >NFS存儲服務(下)

NFS存儲服務(下)

use 控制 記錄 實時同步 實現 無法查詢 是否 show 認證

第1章 回顧及練習

1.1 回顧總結

1.1.1 NFS存儲服務是什麽?

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

1.1.2 NFS工作原理

1. 什麽是rpc服務

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

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

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

技術分享圖片

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服務後啟動一下)

技術分享圖片

查看命令的啟動順序:

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

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

技術分享圖片

3.4.6 suid的作用

讓普通用戶執行命令時相當於root用戶,一般用於腳本(默認值)

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

技術分享圖片

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

技術分享圖片

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或緩存服務器提供服務,如果沒有緩存服務或架構不好,存儲服務器數量再多也是扛不住壓力的,而且用戶體驗會很差。


NFS存儲服務(下)