1.NFS配置權(quán)限
1)rw 可讀寫數(shù)據(jù)。(read write)
2)ro 只能讀數(shù)據(jù)扳埂。(read only)
3)sync 寫數(shù)據(jù)到磁盤中宋彼,速度慢但是安全。
4)async 異步寫數(shù)據(jù)到遠程緩沖區(qū)披坏,速度快,但是不安全盐数。
5)all_squash 不管客戶端什么用戶寫數(shù)據(jù)到共享目錄棒拂,到服務端都是nfsnobody。
6)anonuid 匿名用戶的UID玫氢。
7)anongid 匿名用戶的GID帚屉。
2.客戶端和服務器端安全掛載以及優(yōu)化
2.1CentOS7.6 6 x86--_64服務器端和客戶端環(huán)境下,使用如下參數(shù):
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
默認掛載參數(shù)如下:
mount -t nfs 172.16.1.31:/data /mnt
兩種方法相比較的話C7默認的掛載參數(shù)性能還是很不錯的漾峡,但在考慮安全以及優(yōu)化掛載的情況下涮阔,推薦第一種,但要注意非性能的參數(shù)越多灰殴,速度可能會越慢敬特。
2.2企業(yè)生產(chǎn)場景NFS共享存儲優(yōu)化總結(jié)
1)硬件方面:sas/ssd磁盤,買多塊牺陶,硬件raid伟阔,制作raid5或rdid10般此,網(wǎng)卡吞吐量要大疮方,至少千兆。
2)NFS服務器端配置:
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
3)NFS客戶端掛載優(yōu)化配置命令(兼顧安全性能):
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072172.16.1.31:/data /data
4)對NFS服務的所有服務器內(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 生效狮鸭。
如果卸載的時候提示:umount.nfs4: /data: device is busy合搅,則需要退出掛載目錄在進行卸載,如果是NFS server宕機了歧蕉,則需要強制卸載灾部,可執(zhí)行umount -lf /mnt。
大型網(wǎng)站NFS網(wǎng)絡文件系統(tǒng)的替代軟件為分布是文件系統(tǒng)Moosefs(mfs)惯退、
GlusterFS赌髓、FastDFS。
3.NFS系統(tǒng)應用的優(yōu)缺點
NFS服務可以讓不同的客戶端掛載使用同一個共享目錄催跪,也就是將其作為共享存儲使用锁蠕,這樣可以保證不同節(jié)點客戶端數(shù)據(jù)的一致性,在集群架構(gòu)環(huán)境中經(jīng)常會用到懊蒸。如果是Windows和Linux混合環(huán)境的集群系統(tǒng)荣倾,可以用samba來實現(xiàn)。
3.1優(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ěn)定
3.2局限性:
1)存在單點故障隙姿,如果NFS宕機了,所有客戶端都不能訪問共享目錄厂捞。(但是可以用負載均衡以及高可用方案彌補)
2)在大數(shù)據(jù)高并發(fā)的場合输玷,NFS效率、性能有限(2千萬/天以下PV的網(wǎng)站不是瓶頸靡馁,除非網(wǎng)站架構(gòu)設(shè)計太差)欲鹏。
3)客戶端認證是基于IP和主機名的,權(quán)限要根據(jù)ID識別臭墨,安全性一般(用于內(nèi)網(wǎng)則問題不大)
3.3應用建議:
大中小型網(wǎng)站線上應用以及門戶網(wǎng)站都可以應用赔嚎,在生產(chǎn)場景應該多把數(shù)據(jù)的訪問往前推,即盡量把靜態(tài)存儲里的資源通過CDN或緩存服務器提供服務胧弛,如果沒有緩存服務或架構(gòu)不好尤误,存儲服務器數(shù)量再多也是扛不住壓力的,而且用戶體驗會很差结缚。
1)使用CDN加速以及自己搭建文件緩存服務(squid损晤,nginx,varnish)掺冠。
2)把多個目錄分配到不通的NFS服務器上沉馆。
3)棄用NFS码党。
4)使用分布式文件系統(tǒng)德崭。
4.項目實踐
需求一、NFS共享的匿名用戶用www揖盘,使得客戶端上傳的圖片都是www用戶眉厨,而不是匿名的nfsnobody。
需求二兽狭、web01 web02客戶端實現(xiàn)掛載到nfs憾股。
需求三鹿蜀、NFS下面共享/backup ,允許web01 web02客戶端(/backup)可讀寫服球。
需求四茴恰、web01上傳圖片,web02上可以刪除web01上傳的圖片斩熊。
需求五往枣、實現(xiàn)開機自動掛載。
需求六粉渠、掛載的時候要優(yōu)化掛載分冈。
解答:
一、在原有的優(yōu)化好的虛擬機上克隆3臺虛擬機分別為nfs霸株、web01雕沉、web02,并配置內(nèi)網(wǎng)IP分別為172.16.1.31去件、172.16.1.7坡椒、172.16.1.8,外網(wǎng)IP為10.0.0.31尤溜、10.0.0.7肠牲、10.0.0.8,并重啟網(wǎng)卡連接xshell靴跛。
二缀雳、在3臺服務器上安裝nfs-utils、rpcbind服務梢睛。
yum install nfs-utils rpcbind
rpm -qa nfs-utils rpcbind
三肥印、在nfs服務器中啟動nfs、rpcbind服務并設(shè)置開機自啟動绝葡,在web01和web02中開啟rpcbind服務并設(shè)置開機自啟動深碱。
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs
四、在nfs服務器中以及所有客戶端中創(chuàng)建用戶www并指定UID為1111藏畅,然后創(chuàng)建目錄/data敷硅,并授權(quán)用戶和組為www
[root@nfs01 /]# useradd -u 1111 www
[root@nfs01 /]# id www
uid=1111(www) gid=1111(www)組=1111(www)
[root@nfs01 /]# chown www.www /data
[root@nfs01 /]# ls -ld /data
drwxr-xr-x 2 www www 15 4月 1811:26 /data
五、在nfs服務器中添加配置文件到/etc/exports中愉阎,然后平滑重啟服務(實際生產(chǎn)場景中必須平滑重啟)绞蹦,并查看共享目錄是否存在。
[root@nfs01 /]# echo "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)" >>/etc/exports
[root@nfs01 /]# tail -1 /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
[root@nfs01 /]# systemctl reload nfs
[root@nfs01 /]# showmount -e 172.16.1.31
Export list for
172.16.1.31: /data 172.16.1.0/24
六榜旦、每個客戶端中執(zhí)行優(yōu)化掛載并添加到開機自動掛載(web01和web02操作完全一樣)
[root@web01 /]# mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 172.16.1.31: /data /data
[root@web01 /]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
172.16.1.31:/data 18G 2.0G 16G 11% /data
[root@web01 /]# echo " mount -t nfs -o #(此命令為一條)noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 172.16.1.31:/data /mnt /data /data " >>/etc/rc.local
[root@web01 /]# tail -1 /etc/rc.local
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 172.16.1.31:/data /data
七幽七、在服務端以及客戶端下創(chuàng)建/backup目錄,并在服務端授權(quán)目錄用戶和組為www溅呢,然后添加到配置文件到/etc/exports中澡屡,重啟nfs服務猿挚,并查看共享目錄是否存在。
[root@nfs01 /]# mkdir -p /backup
[root@nfs01 /]# chown www.www /backup
[root@nfs01 /]# echo "/backup 172.16.1.0/24(rw)" >>/etc/exports
[root@nfs01 /]# tail -1 /etc/exports
/backup 172.16.1.0/24(rw)
[root@nfs01 /]# systemctl reload nfs
[root@nfs01 /]# showmount -e 172.16.1.31
Export list for
172.16.1.31:
/data 172.16.1.0/24
/backup 172.16.1.31
八驶鹉、客戶端中優(yōu)化掛載并添加到開機自啟動程序中
[root@web02 /]# echo "mount -t nfs -o #(此命令為一條)noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072
172.16.1.31:/backup /mnt" >>/etc/rc.local
[root@web02 /]# tail -1 /etc/rc.local #(此命令為一條)
mount -t nfs -o
noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072
172.16.1.31:/backup /mnt