NFS案例和深入掛載
all_squash不管客戶端什么用戶,到服務(wù)端都是nfsnobody
anonuid=匿名用戶的UID
anongid=匿名用戶的GID
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
更改默認NFS默認
用戶項目實踐2:
NFS共享的匿名用戶用www,使得客戶端上傳的圖片都是www用戶,而不是匿名的nfsnobody。
?web01?backup客戶端實現(xiàn)掛載到nfs。
??NFS下面共享/backup?,允許web01?backup客戶端(/backup)可讀寫。
web01上傳圖片,backup上可以刪除web01上傳的圖片。
?NFS下面共享/data1,允許?web01?backup客戶端10網(wǎng)段只讀(data1)。
實現(xiàn)開機自動掛載。
1)nfs01服務(wù)端NFS、以及所有客戶端:
[root@nfs01?~]#?useradd?-u?1111?www
[root@nfs01?~]#?id?www
uid=1111(www)?gid=1111(www)?組=1111(www)
2)服務(wù)端NFS特殊配置:
[root@nfs01?~]#?tail?-2?/etc/exports
/data?172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1?10.0.0.0/24(ro)
[root@nfs01?~]#?chown?-R?www.www?/data
[root@nfs01?~]#?ls?-ld?/data
drwxr-xr-x?2?www?www?70?4月??18?10:05?/data
3)服務(wù)端NFS重啟:
[root@nfs01?~]#?systemctl?reload?nfs
4)每個客戶端配置
mount?-t?nfs?172.16.1.31:/data?/data
[root@web01?~]#?df?-h
文件系統(tǒng)? ? ? ? ? ? ? ? ? ? ? 容量? ? ? ? ? ? ? ?已用? ? ? ?可用? ? ? ? ? ? 已用%? ? ? ? ? 掛載點
172.16.1.31:/data? ? ? ?19G? ? ? ? ? ? ? ? ? ?1.8G? ? ?18G? ? ? ? ? ? ? ? 10%? ? ? ? ? ? /data
[root@web01?/data]#?touch?new_web01.txt
[root@web01?/data]#?ls?-l
總用量0
-rw-r--r--?1?www?www?0?4月??16?10:24?ddddf
-rw-r--r--?1?www?www?0?4月??16?10:23?dddfff
-rw-r--r--?1?www?www?0?4月??18?11:01?new_web01.txt
-rw-r--r--?1?www?www?0?4月??17?11:59?oldboy.txt
-rw-r--r--?1?www?www?0?4月??17?12:30?oldgirl.txt
NFS服務(wù)的重點知識梳理:
當多個NFS客戶端訪問服務(wù)器端讀寫文件時,需要具有以下幾個權(quán)限:
1、NFS服務(wù)器/etc/exports設(shè)置需要開放可寫入的權(quán)限,即服務(wù)器的共享權(quán)限。
2、NFS服務(wù)器實際要共享的NFS目錄權(quán)限具有可寫入w的權(quán)限,即服務(wù)端本地目錄的安全權(quán)限。
3、每臺機器都對應(yīng)存在和NFS默認配置UID的相同UID65534的nfsnobody用戶(確保所有客戶端的訪問權(quán)限統(tǒng)一,否則每個機器需要同時建立相同UID的用戶,并覆蓋NFS的默認用戶配置。)
重點NFS服務(wù)文件或命令的說明:
/etc/export:NFS服務(wù)主配置文件,配置NFS具體共享服務(wù)的地點,默認內(nèi)容為空。。以行為單位。
/usr/sbin/exportfs:NFS服務(wù)的管理命令。
/us/sbin/showmount:用來在客戶端,查看NFS配置及掛載結(jié)構(gòu)的命令。
/var/lib/nfs/etab:NFS配置文件完整參數(shù)文件(有很多沒有配置但是默認就有的NFS參數(shù))。
/proc/mounts:客戶端本地掛載參數(shù)和狀態(tài)信息的文件。
NFS客戶端掛載參數(shù)列表:


mount -o參數(shù)對應(yīng)的選項:


