用NFS做文件共享,简单到爆!
阅读本文可以学习到的内容如下:
1. 文件共享的问题和场景、以及4种解决方案。
2. NFS和NAS存储
3. NFS解决方案的架构设计
一、问题场景
1、一个用户后端服务,使用nginx做负载均衡,部署了两台服务器(分别为A、B),它们都可以上传头像。
2、用户第一次请求A服务器上传,头像保存在A服务器的磁盘上,如图A-1所示。
3、第二次用户访问的时候,请求从B服务器加载头像,因为B服务器的磁盘上没有文件,因此访问不到,这也是典型的有状态服务的问题,如图A-2所示。
图A-1
图A-2
二、解决方案
解决思路1:两个存储上的文件始终都是一致的、全量的。
解决思路2:存放文件和获取文件都是同一个存储节点。
如果采用第一种思路,则把A、B服务器的磁盘数据相互同步就可以了,但是这样效率太低,还具有延迟,同时会引发同步风暴,例如现在有10个服务节点,10个节点之间都要相互同步就变为了灾难。
如果采用第二种思路,则可以有以下4种做法:
1、把头像转为base64编码,直接存储在数据库里面,但是这样太占用数据库存储,并且不方便迁移和备份。
2、修改Nginx的转发策略,让所有的文件上传和文件加载请求都转发到同一台服务器上,但是这样单节点压力过大,丧失了负载均衡和高可用的目的。
3、共享一个存储节点,A、B服务器的磁盘目录都映射到一个存储设备上。
4、共享一个存储服务,这种思想就是把共享存储设备换为共享存储服务,例如OSS对象存储服务。
三、实施方案
在讲解方案之前,你一定要知道NAS和NFS是什么,以下内容来源于百度百科。
NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。目前国际著名的NAS企业有Netapp、EMC、OUO等。
NFS(Network File System)网络文件系统,是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
显然第3、4方案是更好的选择,而方案3更有助于降低成本。
我们使用方案3来共享一个存储节点,如下图所示,使用NFS可以将A、B服务器本地磁盘的某个目录,挂载到NAS存储中。
此时A、B服务上传文件时都在操作自己的本机磁盘目录,但是数据会实时同步到NAS存储当中,内网环境下延迟基本可以忽略。
这种方式的好处是,对操作系统透明,对开发人员透明化,程序无需做任何改动。
开发人员完全不知道还有个NFS存在,完全是在操作本地文件,就达到了文件共享的目的。
除此之外NFS还有很多妙用,下次我们再来聊一聊。