NFS案例和深入挂载
all_squash不管客户端什么用户,到服务端都是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客户端实现挂载到nfs。
NFS下面共享/backup ,允许web01 backup客户端(/backup)可读写。
web01上传图片,backup上可以删除web01上传的图片。
NFS下面共享/data1,允许 web01 backup客户端10网段只读(data1)。
实现开机自动挂载。
1)nfs01服务端NFS、以及所有客户端:
[root@nfs01 ~]# useradd -u 1111 www
[root@nfs01 ~]# id www
uid=1111(www) gid=1111(www) 组=1111(www)
2)服务端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)服务端NFS重启:
[root@nfs01 ~]# systemctl reload nfs
4)每个客户端配置
mount -t nfs 172.16.1.31:/data /data
[root@web01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
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服务的重点知识梳理:
当多个NFS客户端访问服务器端读写文件时,需要具有以下几个权限:
1、NFS服务器/etc/exports设置需要开放可写入的权限,即服务器的共享权限。
2、NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务端本地目录的安全权限。
3、每台机器都对应存在和NFS默认配置UID的相同UID65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置。)
重点NFS服务文件或命令的说明:
/etc/export:NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为空。。以行为单位。
/usr/sbin/exportfs:NFS服务的管理命令。
/us/sbin/showmount:用来在客户端,查看NFS配置及挂载结构的命令。
/var/lib/nfs/etab:NFS配置文件完整参数文件(有很多没有配置但是默认就有的NFS参数)。
/proc/mounts:客户端本地挂载参数和状态信息的文件。
NFS客户端挂载参数列表:
mount -o参数对应的选项:
man mount后的-o参数中英文翻译对比:
rasync:设计文件系统I/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,单会降低数据安全。一般情况下,生产环境下不推荐使用。除非对性能要求很高,对数据可靠性不要求的场合。
sync:该参数与async相反。有I/O操作时,都会同步处理I/O即把数据同步写入硬盘。此参数会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性。
atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项,在高并发的情况下,建议通过明确加上moatime,来取消这个默认项,以达到提升I/O性能,优化I/O的目的。
ro:以制度的方式挂载一个文件系统。
rw:以可写的方式挂载一个文件系统。
auto:能够被自动挂载通过 -a选项。
noaut:不会自动挂载文件系统。
defaults:这是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、async,默认情况大部分都是默认值。
exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全性。
noexec:在挂载的文件系统中不允许直接执行任何二进制的程序,注意,仅对二进制程序有效,即使设置了noexec、shell,php程序还是可以执行的。
noatime:访问文件时不更新文件的inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。
nosuid:不允许set-user-identifier or set-group-identifier位生效。
suid:允许set-user-identifier or set-group-identifier位生效。
nouser:禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。
remount:尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变一个文件通的挂载标志,从而使得一个只读文件系统变得可写,这个动作不会改变设备或者挂载点。当系统故障时进入siingle或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场。具体命令为:mount -o remount,rw/,表示将根文件系统重新挂载使得可写。single或rescue模式修复系统是这个命令十分重要。
dirsync:目录更新是同步写入磁盘。
企业生产案例文件系统只读故障;和fstab故障
1、救援模式修复
2、当用户,mount -o remount,rw /
2)安全加优化的挂载方式如下:
mount -t nfs -o nosuid,noexec,nodev,notime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
NFS内核优化建议
/proc/sys/net/core/rmem_default:该文件制定了接收套接字缓冲区大小的默认值(以字节为单位),默认设置:124928
/proc/sys/net/core/rmem_max:该文件制定了接收套介质缓冲区大小的最大值(以字节为单位),默认设置:12928
/proc/sys/net/core/wmem_default:该文件制定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:12928
/proc/sys/net/core/wmem_max:该文件制定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:12928
企业生产场景NFS共享存储优化小结
(1)硬盘:SAS/SSD硬盘,买多块,硬件raid,制作raid5或raid10. 网卡吞吐量要大,至少千兆(多块bond)
(2)NFS服务器配置:/data 10.0.0.0/24 (rw,sync,all_squash,anounid=65534,anongid=65534)
(3)NFS客户端挂载优化配置命令:
mount -t nfs -o nosudi,noexec,noatime,nodiratime,rsize=131072,wsize=131072 10.0.0.7:/data/ /mnt
(4)对NFS服务的所有服务器内核进行优化时,执行如下命令:
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
执行sysctl -p生效
(5)如果卸载的时候提示“umount: /mnt: device is busy”,需要退出挂载目录再进行卸载,如果是NFS server宕机了,则需要强制卸载,可执行umount -lf /mnt。
(6)大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS、FastDFS。
阿里云对应的存储服务NAS服务,还有OSS对象存储。
NFS系统应用的优缺点说明:
NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会用到。如果是windows和linux混合环境的集群系统,可以用samba来实现。
优点:
(1)简单,容易上手,容易掌握。
(2)NFS文件系统内数据是在文件系统智商的,即数据是能看得见的。
(3)部署快速,维护简单方便,且可控,满足需求的就是最好的。
(4)可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统上的。
(5)服务非常稳定。
局限:
(1)存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录。这个在后期的课程会通过负载均衡及高可用方案弥补。
(2)在大数据高并发的场合,NFS效率、性能有限(2千万/日一下PV的网站不是瓶颈,除非网站架构设计太差)。
(3)客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用户内网则问题不大)。
(4)NFS数据是明文的,NFS本身不对数据完整性作验证。
(5)多台客户机挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。
(6)涉及了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让往后在哪的扩展性变得更好。
应用建议:
大中小型网站(参考点2千万/日PV以下)线上应用,都有用武之地。门户网站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验很差。
解决NFS性能问题:
(1)使用CDN加速以及自己搭建文件缓存服务(squid,nginx,varnish)。
(2)把多个目录分配到不同的NFS服务器上。
(3)弃用NFS
(4)使用分布式文件系统
本章重点回顾:
(1)NFS服务的访问原理流程(会口述)
(2)NFS作为集群共享存储角色的搭建、部署。
(3)NFS作为集群存储角色的排障,高级优化(会口述)
(4)mount命令的知识及参数,如-o(noatime,nodiratime,noexec,nosuid,rsize,wsize)等。
(5)fstab文件知识以及fstab故障修复。
(6)常用命令showmount\exportfs\umount(-lf)、rpcinfo。
(7)NFS的优点、缺点,适合的应用场景,替代产品(FastDFS、Moosefs(mfs)、GlusterFS)。
(8)NFS架构上性能解决方案。
(9)了解autofs。