1.概述
存储: 用于存放用户上传的内容(数据),一般应用在网站集群中
为何用?
如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到.
如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储.

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.

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 |

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