DAS , SAN , NAS
NAS
LUN只是一个卷设备,对主机而言就是一块硬盘,我们的操作系统集成了文件系统的功能,可以用来管理卷。而 NAS就是把文件系统从主机迁移到磁盘阵列上,自己来管理。使用者只需要通过网络告诉这个文件系统需要存取什么文件而不需要向NAS传递LBA地址。
那么** NAS与SAN的区别**是什么?
SAN是网络上的磁盘,NAS是网络上的文件系统。
-
SAN:存储区域网络,是网络上的磁盘,其本质只是一个网络,包含了主机、适配器等一切后端存储相关的内容。可以说SAN包含NAS。
-
一般把FC网络上的磁盘叫做SAN,以太网上的文件系统叫NAS
另外, FTP服务器属于NAS吗?不属于,为什么?
我们知道网络文件系统与本地文件系统最大的区别是传输方式从主板的导线变成了以太网络,也就是传输的距离可以更快了。但是FTP实际上必须把文件传输到本地的某个目录才能执行,而网络文件系统不需要将数据复制到本地再进行访问,可以进行挂载。
NAS与SAN之争
谁更快
NAS主要实现虚拟目录层与文件系统层的通信,使用的是“以太网+TCP/IP”,为了处理TCP/IP和以太网逻辑,增加了不少的CPU指令,同时使用的是以太网等低速介质。
而FC SAN中,FC逻辑有很大一部分由HBA卡完成,同时FC协议的速度比以太网更快,所以整体来说FC SAN肯定更快。
但是在大量随机小块IO的场景下,因为NAS系统对并发IO进行了优化,而且文件系统逻辑由专门的设备处理,所以性能可能会比SAN更高。
既然这样,为什么还需要使用NAS呢?因为
- 最重要的文员是NAS成本更低,不需要昂贵的FC HBA卡和FC交换机。
- 基于以太网、TCP/IP,扩展性强
- 可以提供多种协议访问。网络文件系统通过HTTP、FTP等协议进行访问,而SAN只有SCSI协议。
- 采用专门的设备处理文件系统逻辑, 可以解放主机CPU和内存,适合在CPU密集的应用环境。
- NAS可以在一台盘阵上实现多台客户端同时访问。SAN的LUN一般只能分配给某个主机,只有通过集群系统对数据一致性进行了保证以后,才能实现LUN共享
所以单纯的讨论** SAN好还是NAS好**是没有意义的,我们更需要的是根据场景、成本等要素来决定到底使用NAS还是SAN。
我们可以把目前的应用分为两种:IO密集与CPU密集
-
CPU密集:程序内部逻辑复杂,但是对磁盘IO访问量不高。比如高性能运算
-
IO密集:内部逻辑不复杂,但是需要随时存取硬盘的,比如Web应用
-
IO和CPU同时密集:不适合单机运行,需要组成集群
对于高并发随机小块IO,或者共享访问文件的环境,因为NAS做了很多的优化,此时应该优选NAS。而对于大块顺序IO密集的环境,NAS比SAN慢,所以优选SAN。
与SAN和与NAS设备通信的过程
对主机而言,如果与SAN通信,必须通过文件系统。当应用程序发出指令后,文件系统会计算LBA地址,然后通过FC网络告诉SAN。SAN取出数据,通过FC网络传送给主机,然后放入程序的缓冲区。
那与NAS设备通信呢?程序只需要告诉NAS设备路径+文件即可,也就是说通过操作系统的虚拟目录与NAS进行对话,通过TCP/IP+以太网进行传输,后面的过程就都在NAS设备内部了,它会查找要取的文件的扇区位置,存储数据。
其实NAS设备还可以进行拆分,它可以把硬盘拆分出去,只是做为一个专门处理文件逻辑的设备而存在,这就是NAS网关
DAS、NAS、SAN
DAS:最原始的存储:直接存储。存储设备只用与独立的主机。比如PC中的磁盘或者只有一个外部SCSI接口的JBOD
DAS(仅供自己使用)到SAN(出租仓库给其他的租户),到NAS(集中式理货服务外包)
SAN是一种网络,而不是某种设备。只要是专门向服务器传输数据的网络就可以称为SAN。
NAS设备通过以太网向主机提供文件级别的数据访问,以太网络就是SAN。
习惯性的将FC SAN架构称为SAN
NetApp的NAS
NetApp的NAS极大的借鉴了数据库管理系统的设计,本小节主要讲解一下NetApp的NAS的基本思想。
利用了数据库管理系统的设计
我们知道数据库管理系统是这样记录日志的,在某个时刻,数据库管理系统接收到应用程序的SQL更新语句,首先将数据修改前的状态以日志的形式保留在内存的日志缓存区,然后覆写原来的数据。
因为日志缓存区是内存的一部分,所以如果掉电则数据丢失,所以每隔一段时间或者说程序进行提交事务时,管理系统会把日志推到磁盘中。同理,也会把缓存中更新过的数据块写入磁盘。
只有当日志确实写入到硬盘上的日志文件中的时候,才会对上层应用返回执行成功。
具体过程可以参见数据库(五),事务。
NetApp借鉴了这种设计思想,它会将文件系统中的写入请求作为操作日志写入到NVRAM中保存。
NVRAM不用电池也可以在不供电的情况下保存数据,而NetApp使用的是带电池保护的RAM,下文姑且称其为NVRAM.
为什么要使用NVRAM而不像数据库一样使用文件来保存日志的呢?
对于数据库系统来说,先将日志写入到内存中日志缓冲区,再在触发条件下将日志写入磁盘上的文件。一旦意外掉电,内存中的日志没有来得及保存到硬盘就丢失,数据库再次启动的时候,会提取硬盘上的日志,对于没有提交的操作进行回滚。这样就保证了数据的一致性。
不过如果应用程序频繁提交,日志缓冲区的日志会频繁的写入到磁盘上,这时日志缓存就起不了什么作用了。
对数据库来说,上层的每个业务一般都算是一个交易,在尚未完成的时候,程序不会发送提交指令给数据库系统的,所以频繁提交的频率不高。
而文件系统则不然,上层应用向文件系统写入数据而言,每次请求都是完整的交易。也就是说提交会非常频繁。如果将操作日志写入磁盘,开销大,所以利用了带电池保护的RAM内存(NVRAM)。只要成功写入了RAM,就可以立即通知上层写入成功。
一定要搞清楚日志和数据缓存的区别。
- 日志是记录操作动作和数据内容,而非实际的数据块。保存在NVRAM中
- 实际的数据块保存在RAM中而非NVRAM中。
WAFL的做法是用RAM来保存日志,可以一次接收到上千条写请求,而且可以直接返回成功。等到RAM半满,由WAFL一次性批量连续写入硬盘,保证高效率。
WAFL从不覆写数据
当日志占了NVRAM空间的一半或者每10s,WAFL会将内存中已改写的数据以及元数据批量写入硬盘。同时清空日志,腾出空间。这个动作叫
CheckPoint
WAFL不会覆盖掉对应区块中原来的数据,而是寻找空闲块来存放被更改的块。也就是说WAFL写入的数据都会到空闲块中,而不是覆盖旧块。另外,在Checkpoint没有发生或者数据没有Flush完全之前,WAFL从来不会写入任何元数据到磁盘。
这样可以保证CheckPoint没发生之前,磁盘上的元数据对应的实际数据仍为上一个CheckPoint的状态。如果此时断电,就算新数据写入了,但是元数据没有写入,所以磁盘上的元数据仍指向旧块,数据就像没有变化,所以不用执行文件系统检查等工作。
当CheckPoint触发时,先写入数据,最后再写元数据,然后新元数据指针指向方才写入的新数据块。对应的旧数据块变为空闲块。(此时块中仍然有数据,但是没有任何指针指向它)
IP SAN
以太网的可寻址容量大,比IP都大,而且地址是定长的,使用专用的电路完成交换,还可以使用光纤进行传输。最重要的一点是以太网非常的廉价。
但进入以太网有这么多优点,现在FC SAN还是应用广泛,这是因为以太网与FC相比,以太网是不可靠的网络,不是端到端的协议,必须依靠上层协议。而且开销也比较大。
IP SAN
TCP/IP在速度和性能上无法与FC相比,但是它最大的优点在于扩展性,SCSI都能嫁接到FC上,当然也可以与TCP/IP结合。这种新的协议系统叫ISCSI(Internet Small Computer System Interace )
。
这种协议的优点很明显,只要IP可达,两个节点就可以通过ISCSI通信。所以扩展性非常强。
IP SAN : 以ISCSI为代表的TCP/IP作为传输方式的网络存储系统,也就是基于IP的存储区域网络
当然IP SAN不一定用以太网作为链路层,可以用任何支持IP 的链路层,如 ATM 、PPP 、 HDLC 甚至是FC
同样用TCP/IP来进行传输,NAS与IP SAN有什么区别呢?
NAS传输的是文件系统语言。ISCSI传输是SCSI指令语言。所以IP SAN本质是SAN提供的是块存储
IP SAN相对于FC SAN最大的优势在于:
-
FC SAN 成本是IP SAN的十倍。
-
FC是专用网络,很难扩展
-
部署FC存储网络更复杂
-
兼容性:不同生产厂家的FC设备不一定完全兼容