1.概述

存储: 用于存放用户上传的内容(数据),一般应用在网站集群中

为何用?
如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到.
如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储.

image-20240529170351492.png

1.1存储分类

分类说明
硬件存储硬件存储,硬盘多,使用的时候挂载即可
开源软件普通存储NFS(linux),Samba(windows) 分布式存储: GlusterFS,Ceph,.....FastDFS,MinIO
云产品阿里云OSS(对象存储),七牛云存储,腾讯云COS,华为OSS

1.2NFS原理

NFS (Network File System): 网络文件系统.

2个服务组成
NFS服务
rpcbind(portmap)服务

关于RPC的说明:
RPC远程过程调用,本质起到调度作用.
rpc服务从CentOS 6开始叫rpcbind,之前叫portmapper.

image-20240529170550908.png

2.部署及使用

2.1服务部署

yum install -y rpcbind nfs-utils
#utils工具集合

2.2启动

#启动rpcbind
systemctl enable rpcbind
systemctl start rpcbind
rpcinfo -p
#启动nfs
systemctl enable nfs
systemctl start nfs
rpcinfo -p


#NFS服务端的配置
vim /etc/exports
/data/     172.16.1.0/24(rw)
systemctl reload nfs

#NFS服务端后续配置:创建数据目录与修改权限
chown nfsnobody.nfsnobody   /data/
reload下nfs或restart下.

#挂载存储
mount -t nfs  172.16.1.31:/data/   /mnt/


rpcinfo -p 检查nfs服务端的rpc信息. 主要检查是否有NFS信息即可.
showmount -e ip 检查nfs服务端共享信息(共享哪些目录)
检查NFS共享了哪些目录

2.3 客户端挂在

yum install -y nfs-utils
mount -t nfs 172.16.1.31:/data   /mnt

3.NFS相关的文件

nfs服务端或客户端说明
NFS服务端配置/etc/exports(配置文件里面的) -> /var/lib/nfs/etab(当前使用的nfs服务端配置)
NFS客户端配置客户端:mount /etc/rc.local 或/etc/fstab ->/proc/mounts (当前系统的挂载情况)
nfs客户端永久挂载

方法01 挂载命令写入到/etc/rc.local  
chmod +x /etc/rc.d/rc.local
方法02 按照/etc/fstab格式要求书写
设备                 挂载点         文件系统类型      挂载参数   是否检查 是否备份
172.16.1.31:/data/   /upload/     nfs             defaults         0       0


温馨提示:
如果配置了nfs客户端永久挂载,未来要优先启动nfs服务端.

4.NFS服务端的配置文件

4.1服务端核心配置

服务端配置选项说明
rw可以读写共享目录
ro只读 read only
sync同步,只要用户上传,就把数据写到磁盘上.
async异步,用户上传的数据,nfs先临时存放到内存中,过一段时间写入到磁盘. 并发高,数据可能丢失.
理解:同步与异步⭐ ⭐ ⭐ ⭐ ⭐ 
幼儿园工作
同步: 挨个小伙伴问,你是否要上wc.
异步: 画了个圈圈,需要去wc的到这个圈圈中,定时去带走圈圈里面的人.
同步在网站架构中指的是直接访问对应的资源.
异步在网站架构中利用各种缓存达到用户优先访问缓存,缓存没有再访问对应服务.

4.2服务端用户压缩

NFS客户端挂载NFS服务端后,创建的文件默认属于nfsnobody,这种操作就叫用户压缩(映射).
用户压缩是通过NFS服务端的配置实现.
服务端配置选项-用户压缩系列
root_squash如果客户端是root用户访问,则到了nfs服务端会被压缩( 默认的)
no_all_squash如果客户端不是root用户访问,则不进行压缩(保存原始用户, 默认的 )
all_squash所有用户都进行压缩(不是太安全)
anonuid 和 anongid用于指定压缩的匿名用户(默认是nfsnobody用户) anonuid=65534,anongid=65534

image-20240529171646899.png

5.NFS优化

mount  -o noexec,nosuid,nodev  -t nfs 
#这几个是客户端挂载选项
noexec 挂载的nfs目录中如果有命令,无法运行。
nosuid 带有suid的命令
nodev 带有特殊属性的文件。