man mount后的-o參數(shù)中英文翻譯對比:
rasync:設(shè)計文件系統(tǒng)I/O的操作都是異步處理,即不會同步寫到磁盤,此參數(shù)會提高性能,單會降低數(shù)據(jù)安全。一般情況下,生產(chǎn)環(huán)境下不推薦使用。除非對性能要求很高,對數(shù)據(jù)可靠性不要求的場合。
sync:該參數(shù)與async相反。有I/O操作時,都會同步處理I/O即把數(shù)據(jù)同步寫入硬盤。此參數(shù)會犧牲一點I/O性能,但是,換來的是掉電后數(shù)據(jù)的安全性。
atime:在每一次數(shù)據(jù)訪問時,會同步更新訪問文件的inode時間戳,是默認選項,在高并發(fā)的情況下,建議通過明確加上moatime,來取消這個默認項,以達到提升I/O性能,優(yōu)化I/O的目的。
ro:以制度的方式掛載一個文件系統(tǒng)。
rw:以可寫的方式掛載一個文件系統(tǒng)。
auto:能夠被自動掛載通過 -a選項。
noaut:不會自動掛載文件系統(tǒng)。
defaults:這是fstab里的默認值,包括rw、suid、dev、exec、auto、nouser、async,默認情況大部分都是默認值。
exec:允許文件系統(tǒng)執(zhí)行二進制文件,取消這個參數(shù),可以提升系統(tǒng)安全性。
noexec:在掛載的文件系統(tǒng)中不允許直接執(zhí)行任何二進制的程序,注意,僅對二進制程序有效,即使設(shè)置了noexec、shell,php程序還是可以執(zhí)行的。
noatime:訪問文件時不更新文件的inode時間戳,高并發(fā)環(huán)境,推薦顯式應(yīng)用該選項,可以提高系統(tǒng)I/O性能。
nosuid:不允許set-user-identifier or set-group-identifier位生效。
suid:允許set-user-identifier or set-group-identifier位生效。
nouser:禁止一個普通用戶掛載該文件系統(tǒng),這是默認掛載時的默認選項。
remount:嘗試重新掛載一個已經(jīng)掛載了的文件系統(tǒng),這通常被用來改變一個文件通的掛載標志,從而使得一個只讀文件系統(tǒng)變得可寫,這個動作不會改變設(shè)備或者掛載點。當系統(tǒng)故障時進入siingle或rescue模式修復系統(tǒng)時,會發(fā)現(xiàn)根文件系統(tǒng)經(jīng)常會變成只讀文件系統(tǒng),不允許修改,此時該命令就派上用場。具體命令為:mount -o remount,rw/,表示將根文件系統(tǒng)重新掛載使得可寫。single或rescue模式修復系統(tǒng)是這個命令十分重要。
dirsync:目錄更新是同步寫入磁盤。
企業(yè)生產(chǎn)案例文件系統(tǒng)只讀故障;和fstab故障
1、救援模式修復
2、當用戶,mount -o ????remount,rw ?/
2)安全加優(yōu)化的掛載方式如下:
mount -t nfs -o nosuid,noexec,nodev,notime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
NFS內(nèi)核優(yōu)化建議
/proc/sys/net/core/rmem_default:該文件制定了接收套接字緩沖區(qū)大小的默認值(以字節(jié)為單位),默認設(shè)置:124928
/proc/sys/net/core/rmem_max:該文件制定了接收套介質(zhì)緩沖區(qū)大小的最大值(以字節(jié)為單位),默認設(shè)置:12928
/proc/sys/net/core/wmem_default:該文件制定了發(fā)送套接字緩沖區(qū)大小的默認值(以字節(jié)為單位),默認設(shè)置:12928
/proc/sys/net/core/wmem_max:該文件制定了發(fā)送套接字緩沖區(qū)大小的默認值(以字節(jié)為單位),默認設(shè)置:12928
企業(yè)生產(chǎn)場景NFS共享存儲優(yōu)化小結(jié)
(1)硬盤:SAS/SSD硬盤,買多塊,硬件raid,制作raid5或raid10. 網(wǎng)卡吞吐量要大,至少千兆(多塊bond)
(2)NFS服務(wù)器配置:/data 10.0.0.0/24 (rw,sync,all_squash,anounid=65534,anongid=65534)
(3)NFS客戶端掛載優(yōu)化配置命令:
mount -t nfs -o nosudi,noexec,noatime,nodiratime,rsize=131072,wsize=131072 10.0.0.7:/data/ /mnt
(4)對NFS服務(wù)的所有服務(wù)器內(nèi)核進行優(yōu)化時,執(zhí)行如下命令:
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
執(zhí)行sysctl -p生效
(5)如果卸載的時候提示“umount: /mnt: device is busy”,需要退出掛載目錄再進行卸載,如果是NFS ?server宕機了,則需要強制卸載,可執(zhí)行umount -lf /mnt。
(6)大型網(wǎng)站NFS網(wǎng)絡(luò)文件系統(tǒng)的替代軟件為分布式文件系統(tǒng)Moosefs(mfs)、GlusterFS、FastDFS。
阿里云對應(yīng)的存儲服務(wù)NAS服務(wù),還有OSS對象存儲。
NFS系統(tǒng)應(yīng)用的優(yōu)缺點說明:
NFS服務(wù)可以讓不同的客戶端掛載使用同一個共享目錄,也就是將其作為共享存儲使用,這樣可以保證不同節(jié)點客戶端數(shù)據(jù)的一致性,在集群架構(gòu)環(huán)境中經(jīng)常會用到。如果是windows和linux混合環(huán)境的集群系統(tǒng),可以用samba來實現(xiàn)。
優(yōu)點:
(1)簡單,容易上手,容易掌握。
(2)NFS文件系統(tǒng)內(nèi)數(shù)據(jù)是在文件系統(tǒng)智商的,即數(shù)據(jù)是能看得見的。
(3)部署快速,維護簡單方便,且可控,滿足需求的就是最好的。
(4)可靠,從軟件層面上看,數(shù)據(jù)可靠性高,經(jīng)久耐用。數(shù)據(jù)是在文件系統(tǒng)上的。
(5)服務(wù)非常穩(wěn)定。
局限:
(1)存在單點故障,如果NFS ?Server宕機了,所有客戶端都不能訪問共享目錄。這個在后期的課程會通過負載均衡及高可用方案彌補。
(2)在大數(shù)據(jù)高并發(fā)的場合,NFS效率、性能有限(2千萬/日一下PV的網(wǎng)站不是瓶頸,除非網(wǎng)站架構(gòu)設(shè)計太差)。
(3)客戶端認證是基于IP和主機名的,權(quán)限要根據(jù)ID識別,安全性一般(用戶內(nèi)網(wǎng)則問題不大)。
(4)NFS數(shù)據(jù)是明文的,NFS本身不對數(shù)據(jù)完整性作驗證。
(5)多臺客戶機掛載一個NFS服務(wù)器時,連接管理維護麻煩(耦合度高)。尤其NFS服務(wù)端出問題后,所有NFS客戶端都處于掛掉狀態(tài)(測試環(huán)境可使用autofs自動掛載解決,正式環(huán)境可修復NFS服務(wù)或強制卸載)。
(6)涉及了同步(實時等待)和異步(解耦)的概念,NFS服務(wù)端和客戶端相對來說就是耦合度有些高。網(wǎng)站程序也是一樣,盡量不要耦合度太高,系統(tǒng)及程序架構(gòu)師的重要職責就是為程序及架構(gòu)解耦,讓往后在哪的擴展性變得更好。
應(yīng)用建議:
大中小型網(wǎng)站(參考點2千萬/日PV以下)線上應(yīng)用,都有用武之地。門戶網(wǎng)站也會有應(yīng)用,生產(chǎn)場景應(yīng)該多把數(shù)據(jù)的訪問往前推,即盡量把靜態(tài)存儲里的資源通過CDN或緩存服務(wù)器提供服務(wù),如果沒有緩存服務(wù)或架構(gòu)不好,存儲服務(wù)器數(shù)量再多也是扛不住壓力的,而且用戶體驗很差。
解決NFS性能問題:
(1)使用CDN加速以及自己搭建文件緩存服務(wù)(squid,nginx,varnish)。
(2)把多個目錄分配到不同的NFS服務(wù)器上。
(3)棄用NFS
(4)使用分布式文件系統(tǒng)

本章重點回顧:
(1)NFS服務(wù)的訪問原理流程(會口述)
(2)NFS作為集群共享存儲角色的搭建、部署。
(3)NFS作為集群存儲角色的排障,高級優(yōu)化(會口述)
(4)mount命令的知識及參數(shù),如-o(noatime,nodiratime,noexec,nosuid,rsize,wsize)等。
(5)fstab文件知識以及fstab故障修復。
(6)常用命令showmount\exportfs\umount(-lf)、rpcinfo。
(7)NFS的優(yōu)點、缺點,適合的應(yīng)用場景,替代產(chǎn)品(FastDFS、Moosefs(mfs)、GlusterFS)。
(8)NFS架構(gòu)上性能解決方案。
(9)了解autofs。