一、基础概念
NFS是一种网络文件系统,实现数据一致性,文件共享
NFS将硬盘进行共享,共享的目录;两台服务器的前提下不同用户如何实现上传访问到静态图片/视频都能看到相同的数据则使用NFS
其实现在很多企业都会有一个CDN分布式文件缓存,这个缓存可以实现将静态图片/视频上传到CDN分布式文件缓存(要钱),好处是:客户端反应贼快(看)但是如果NFS挂了就只能看,不能上传
本地挂载:mount /dev/sdb/ /mnt
NFS挂载:mount -t nfs 10.0.0.31:/data /mnt # data是挂载点目录 /mnt是挂载点
我们的底层逻辑是:IP+端口 #这样的方式实现通信的
二、微型架构图:
1、架构详解
1.1、无CDN分布式文件缓存
用户访问域名通过LB的DR模式(负载均衡)访问到后台真实服务器
如果我们第一次通过web01将视频图片上传之后,因为DR模式的缘故第二次会访问的是web02,那么这个时候会发现图片消失
这时候我们可以采用将web01和web02的视频和图片文件夹同步到NFS共享存储服务器中
那么无论当我们第几次访问web01/web02访问到的静态资源图片都在NFS共享存储服务器中
1.2、有CDN分布式文件缓存
购买CDN分布式缓存之后,我们可以将NFS共享存储文件中内容推到CDN分布式文件缓存中并设置图片的缓存时间
这样的优势就是,用户在访问的时候先去访问CDN分布式文件缓存再通过LB负载均衡的模型去访问真实服务器
也就是说你先拿到图片后拿到真实服务器中的内容
三、NFS配置详解:
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
nfs共享参数 | 参数作用 |
---|---|
rw | 读写权限 |
ro | 只读权限 |
all_squash | 无论NFS客户端使用什么账号访问,均映射为NFS服务端的匿名用户 |
no_all_squash | 无论NFS客户端使用什么账号访问,都不进行压缩 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入磁盘;这样更高效,但可能会丢失数据 |
anonuid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
anongid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
四、NFS服务部署:
1.安装服务
[root@nfs ~]# yum -y install nfs-utils
2.配置服务
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
3.启动服务
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
检查端口 111
[root@nfs ~]# netstat -tnulp
4.检查配置文件是否正确
/var/lib/nfs/etab 如果有内容说明配置正确,如果为空说明配置错误
[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.根据配置文件创建必要数据
[root@nfs ~]# mkdir /data
[root@nfs ~]# ll /data
total 0
修改目录属主属组
[root@nfs ~]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs ~]# ll -d /data/
drwxr-xr-x. 2 root root 6 Nov 6 12:06 /data/
[root@nfs ~]# chown nfsnobody.nfsnobody /data
[root@nfs ~]# ll -d /data
drwxr-xr-x. 2 nfsnobody nfsnobody 6 Nov 6 12:06 /data
客户端使用:
1.安装nfs-utils(只安装不运行)
[root@web01 ~]# yum -y install nfs-utils
2.查看服务端共享的目录
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
3.挂载远程文件系统nfs
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 18G 2.3G 16G 13% /
/dev/sda1 197M 110M 88M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 18G 2.3G 16G 13% /mnt
进入/mnt测试写入
[root@web01 ~]# cd /mnt/
total 0
[root@web01 mnt]# touch 1.txt
[root@web01 mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 5 10:48 1.txt
NFS参数: 指定匿名压缩用户为uid和gid为666
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
修改nfs配置
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
修改目录属主属组
[root@nfs ~]# chown www.www /data
[root@nfs ~]# ll -d /data
drwxr-xr-x. 2 www www 6 Dec 5 10:54 /data
查看内存的映射
[root@web01 ~]# cat /proc/mounts
如果挂载夯住使用-f
[root@web01 ~]# umount -f /mnt
五、小结:
1、NFS存储优点:
NFS文件简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求
NFS文件系统内存放数据都在文件系统之上,所有数据都是能看到的
2、NFS存储局限
存在单点故障,如果构建高可用维护麻烦 web->nfs0->backup
NFS数据明文,并不多数据做任何校验
客户端挂载NFS服务器没有密码验证,安全性一般(内网使用)
3、NFS应用建议
生产场景将静态数据尽可能往前端推,减少后端存储压力
必须将存储里的静态资源通过CDN缓存 jpgpngmp4avicddjs
如果没有缓存或架构本身历史遗留问题太大,在多存储也无用