NFS共享存储
目录
内容概述
1.NFS概念
-1.1 什么是NFS
-1.2 为什么要使用NFS
2.NFS应用
-2.1 有NFS和没有NFS的情景
-2.2 NFS的原理
3.NFS实践
-3.1 部署NFS服务端
-3.2 客户端挂载验证
4.NFS挂载与卸载
5.NFS配置解析
6.NFS总结
内容详细
1.NFS概念
1.1 什么是NFS
NFS是Network File System的缩写,它可以让不同操作系统,不同的机器通过网络共享彼此的文件.
NFS服务器:NFS服务器可以让主机将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利.
1.2 为什么要使用NFS
1.实现多台服务器之间的数据共享.
2.实现多台服务器之间数据的一致性.
2.NFS应用
2.1 有NFS和没有NFS的情景
1.没有NFS的情景
你上传了一张图片到服务器上,经过负载均衡,负载均衡将请求调度到了web01服务器上.
你的小伙伴访问你刚上传的图片,这时他的请求被负载均衡调度至web02上,web02上没有那张图片,于是他看不到你刚上传的图片,于是友谊的小船直接被掀翻...
2.有NFS的情景
有NFS就完全不会出现上述情况,无论请求被调度至哪台web服务器,数据都会被写入共享存储NFS,这样所有的用户都能访问到数据了.
2.2 NFS的原理
NFS服务端部署完毕后,其他的客户端需要将NFS的共享目录挂载到自己文件系统的某个挂载点上才能共享数据.
1.NFS挂载原理:
首先在NFS服务器设置好一个共享目录/DATA/web后,有权访问NFS服务器的客户端将NFS的共享目录挂载到自己文件系统的某个挂载点,如果服务器端配置的客户端只读,那么客户端就只能够只读.如果配置读写,客户端就能够进行读写.挂载后,NFS客户端查看磁盘信息命令:# df –h
2.RPC服务:
RPC(Remote Procedure Call)即远程过程调用.RPC最主要的功能就是在指定每个NFS功能所对应的端口号并且回报给客户端,让客户端可以连接到正确的端口上去.
3.NFS客户端和NFS服务端通讯过程
1.)服务器端启动RPC服务,并开启111端口
2.)服务器端启动NFS服务,并向RPC注册端口信息
3.)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4.)服务端的RPC(portmap)服务反馈NFS端口信息给客户端
5.)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输
3.NFS实践
3.1 部署NFS服务端
1.准备环境
两台主机:
web01 ip: 172.16.1.7 NFS客户端
nfs ip: 172.16.1.31 NFS服务端
2.部署服务端:
1.)关闭防火墙,selinux # 万恶的两兄弟,没卵用,必须关!
systemctl disable --now firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.)安装NFS以及rpcbind
yum install -y nfs-utils rpcbind
3.)配置NFS配置文件
cat >> /etc/exports << EOF
/data 172.16.1.0/24(rw,sync,all_squash)
EOF
# /data : NFS服务器的共享目录
# 172.16.1.0/24 : NFS允许连接的客户端ip段
# (rw,sync,all_squash) : 允许客户端操作的权限
4.)创建共享目录
mkdir /data
5.)授权服务端目录
chown -R nfsnobody.nfsnobody /data
6.)启动服务
systemctl start rpcbind nfs-server
验证是否启动:netstat -lntp | grep rpc
7.)验证NFS配置
cat /var/lib/nfs/etab
3.2 客户端挂载验证
1.关闭防火墙,selinux
systemctl disable --now firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.安装NFS服务
yum install -y nfs-utils rpcbind
3.查看挂载点
# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
4.挂载
mount -t nfs 172.16.1.31:/data /backup/
# 验证挂载
df -h
5.写入数据进行测试
cd /backup
touch test.txt
服务端客户端均进行查看
4.NFS挂载与卸载
配置NFS客户端时,先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址(权限)”.
NFS挂载:客户端的目录仅仅是服务端共享目录的一个入口,可以简单理解为软连接,真正的数据全都是存储在服务端的目录,客户端写入的数据也是在服务端存储的.
# 注意:
1.挂载目录后,原来文件下的内容不会丢失,仅仅是被遮盖住,取消挂载后仍然存在
2.取消挂载时不要在挂载的目录下面操作,否则会提示忙碌,切换到其他目录再进行卸载
3.挂载是如果在挂载的目录下,还是可以看到挂载前目录下的文件,需要重新进入目录才会显示挂载后目录的内容
挂载:
mount -t nfs 172.16.1.31:/data /backup
解析:
mount # 挂载命令
-t # 指定挂载的文件类型
nfs # NFS文件类型
172.16.1.31 # 服务端的IP地址
:/data # 服务端提供的可挂载目录
/backup # 本地要挂载到服务端的目录
挂载之后查看挂载:
df -h | grep /backup
卸载:
umount /backup
umount 172.16.1.31:/data
# 强制取消挂载
umount -lf /backup
开机自动挂载:
# 编辑配置文件:
cat >> /etc/fstab << EOF
EOF
验证fstab是否写入正确
mount -a
5.NFS配置解析
cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
rw 共享的⽬录权限为可读写
sync 数据写⼊内存时,同时将数据保存到磁盘
all_squash ⽆论使⽤什么⽤户,都压缩权限,压缩成指定的⽤户
anonuid 指定的⽤户的uid
anongid 指定的⽤户的gid
ro ⽂件权限为只读
async 先把数据保存到内存,再写⼊磁盘
no_all_squash ⽆论使⽤什么⽤户,都不压缩权限
root_squash 客户端使⽤root访问时,压缩权限
no_root_squash 客户端使⽤root访问时,不压缩权限
6.NFS总结
NFSC存储优点:
1.NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求
2.NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见的,便于管理
NFS存储的局限性和不足:
1.NFS数据传输采用明文, 并不对数据做任何校验.
2.存在单点故障, 如果构建高可用,则维护较为不便 web -> nfs -> backup
3.客户端挂载NFS服务没有密码验证, 安全性一般(只推荐在内网环境下使用)
对NFS的展望和建议:
1.生产场景应将静态数据尽可能往前端推,以减少后端的存储压力.
2.必须将存储里的静态资源通过CDN缓存,比如:jpg\png\mp4\avi\css\js
3.即使有了存储,如果没有缓存的话,也还是有很多的局限性.