1.1概述
- 存储:用户存放上传的内容(数据),一般应用在网站集群中
- 为何用?
1. 如果不使用存储,用户上传的数据就直接存放在网站服务器上,用户下次访问可能找不到
2. 如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储
位置:网站后排
1.2 存储分类
存储要求:空间大
分类 说明 | |
---|---|
硬件存储 硬件存储,硬盘多,使用的时候挂载 (我也可以自己部署) | |
开源软件 普通存储NFS(Linux),samba (windows)/分布式存储GlusterFS,Ceph,FastDFS;MinIO(高性能云原生数据,大数据等)–k8s配合 | |
云产品 阿里云OSS(对象存储)七牛云存储(程序代码测试),腾讯云COS,华为oss |
NFS原理
- NFS(network file system):网络文件系统
- 2个服务组成
- NFS存储
- rpcbind(portmap)服务
1.RPC远程过程调用,本质起到调度作用
2.RPC服务从Centos 6开始叫rpcbind,之前叫做portmapper
1.3操作
环境说明
环境 主机 | ||
---|---|---|
nfs01服务端 nfs01192.168.28.131/172.16.1.31 | ||
nfs客户端 web01 192.168.28.7/172.16.1.7 通过挂载进行使用 |
服务端部署
部署
yum install -y rpcbind nfs-utils
#utils工具集合
启动
#启动rpcbind systemctl enable rpcbind systemctl start rpcbind
rpcinfo -p
#启动NFS
systemctl enable nfs
systemctl start nfs
NFS服务端配置
cat /etc/exports
/data/ 172.16.1.0/24(rw)
#配置表示这个网段对NFS服务端的/data目录,并且拥有读写的权限#不推荐使用restart,这里我们在NFS推荐使用reload(重新加载配置文件)systemctl reload nfs
reload与restart区别?
reload 表示优雅重启,不会断开已有的连接
restart在nfs中,会导致客户端一段时间夯住
NFS服务端后续配置
创建数据目录与修改权限
chown -R nfsnobody.nfsnobody /data/
reload下的nfs或restart下
NFS服务端本地进行测试:使用(挂载)
挂载存储
mount -t nfs 172.16.1.131:/data/ /mnt/
排错指令:rpcinfo -p ip 或 showmount -e ip
rpcinfo -p 检查nfs服务端的rpc信息,主要检查是否有NFS信息
showmount -e ip 检查nfs服务端共享信息(共享那些目录)
客户端挂载
yum install -y nfs-utils
mount -t nfs 172.16.1.131:/data /mnt
故障案例:
mount wrong fs type 错误的文件系统类型,客户端无法识别nfs
需要在客户端安装nfs-utils,不用启动
web服务器进行创建目录
nfs01存储服务器是否有web服务器创建的目录
在web服务器创建目录(相当于在上传文件)–文件就放在了存储服务器上面
如果在web服务器上删掉了文件,存储服务器是否还有文件呢?
- 测试发现我在web服务器上cd /mnt/执行rm -f *删掉了我上传web服务器上的文件–》在存储服务器nfs01上进行查看发现没有了文件
- 挂载的本质在这里相当于直接用网线将nfs01存储服务器和web01服务器连接,所有的操作此时都是针对于data目录(删除或者增加)
- 所以用户对web01上的目录进行增删改查,也就是对存储器服务器进行增删改查
NFS相关的文件
nfs服务端或客户端 说明 | |
---|---|
nfs服务端配置 /etc/exports(配置文件里面的)-》/var/lib/nfs/etab(当前使用的nfs服务端配置) | |
NFS客户端配置 客户端:mount /etc/rc.local或 /etc/fstab -》/proc/mounts(当前系统的挂载情况) |
nfs客户端永久挂载
方法1: 挂载命令写入到/etc/rc.local
chmod +x /etc/rc.d/rc.local
方法2: 按照/etc/fstab格式要求进行书写
设备 挂载点 文件系统类型 挂在参数 是否检查 是否备份
172.16.1.131:/data/ /upload/ nfs defaults 0 0
注意:
如果配置了nfs172.16.1.131这个挂载,开机的时候会自动寻找nfs客户端进行自动挂载,但是有一个前提;若把nfs客户端关闭了就不能,若关闭了并进行重启,它就会在开机的时候进行卡住(1-2分钟崩掉)
所以如果配置了nfs客户端永久挂载,未来要优先启动nfs客户端
NFS服务端的配置文件
/etc/exports | |
---|---|
第一部分 第二个部分 | |
共享目录 网段(选项) |
NFS配置文件中网络配置
网段 | |||
---|---|---|---|
172.16.1.7 指定ip | |||
172.16.1.0/24 最常用 |
baidu.com 指定域名
服务端核心配置
服务端配置选项 说明 | |
---|---|
rw 可以读写共享目录 | |
ro 只读read only | |
sync 同步,只要用户上传,就把数据写到磁盘上 | |
async 异步,用户上传的数据,nfs先临时存放到内存中,过一段时间写入到磁盘,并发高,数据可能丢失 |
- 同步与异步
同步:按流程次序进行
异步:对于相同的操作整合在一起,并且集体执行并且带走集体里面整体的内容执行
同步在网站架构中指的是直接访问对应的资源
异步在网络架构中利用各种缓存达到用户优先访问缓存,缓存没有再访问对应的服务
服务端用户压缩
-
NFS客户端挂载NFS端后,创建的文件默认属于nfsnobody,这种操作称为用户压缩(映射)
-
用户压缩是通过NFS服务端的配置进行实现的
root_squash 如果是客户端root用户访问,到lnfs服务端会被压缩(默认)
no_all_squash 如果客户端不是root用户访问,则不进行压缩(保持原始用户,默认)
all_squash 所有用户都进行压缩(不是太安全)
anonuid和anongid 用于指定压缩的匿名用户(默认是nfsnobody用户) anonuid=65534,anongid=65534
服务都安配置选项 说明
用户压缩/用户映射:NFS客户端访问NFS共享目录时候变成了什么用户
nfs客户端用户 nfs服务端用户
root -----》 nfsnobody
用户压缩案例
用户压缩案例:
-
设置/nfsdata共享目录,匿名用户为www.客户端挂载到/upload-video
-
/www用户的uid,gid:1999(服务端,客户端)
流程:
- 部署nfs服务,tpcbind
- 添加用户www,指定uid,gid
- 修改服务端配置文件
- 客户端进行挂载测试
所有主机(nfs服务端和nfs客户端)
添加用户www uid
1999 1999
nfs服务端配置
nfs客户端挂载
所有主机(nfs服务端和nfs客户端) 添加用户www uid1999 1999 groupadd -g 1999 www useradd -u 1999 -g www -s
/sbin/nologin -M wwwnfs 服务端配置 cat /etc/exports/data/ 172.16.1.0/24 (rw) /nfsdta/ 172.16.1.0/24 (rw,all_squash,anonuid = 1999,anongid=1999)
nfs 客户端挂载 mount - nfs 172.16.1.31:/nfsdata /upload-video/ du -h /upload-video/ touch /upload-video/lidao.txt ll /upload-video/
NFS优化
终极优化目标:
-
尽可能让用户的请求在访问网站架构之前解决掉。(尽可能把用户的请求往前推)
-
NFS优化:硬件(物理服务器+nfs服务)
-
NFS安全优化:客户端挂载只能上传,无法执行.
mount -o noexec,nosuid,nodev -t nfs
172.16.1.31:/data /video/
#这几个是客户端挂载选项
noexec挂载的nfs目录中如果有命令,无法运行。
nosuid带有suid的命令
nodev带有特殊属性的文件。
- NFS有单点故障,选择其他存储:公有云OSS(阿里云)(对象存储在代码里面调用)
- 研究分布式存储:GlusterFS(GFS),MinIO