NFS企业级网络存储服务2
1.1 NFS配置参数权限
参数名称 参数用途
rw read-write,表示可读写权限
ro read-only,表示只读权限
sync 请求或写入数据时,数据同步写入到硬盘才完成
async 异步写到远程缓冲区
all_squash 不管客户端什么用户,到服务端都会被压缩成匿名用户
anonuid 匿名用户的UID
anongid 匿名用户的GID
在配置文件内设置共享目录时所给予的权限:
[root@nfs01 ~]$ cat /etc/exports/data172.16.1.0/24(rw,sync)10.0.0.0/24(ro)
配置好NFS服务后,/var/lib/nfs/etab文件中可以看到的配置参数以及默认自带的参数:
[root@nfs01 ~]$ cat /var/lib/nfs/etab/data172.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
1.1.1 更改NFS默认用户
1.1.1.1 nfs01服务端NFS、以及所有客户端:
[root@nfs01 ~]$ useradd -u1111www
[root@nfs01 ~]$ id wwwuid=1111(www) gid=1111(www) 组=1111(www)
1.1.1.2 服务端NFS特殊配置
配置文件增加如下内容:
[root@nfs01 ~]$ tail -2/etc/exports/data172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)/data110.0.0.0/24(ro)
共享目录更改用户和用户组:
[root@nfs01 ~]$ chown -R www.www /data
[root@nfs01 ~]$ ls -ld /data
drwxr-xr-x2www www704月1810:05/data
1.1.1.3 服务端NFS重启
[root@nfs01 ~]$ systemctl reload nfs
1.1.1.4 每个客户端挂载
[root@web01 ~]$ mount -t nfs172.16.1.31:/data /data
[root@web01 ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
172.16.1.31:/data 19G 1.8G1 8G 10% /data
新创建文件验证用户名:
[root@web01 /data]#touchnew_web01.txt
[root@web01 /data]#ls-l
总用量 0
-rw-r--r--1wwwwww0 4月 18 11:01new_web01.txt
-rw-r--r--1wwwwww0 4月 17 11:59oldboy.txt
-rw-r--r--1wwwwww0 4月 17 12:30oldgirl.txt
1.2 NFS服务重点知识梳理
当多个NFS客户端访问服务器端读写文件时,需要具有以下几个权限:
1. NFS服务器/etc/exports设置需要开放许可写入的权限,即服务器端的共享权限
2. NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限
3. 每台机器都对应存在和NFS默认配置UID的相同UID的用户
下表列出了常用的重点NFS服务文件或命令。
NFS常用路径 说明
/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为 空
/var/lib/nfs/etab NFS配置文件的完整参数设定的文件
/proc/mounts 客户端的挂载参数
1.3 NFS客户端挂载深入
1.3.1 mount -o 参数选项及系统默认设置
参数 参数意义 系统默认值
suid/nosuid 当挂载的文件系统上有任何SUID的程序时, suid
只要使用nosuid就能够取消设置SUID的功能
rw/ro 可以指定文件系统是只读(ro)或可读写(rw) rw
dev/nodev 是否可以保留装置文件的特殊功能 dev
exec/noexec 是否具有执行文件的权限 exec
user/nouser 是否允许用户拥有文件的挂载与卸载功能 nouser
auto/noauto auto指的是“mount -a”时会不会被挂载的项目 auto
如果不需要这个分区随时被挂载,可以设置为noauto
1.3.2 mount -o 参数详细说明
参数选项 说明
async 涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘, 能提高性能,但会降低数据安全。
sync 有I/O操作时,都会同步处理I/O,会降低性能,但数据比较安全。
atime 在每一次数据访问时,会更新访问文件的时间戳,是默认选 项,在高并发的情况下,可以通过添加noatime来取消默认项。
ro 以只读的方式挂载一个文件系统
rw 以可读写的方式挂载一个文件系统
auto 能够被自动挂载通过-a选项
noauto 不会自动挂载文件系统
defaults 这是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、 async
exec 允许文件系统执行二进制文件,取消这个参数,可以提升系统 安全性。
noexec 在挂载的文件系统中不允许执行任何二进制程序,进仅对二进 制程序有效。
noatime 访问文件时不更新文件的时间戳,高并发情况下,一般使用该 参数
nodiratime 不更新文件系统上的directory inode时间戳,高并发环境,推荐 显式应用该选项,可以提高系统I/O性能。
nosuid 不允许set-user-identifier or set-group-identifier位生效。
suid 允许set-user-identifier or set-group-identifier位生效。
nouser 禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选 项。
remount 尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变 一个文件系统的挂载标志,从而使得一个只读文件系统变的可 写,这个动作不会改变设备或者挂载点。当系统故障时进人 single或rescue模式修复系统时,会发现根文件系统经常会变 成只读文件系统,不允许修改,此时该命令就派上用场了。具 体命令为:mount -o remount,rw /,表示将根文件系统重新挂载 使得可写。single或rescue模式修复系统时这个命令十分重要。
dirsync 目录更新时同步写人磁盘。
1.3.3 企业生产场景NFS共享存储优化
1. 硬件:使用ssd/sas磁盘,可以买多块,制作成raid10。
2. NFS服务器端配置:
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
3. NFS客户端挂载优化配置命令:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,
rsize=131072,wsize=131072172.16.1.31:/data/mnt <===兼顾安全性能
4. 对NFS服务的所有服务器内核进行优化,执行命令如下:
cat>>/etc/sysctl.conf<<EOF
net.core.wmen_default = 8388608
net.core.rmen_default = 8388608
net.core.wmen_max = 16777216
net.core.rmen_max = 16777216
EOF
执行sysctl -p 生效
5. 大型网站NFS网络文件系统的替代软件为分布式文件系统,如:Moosefs(mfs)、GlusterFS、FastDFS。
1.4 NFS系统应用的优缺点
1.4.1 优点
1. 简单,容易上手,容易掌握。
2. NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。
3. 部署快速维护简单方便,且可控,满足需求就是最好的。
4. 可靠,从软件层面上看,数据可靠性高,经久耐用。
5. 服务非常稳定。
1.4.2 缺点(局限)
1. 存在单点故障,如果NFS服务端宕机了,所有客户端都不能访问共享目录。
2. 在大数据高并发的场合,NFS效率、性能有限。
3. 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般。
4. NFS数据是明文的,NFS本身不对数据完整性进行验证。
5. 多台客户机挂载一个NFS服务器时,连接管理维护麻烦。
1.4.3 解决性能问题的方法
1. 使用CDN加速以及自己搭建文件缓存服务(squid、nginx、varnish)。
2. 把多个目录分配到不同的NFS服务器上。
3. 弃用NFS(即读写分离)。
4. 使用分布式文件系统。