NFS存儲服務(下)
第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 65534的nfsnobody用戶(確保所有客戶端的訪問權限統一,否則每個機器需要同時建立相同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 0(dump) 0(fsck) |
需要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 rsize和wsize的作用
rsize ---設定數據讀取到內存中,內存中預留空間大小
wsize ---設定數據存儲到內存中,內存中預留空間大小
設置大一點,提升NFS傳輸的能力(設置的值為2的倍數,centos6默認為130721)
類似於緩存區,會影響客戶端和服務端緩存數據的存儲量,最大傳輸速率越快,根據網絡傳輸帶寬決定大小,不要超過帶寬
3.4.6 suid的作用
讓普通用戶執行命令時相當於root用戶,一般用於腳本(默認值)
如目錄和目錄下的文件都是suid,root和普通用戶都可以訪問,其他的情況普通用戶都不能訪問。
3.4.7 exec和noexec的作用
相當於x權限,如果是noexec,用戶則沒有執行權限
3.4.8 user和nouser的作用
是否允許普通用戶掛載或卸載文件系統(默認不允許,root才行)
3.4.9 auto和noauto的作用
執行mount -a 時,是否自動掛載(默認為auto)
3.4.10 atime 和noatime、nodiratime的作用
每次訪問數據時,會同步更新訪問文件的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 noatime,nodiratime,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存儲服務(下)