NFS案例和深入掛載
all_squash不管客戶(hù)端什么用戶(hù),到服務(wù)端都是nfsnobody
anonuid=匿名用戶(hù)的UID
anongid=匿名用戶(hù)的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)
更改默認(rèn)NFS默認(rèn)
用戶(hù)項(xiàng)目實(shí)踐2:
NFS共享的匿名用戶(hù)用www,使得客戶(hù)端上傳的圖片都是www用戶(hù),而不是匿名的nfsnobody。
?web01?backup客戶(hù)端實(shí)現(xiàn)掛載到nfs。
??NFS下面共享/backup?,允許web01?backup客戶(hù)端(/backup)可讀寫(xiě)。
web01上傳圖片,backup上可以刪除web01上傳的圖片。
?NFS下面共享/data1,允許?web01?backup客戶(hù)端10網(wǎng)段只讀(data1)。
實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)掛載。
1)nfs01服務(wù)端NFS、以及所有客戶(hù)端:
[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)每個(gè)客戶(hù)端配置
mount?-t?nfs?172.16.1.31:/data?/data
[root@web01?~]#?df?-h
文件系統(tǒng)? ? ? ? ? ? ? ? ? ? ? 容量? ? ? ? ? ? ? ?已用? ? ? ?可用? ? ? ? ? ? 已用%? ? ? ? ? 掛載點(diǎn)
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ù)的重點(diǎn)知識(shí)梳理:
當(dāng)多個(gè)NFS客戶(hù)端訪(fǎng)問(wèn)服務(wù)器端讀寫(xiě)文件時(shí),需要具有以下幾個(gè)權(quán)限:
1、NFS服務(wù)器/etc/exports設(shè)置需要開(kāi)放可寫(xiě)入的權(quán)限,即服務(wù)器的共享權(quán)限。
2、NFS服務(wù)器實(shí)際要共享的NFS目錄權(quán)限具有可寫(xiě)入w的權(quán)限,即服務(wù)端本地目錄的安全權(quán)限。
3、每臺(tái)機(jī)器都對(duì)應(yīng)存在和NFS默認(rèn)配置UID的相同UID65534的nfsnobody用戶(hù)(確保所有客戶(hù)端的訪(fǎng)問(wèn)權(quán)限統(tǒng)一,否則每個(gè)機(jī)器需要同時(shí)建立相同UID的用戶(hù),并覆蓋NFS的默認(rèn)用戶(hù)配置。)
重點(diǎn)NFS服務(wù)文件或命令的說(shuō)明:
/etc/export:NFS服務(wù)主配置文件,配置NFS具體共享服務(wù)的地點(diǎn),默認(rèn)內(nèi)容為空。。以行為單位。
/usr/sbin/exportfs:NFS服務(wù)的管理命令。
/us/sbin/showmount:用來(lái)在客戶(hù)端,查看NFS配置及掛載結(jié)構(gòu)的命令。
/var/lib/nfs/etab:NFS配置文件完整參數(shù)文件(有很多沒(méi)有配置但是默認(rèn)就有的NFS參數(shù))。
/proc/mounts:客戶(hù)端本地掛載參數(shù)和狀態(tài)信息的文件。
NFS客戶(hù)端掛載參數(shù)列表:


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


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

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