NFS存储服务器(三)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

1. NFS基本概述

NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。

NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中
如果是大型网站, 会用到更复杂的分布式文件系统FastDFS(音频、小说、视频),glusterfs(iso镜像),HDFS
NFS(图片、)解决共享前端web共享

使用数据存储共享服务的原因:

(1)解决前端web静态资源的共享
(2)解决前端web静态资源一致性
(3)解决前端web磁盘空间的浪费

并不能解决网站访问的延时如果想解决访问延时:静态资源—>CDN

总结NFS的优缺点:

1.NFS存储优点
1.NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2.NFS文件系统内存放的数据都在文件系统之上所有数据都是能看得见。

2.NFS存储局限
1.存在单点故障, 如果构建高可用维护麻烦web->nfs(sersync)->backup
2.NFS数据明文, 并不对数据做任何校验。
3.客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)

3.NFS应用建议
1.生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2.必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js
3.如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用

2. NFS应用场景

(1)A用户上传图片经过负载均衡负载均衡将上传请求调度至WEB1服务器上。

(2)B用户访问A用户上传的图片此时B用户被负载均衡调度至WEB2上因为WEB2上没有这张图片所以B用户无法看到A用户传的图片。
在这里插入图片描述

如果有共享存储的情况:

(1)A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储

(2)B用户访问A用户上传图片时无论调度至WEB1还是WEB2最终都会上共享存储访问对应的文件这样就可以访问到资源了

在这里插入图片描述

3. NFS实现原理

在这里插入图片描述

本地文件操作方式:
1.当用户执行mkdir命令, 该命令会调用shell解释器翻译给内核。
2.内核解析完成后会驱动对应的硬件设备完成相应的操作。

NFS实现原理(需要先了解[程序|进程|线程])

1.用户进程访问NFS客户端使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS服务端。
3.NFS服务端接收到请求后会先调用portmap进程进行端口映射。
4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进行验证。
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令传递至内核由内核驱动硬件。

注意: rpc是一个远程过程调用那么使用nfs必须有rpc服务

4. NFS服务端配置

环境准备:

在这里插入图片描述

注意: 不要忘记关闭防火墙, 以免默认的防火墙策略禁止正常的NFS共享服务

4.1 安装服务

(1)安装服务

[root@nfs ~]# yum install nfs-utils -y

4.2 配置服务

(1)/etc/export 配置文件配置

[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

小提示:如果不指定用户默认用户为nfsnobody

(2)创建用户

[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# id www
uid=666(www) gid=666(www) groups=666(www)

(3)创建对应的目录并授权

[root@nfs ~]# mkdir /data  
[root@nfs ~]# chown -R www.www /data/   

4.3 启动服务

(1)启动服务

[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

(2)检查

[root@nfs ~]# cat /var/lib/nfs/etab 
/data	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

5. NFS客户端配置

5.1 安装服务

(1)安装服务

[root@nfs ~]# yum install nfs-utils -y   #rpc软件包、showmount命令

5.2 检查共享目录并挂载

(1)检查nfs是否有共享的内容

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

(2)挂载

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt  
[root@web01 ~]# df -h  
172.16.1.31:/data   99G  1.8G   98G   2% /opt

(3)卸载

1.正常卸载
[root@backup-41 ~]# umount /data/

2.强制卸载
[root@backup-41 ~]# umount -lf /data/

5.3 测试写入数据

(1)进行测试到目录中写入数据

 [root@web01 opt]# pwd
 /opt
 [root@web01 opt]# touch file 
 [root@web01 opt]# mkdir test
 [root@web01 opt]# ll
  total 0
  -rw-r--r-- 1 666 666 0 Jan  7 10:37 file
  drwxr-xr-x 2 666 666 6 Jan  7 10:37 test

(2)客户端如果觉得666不好看建议在客户端上创建同名的用户以及uid (在客户端安装好服务之前创建用户也可以避免后续出现权限不足的情况)

[root@web01 ~]# groupadd -g 666 www
[root@web01 ~]# useradd -u 666 -g 666 www
[root@web01 ~]# id www
uid=666(www) gid=666(www) groups=666(www)
[root@web01 ~]# ll /opt/
total 4
-rw-r--r-- 1 www www 0 Jan  7 11:29 file
-rw-r--r-- 1 www www 0 Jan  7 11:29 test

5.4 实现开机自动挂载

(1)在客户端将nfs挂载信息写入/etc/fstab文件中

	[root@web01 ~]# cat /etc/fstab 
	172.16.1.31:/data    /opt  nfs defaults 0 0

(2)验证fstab开机启动是否填写错误必须要检查

[root@web01 ~]mount -a     

如果编写错误会有如下提示:   
[root@backup-41 ~]# mount -a
mount.nfs: access denied by server while mounting 172.16.1.31:/dataa/w

nfs挂载:客户端当前的目录仅仅只是nfs服务端共享目录的一个入口文件

6. NFS配置参数

执行man exports命令然后切换到文件结尾可以快速查看如下样例格式:

(1)常用参数:

rw*				读写权限
sync*			同时将数据写入到内存与硬盘中保证不丢失数据
all_squash		无论NFS客户端使用什么账户访问均映射为NFS服务器的匿名用户(常用)
anonuid*		配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid*		配置all_squash使用,指定NFS的用户UID,必须存在系统

(2)不常用参数:

ro				只读权限
root_squash		当NFS客户端以root管理员访问时映射为NFS服务器的匿名用户(不常用)
no_root_squash	当NFS客户端以root管理员访问时映射为NFS服务器的root管理员(不常用)
no_all_squash	无论NFS客户端使用什么账户访问都不进行压缩
async			优先将数据保存到内存然后再写入硬盘;这样效率更高但可能会丢失数据

7. NFS自我总结

(1)为了防止出现权限问题在客户端和服务端都创建一个uid=666 gid=666的www用户

(2)在企业工作场景通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频)不需要执行suid、exec等权限挂载的这个文件系统只能作为数据存取之用无法执行程序对于客户端来讲增加了安全性。例如: 很多木马篡改站点文件都是由上传入口上传的程序到存储目录然后执行的。

#通过mount -o指定挂载参数禁止使用suidexec增加安全性能
[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /mnt

(3)有时也需要考虑性能相关参数

#通过mount -o指定挂载参数禁止更新目录及文件时间戳挂载
[root@nfs-client ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /mnt

(4)NFS扩展项

#1.扩展:无需重启NFS服务平滑加载配置文件
[root@nfs01 r]# cat /etc/exports
/data/r 172.16.1.0/24(ro)
/data/p 172.16.1.0/24(ro)
/data/w 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

[root@nfs01 r]# exportfs -rv
exporting 172.16.1.0/24:/data/w
exporting 172.16.1.0/24:/data/p
exporting 172.16.1.0/24:/data/r

#2.扩展:nfs客户端挂载参数
[root@backup-41 ~]# mount.nfs4 -o noatime,nodiratime,noexec,nodev,nosuid 172.16.1.31:/data/r /data/r/

#3.扩展:nfs客户端永久挂载参数
[root@backup-41 ~]# tail -2 /etc/fstab
172.16.1.31:/data/r /data/r nfs defaults,noatime,nodiratime,noexec,nodev,nosuid 0 0
172.16.1.31:/data/w /data/w nfs defaults,noatime,nodiratime,noexec,nodev,nosuid 0 0

#4.扩展:客户端检查挂载参数是否生效
[root@backup-41 ~]# mount
#等价于
[root@backup-41 ~]# cat /proc/mounts 
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 服务器