存储基础知识
1.1 几种常见存储设备的接口
1.IDE接口
IDE的英文全称为"Integrated Drive Electronics",即"电子集成驱动器",是曾经主流的硬盘接口。IDE接口也称之为ATA接口。ATA的英文拼写为"Advanced Technology Attachment"。2003年推出SATA(Serial ATA)后,原有的ATA改名为PATA(并行高技术配置,Parallel ATA)。
IDE是曾经普遍使用的外部接口,主要接硬盘和光驱。采用数据并行传送方式,一个IDE接口只能接两个外部设备。
IDE的工作方式需要CPU的全程参与,消耗的这部分资源会在一定程度上降低操作系统性能。
2.SATA接口
SATA(Serial ATA)是目前个人电脑上采用最多的接口。它采用串行连接方式。现在的SATAⅢ能达到的理论传输速度是6Gbps即750MB/s的速度。
3.SCSI接口
SCSI(Small Computer System Interface)小型计算机系统接口。它是各种计算机与外部设备之间的接口标准。
SCSI其内有控制芯片,可以代替cpu完成90%多的IO工作(如计算、控制、转换等),CPU不必浪费时间进行等待,可提高整体性能。
SCSI采用链式连接,SCSI总线是SCSI设备之间传输数据的通路,又被称作SCSI通道。它通过SCSI控制器来和硬盘之类的SCSI设备进行通信。
SCSI可以连接7—15个设备,由SCSI总线是宽总线(支持16个设备)还是窄总线(支持8个设备)决定。这些设备在SCSI体系结构中称为target,可能是一块硬盘、一个RAID阵列、一个cdrom等可能的设备。
每个target都必须有自己唯一的ID,在8-bit总线上,这个号码是07,在16-bit总线上,这个号码是015。
ID实际上就是这些设备地址。ID优先权由高到低的顺序为7-6-5-4-3-2-1-0-15-14-13-12-11-10-9-8
。
SCSI链的最后一个SCSI设备要用作终结器(terminator),终结器是由电阻组成的,位于SCSI总线的末端,用来减小相互影响的信号,维持SCSI链上的电压恒定。中间设备不需要终结器。一旦中间设备使用了终结器,那么就无法找到终结器后的SCSI设备了。而如果最后一个设备没用终结器,SCSI也会无法正常工作。
在每个target上还可以继续进行扩展(注意每个target对应一个ID),每个ID可以继续向下扩展最多32个逻辑设备,也称为逻辑单元(LU,logical unit)。每个逻辑单元对应一个设备,使用逻辑单元号LUN(Logical Unit Numbers)标识,LUN的范围是0-31。也就是说,SCSI可以扩展出很多很多存储设备。
SCSI的数据传输是以块的方式进行的。
在SCSI体系结构中,首先由initiator向target发起会话,此会话不像web服务那样休闲时就断开,而是像ssh服务那样,保持长久连接。在此会话中,initiator会发出scsi命令进行读写数据。
可以将initiator认为是scsi的客户端,它是数据操作的需求方,target是scsi的服务端,它是数据的来源,也就是一堆堆的存储设备。当initiator与target关联后,target上的每一个lu在initiator上会单独显示为一块硬盘格式,即/dev/sd{b,c,d,e...},显示的先后顺序根据lun号码来决定。
4.SAS接口
SAS是Serial Attached SCSI的缩写,即串行连接SCSI。也就是说SAS是新一代的SCSI技术,它和SATA一样都采用串行技术。
SAS技术引入SAS扩展器,使SAS系统可以连接更多的设备,其中每个扩展器允许连接多个端口,每个端口可以连接SAS设备、主机或其他SAS扩展器。
1.2 存储方案(存储技术)
所谓的存储方案,就是用单独的软硬件将磁盘或磁盘组管理起来供主机使用。也就是说,存储方案和存储设备是在不同层面的,存储方案是设计如何组织和利用存储设备的。
根据服务器类型分为封闭系统的存储和开放系统的存储
- 封闭系统主要指大型机,AS400等服务器。
- 开放系统指基于包括Windows、UNIX、Linux等操作系统的服务器。而开放系统的存储又分为内置存储和外挂存储:
- 开放系统的外挂存储根据连接的方式又分为:直连式附加存储DAS(Direct Attached Storage)和网络化存储FAS(Fabric-Attached Storage);
- 开放系统的网络化存储根据传输协议又分为:网络附加存储NAS(Network Attached Storage)和存储区域网络SAN(Storage Area Network)。
目前绝大部分用户采用的是开放系统,其中外挂存储占有目前磁盘存储市场的70%以上。
目前的外挂存储解决方案主要分为三种:DAS、NAS和SAN。下图虽简单,却描述了这直连式存储和网络存储的区别。
存储方案内部使用的硬盘多为SATA/SAS,追求高性能也用SSD,经过串联或者RAID之后,对主机提供访问接口。
1.2.1 DAS存储
直接式存储(DAS:Direct Attached Storage),是指将存储设备通过SCSI接口或FC接口直接连接到一台计算机上。DAS不算是网络存储,在存储设备和主机之间没有任何网络设备的参与,只有挂载它的主机才可访问它。
最典型的DAS存储类型就是个人电脑中的硬盘,它和电脑直连,没有经过任何网络设备,也只有这台电脑可以访问它上面的数据。
也就是说,服务器发生故障时,连接在服务器上的DAS存储设备中的数据暂时不能被存取。
DAS是最原始最基本的存储方式,缺点在于容量有限、难于共享,从而造成信息孤岛。
DAS缺陷有二:
- (1).DAS存储只能通过与之相连的主机进行访问,不能实现数据与其他主机的共享。
- (2).直连式存储与服务器主机之间的连接通道通常采用SCSI或者SAS连接,随着服务器CPU的处理能力越来越强,存储硬盘空间越来越大,阵列的硬盘数量越来越多,SCSI或SAS通道将会成为IO瓶颈;且SCSI ID或SAS ID资源有限,能够建立的SCSI或SAS通道连接有限。也就是容量有限。
1.2.2 NAS存储
是指将存储设备通过标准的网络连接到一台或一群计算机上。
NAS有文件系统和IP地址,可以类似的理解为网上邻居的共享磁盘,或者NFS的服务端,即导出目录的一端。NAS是文件级的存储方法,它有自己的文件系统,如NFS,SMB的CIFS。所以它是真正即插即用的产品。
NAS和SAN本质上的不同点在于NAS有自己的文件系统,而SAN的文件系统在应用程序服务器上而非存储服务器上。这样的不同点导致NAS是文件级别的数据传输,而SAN是基于块级别的传输。
对于大量小文件来说,由于每个文件都要查找文件索引号,所在块号等等,这些都会消耗资源和时间,所以导致文件级别的传输要慢的多得多,而块级别的传输则不管某个块属于哪个文件,只要需要就会把块传输出去。
NAS性能比SAN要差很多,但相对成本也低很多。
1.2.3 SAN存储
SAN即存储区域网络(Storage Area Network,SAN)。目前有两种类型的SAN,一种是FC SAN(光纤通道的SAN),一种是IP SAN(以太网的SAN,即现在的iSCSI)。
一般都采用光纤通道(Fibre Channel)技术,通过光纤通道交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。FC SAN已经相当成熟,成为业界的实施标准。如果是IP SAN,则下图中的FC部分换为以太网,对交换机而言也没有光纤交换机那么严格的要求。
SAN是基于块级别的数据传输。在应用程序服务器本地有本地文件系统,这是和NAS根本上的区别。
SAN解决方案从基本功能剥离出存储这部分功能,在理论上比其他存储方案要先进一些。
相比于FC SAN,IP SAN的弱点除了在硬件设备上,还在于它要对数据进行TCP/IP的封装,这需要消耗资源(硬件iSCSI使用HBA卡控制芯片来封装不会消耗操作系统资源,但挺贵的)。同时它还要使用以太网,所以网络的情况对其也有很大影响。
SAN是目前业界中高端存储的主流标准。
1.2.4 SAN和NAS的区别
为什么提到NAS就不得不提到SAN呢?原因之一是它们的名称有69关系,容易混淆;之二是NAS和SAN既竞争又合作,很多高端NAS的后端存储就是SAN。NAS和SAN的整合也是存储设备的发展趋势。
从上面的构中可以看到,SAN文件系统分别在每一个应用服务器上;而NAS则是每个应用服务器通过网络共享协议(如:NFS、CIFS)使用同一个文件系统。换句话说,NAS和SAN存储系统的区别是NAS自己管理自己的文件系统。
现在高端存储已经很多都使用SAN+NAS了。如下图。
在上图的双虚线框表示一台NAS。它通过Fibre Channel从后端SAN获得存储空间,创建文件系统后,再通过以太网共享给服务器。SAN提供的存储单位是LUN,属于block级别的。经过NAS创建成文件系统后,就变成文件级别的了。
如果上图描述的不够清楚,下图就容易理解多了。NAS通过FC Switch连到SAN上,应用服务器再通过Ethernet Switch连到NAS上。同时SAN也直接提供block级别的存储给应用服务器。
关于NAS和SAN的区别,可以列出很多来。比如带宽大小,距离长短,共享优劣等等。几乎所有区别都是由两个因素衍生出来的。一个是FC与Ethernet,另一个是block与file system。简而言之,如果用户需要通过FC访问block,就用SAN;如果需要通过Ethernet访问file system,就用NAS。
Linux系列文章:https://www.cnblogs.com/f-ck-need-u/p/7048359.html
Shell系列文章:https://www.cnblogs.com/f-ck-need-u/p/7048359.html
网站架构系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
MySQL/MariaDB系列文章:https://www.cnblogs.com/f-ck-need-u/p/7586194.html
Perl系列:https://www.cnblogs.com/f-ck-need-u/p/9512185.html
Go系列:https://www.cnblogs.com/f-ck-need-u/p/9832538.html
Python系列:https://www.cnblogs.com/f-ck-need-u/p/9832640.html
Ruby系列:https://www.cnblogs.com/f-ck-need-u/p/10805545.html
操作系统系列:https://www.cnblogs.com/f-ck-need-u/p/10481466.html
精通awk系列:https://www.cnblogs.com/f-ck-need-u/p/12688355.html