在计算机世界我们随处可以见的一种方法,那就是抽象。1946年冯诺依曼提出了计算机的基本结构包含:计算器,存储器和I/O设备。这可能是对计算机这一新生事物最重要的一次抽象,它直接影响了今后几十年计算机软硬件的发展。我们每个人对计算机的计算器,存储器和I/O设备都有不同的认知,你可能不认识所有计算芯片,不了解各种存储设备和输入输出设备,但是这绝对不会阻碍你区分出它们来。计算机系统中的各个部分可能是不可或缺的,但一定是可以替换的,这就是抽象的力量。没有抽象,我们可能要为每一套硬件开发不同的操作系统,要为每一种操作系统开发不同的应用程序,那简直是不可想象的事情。
当然事情发展到今天,我们依然觉得软硬件系统种类太多了,我们需要新的层次上的抽象。虚拟化就是一个抽象的过程,是对软硬件资源的进行抽象的过程。虚拟化的目的之一是让上层无需感知下层的差异,并提供统一的接口以备上层使用下层资源。
理想状态下的硬件虚拟化要实现的也许就是对硬件不受任何限制的使用,应用程序无需感知计算、存储和网络等硬件设备的差异而能够充分利用硬件资源。但是现实的情况,我们还是需要考虑或多或少考虑硬件的限制的。接下来我们先来考虑硬件虚拟化中,最关键的角色——存储。
一、存储发展现状
对于存储每个人都会有直观的认识,从纸带、软盘、光盘到硬盘。根据冯诺依曼的计算机结构理论,存储的概念就如同字面一样简单,就是任何可用于存储数据的设备,也如同这一抽象的独立的概念,存储设备在计算机结构中甚至是可以相对独立的。随着网络的发展,存储不再局限于计算机外壳的内部,网络存储在服务器领域日益成为主流。
在存储设备中最重要的应该是硬盘,对硬盘的读写速度、容量和质量的追求,硬盘技术几经变迁。单从与主板的接口标准上分就有ATA(IDE)、SATA、SCSI、SAS、FC和Infiniband之多,他们在接口、传输媒介和协议上都存在一定区别。其中ATA接口常连接大家熟悉的IDE设备;SATA(Serial ATA)是串行ATA;SAS(Serial Attached SCSI)是串行SCSI;SATA与SAS是孪生兄弟,SATA硬盘可以连接SAS接口,反之却不兼容;FC(Fiber Channel)是光纤通道,光纤通道其实不一定使用光纤,也可以使用铜质电缆。需要详细了解各接口技术细节请google之。
随着网络存储的发展,区分出了DAS (Direct-Attached Storage) 、NAS(Network Attached Storage)、SAN(Storage Area Network)等存储模式。下图是他们之间的比较,其中每个虚线框表示为一个相对独立的整体,箭头左侧描述的是一种接口或者连接方式,右侧描述的是实现存储的技术方案。图中所显示的只是各个模式中最为简单的组织或连接方式。DAS中File System连接Storage的方式不仅仅限于机器内部各种接口和线缆(如计算机连接内置SAS硬盘),也可以是外部的接口和线缆(如通过外部SAS线缆连接存储),这样情况就会变得复杂了,NAS或SAN作为整体可以容易成为DAS的一部分。但DAS与其他二者的最大不同在于DAS不需要网络的支持。NAS和SAN最初的最大区别在于NAS是基于文件的存储,而SAN是基于数据块的存储。NAS存储更多表现为独立的文件服务器,但SAN更多表现的像是一块磁盘,因而SAN可以成为NAS网络中更加底层的那一部分。
最后是分布式存储,简单来说分布式存储充分利用廉价的硬件设施,在操作系统之上实现了对存储的抽象。分布式存储暂时与本文讨论无关,今后另开篇讨论。
二、Windows Server 2012 操作系统的存储特性
接下来,我们来看看Windows Server 2012对支持存储虚拟化的几项重要改进。在Windows Server 2012中新增和改进许了多存储特性实现对存储虚拟化的支持,其中最为引人关注的是iSCSI目标服务器、SMB3.0和存储空间。Windows Server 2012及其集群可以容易实现目前主流的存储方案用于测试或生产环境,并且微软还有一套自己特有的基于文件服务器及文件服务器集群(SMB3.0和存储空间技术)的存储解决方案。
1、iSCSI目标服务器
iSCSI(Internet Small Computer System Interface)即Internet小型计算机系统接口。iSCSI在服务器与存储系统之间使用以太网连接,基于TCP/IP协议封装传输SCSI指令和数据,创建IP SAN。iSCSI和IP SAN应该是目前最具性价比的存储解决方案了。
在Windows Server 2012 中,iSCSI目标服务器(iSCSI Software Target Server)成为一个内建于文件与存储服务下的一个服务器角色,集成在服务器管理器中,不再需要额外下载安装(之前的Server版本都需要下载独立安装包进行安装),因此部署与更新变得更加简单。查找文档后我们发现iSCSI 目标服务器可提供下列服务:
- 网络和无磁盘启动:通过使用支持启动的网络适配器或软件加载程序,可以快速部署成百上千个无磁盘服务器。使用差异虚拟磁盘,你可以节省多达90%的操作系统映像存储空间。这对于相同操作系统映像的大型部署很有用,如部署大型机房或者在大规模集群中部署服务器。
- 服务器应用程序存储:某些应用程序需要块存储(例如 Hyper-V 和 Exchange Server)。iSCSI 目标服务器可以为这些应用程序提供持续可用的块存储。由于存储可以远程访问,因此还可以合并中心或分支机构位置的块存储。这个是iSCSI的最重要的功能。
- 异类存储:iSCSI 目标服务器支持非 Windows iSCSI 发起程序,以便能够在混合软件环境*享的 Windows Server 上存储。
- 开发、测试、演示和实验室环境:当启用 iSCSI 目标服务器角色服务时,它会将任何 Windows Server 转变为可通过网络访问的块存储设备。存储阵列一般非常昂贵,测试环境中我们可以使用部署iSCSI目标服务器角色的Windows Server计算机来充当这样的存储设备。这个功能非常实用,如果想进行虚拟化测试却苦于没有独立的存储阵列,可以使用iSCSI目标服务器服务可以让任何一台安装Window Server的服务器成为存储阵列。
由上可见,如果不考虑高性能iSCSI目标服务器生产环境中还是有用武之地的,在测试环境中更是不可或缺的帮手。另外iSCSI目标服务器可以配置成为Windows Server 2012故障转移集群的集群角色,同时通过配置MPIO实现高可以性。这里向iSCSI目标服务器发起连接与向其他iSCSI设备发起连接并没有什么不同。
2、文件服务器/SMB3.0
在Windows Server 2012中,文件服务器是另一个重要服务器角色。访问文件服务器有两个可选协议:NFS(Network File System)和SMB(Server Message Block) / CIFS(Common Internet File System )协议。在配置文件服务器的时候会要求进行选择,我们来看看他们的区别:
- NFS最早由SUN公司开发,是最常见的网络文件共享协议。NFS允许系统将其目录和文件共享给网络上的其他系统。用户和应用程序可以像访问本地文件一样访问远程系统上的文件。NFS更多应用在Unix或类Unix系统中,当然Windows也支持该协议。
- SMB最早源自IBM,但随后Microsoft对其提供支持和改进,最初SMB是基于NetBIOS建立一个文件共享协议,但为将SMB扩展到Internet上,摆脱对NetBIOS的依赖,微软对SMB协议进行整理,并重命名为CIFS。Windows网络环境的核心是SMB/CIFS,许多Microsoft系的网络应用都可以基于SMB/CIFS协议,包括在Windows系统之间的文件共享,在Unix类系统上要为Windows客户提供文件共享服务就需要实现SMB/CIFS协议,例如Samba。
SMB3.0是SMB最新版本,提供了许多新功能,如:SMB透明故障转移,SMB多通道,SMB直连(SMB Direct)等。SMB3.0能够在以太网上实现1Gbps的文件访问速度,从而能匹敌DAS的性能。因而在Windows网络环境中,SMB可以作为替代iSCSI的另一个选择。
在Windows Server 2012中文件服务器也可以配置成为Windows Server 2012故障转移集群的集群角色,为满足不同应用对文件服务器的需要,集群角色配置过程中也有基于NFS和SMB的多种可选方案。
Windows Server虚拟化的核心Hyper-V服务器对与存储网络的要求很高,这里我们有多种选择:虽然Hyper-V的虚拟机可以部署于DAS、NAS或SAN存储中,但为了实现高可用性,基于SAN是最常见(基于iSCSI的IP SAN和基于FC通道的FC SAN),现在还可以选择基于文件服务器集群的Hyper-V over SMB(小型网络中可以配合使用下文中将要提到的“存储空间”特性),后文将实现它。
3、存储空间
存储空间是Windows Server 2012中的一个新特性,它提供了一种高效便捷的存储虚拟化解决方案。
简单来说,它可以将符合标准的存储设备,放入存储池中并进行虚拟化,创建称为存储空间的虚拟磁盘。目前符合标准的存储设备包括通过ATA、SATA、SCSI、SAS直接连接的磁盘或JBOD磁盘阵列,甚至也可以是通过USB连接的存储设备,但不可以是那些经过虚拟化和分层的磁盘,比如VHDs虚拟磁盘、虚拟机中的直通磁盘、RAID阵列等,另外存储池也不支持iSCSI和FC光纤通道。
再简单来说,存储空间实现类似RAID卡那样的功能,但实现的层级是在操作系统上,而不是在硬件上,这就是所谓的软件定义存储的实现吧。
如果存储设备中存在RAID卡,那么只能将RAID的所有功能禁用(如果允许禁用的话)才可能兼容存储空间特性,这样其实是一种浪费。因而采用存储空间的虚拟化方案,就不需要采购带RAID控制器的磁盘阵列,而直接采购JBOD磁盘柜就可以了,省不少钱。
如下官网上的示意图已经清楚的展示的存储空间相关概念:
在存储空间中建立的虚拟磁盘是一种弹性存储,虚拟磁盘定义好后无法改变存储布局(即无法在Simple、Mirror和Parity模式中*切换)和提供方式(Thin和Fixed),但是可以调整容量。微软提供了三种存储布局,类似RAID的几种级别,TEDNET上的定义是:
- 简单(Simple):数据跨物理磁盘条带化,这最大化了容量并提高了吞吐量,但降低了可靠性。这种存储布局至少需要一块磁盘,并且不能针对磁盘故障提供保护。
- 镜像(Mirror):数据在两个或三个物理磁盘上复制,这提高了可靠性,但降低了容量。这种存储布局至少需要两块磁盘用于针对单一磁盘故障提供保护,或者至少需要五块磁盘用于针对同时发生的两起磁盘故障提供保护。
- 奇偶校验(Parity):数据和奇偶校验信息跨物理磁盘条带化,这提高了可靠性,但一定程度上降低了容量。这种存储布局至少需要三块磁盘用于针对单一磁盘故障提供保护,并且至少需要七块磁盘用于针对两起磁盘故障提供保护。
存储空间特性也可以应用在Windows Server 2012的故障转移集群中,但要求会更高:
- 虚拟磁盘提供方式必须是固定(Fiexed,创建时就占据固定容量)。
- 虚拟磁盘奇偶校验存储布局在Windows Server 2012中不被支持,但2012 R2支持。
- 所有物理磁盘必须通过SAS链接。
- 所有物理磁盘必须支持PR(Persistent Reservation)且通过故障转移集群验证测试。
- 集群需要共享存储,因而JBOD磁盘必须通过SAS物理连接所有节点(可以通过SAS连接所有节点或者使用SAS交换机),因而DAS不被支持。
从以上要求看,要使用集群存储空间特性局限性是比较明显的,要与SAN方案竞争还有很长的路要走。想了解更多关于存储空间特性的细节,可以访问Storage Spaces Frequently Asked Questions (FAQ)
三、Windows Server 2012虚拟化支持的存储网络
在Windows Server 2012中实现虚拟化的关键是部署Hyper-V服务器,保障Hyper-V虚拟机运行。原则上我们可以将Hyper-V虚拟机放置任何存储中,基于DAS、NAS或SAN存储都是可选的,Hyper-V Server 2012甚至已经实现在非共享存储的独立主机间实时迁移虚拟机。但是为了实现高可用性,我们一般会部署Hyper-V服务器故障转移集群,这要求集群节点拥有共享存储,因而为实现共享存储我们还有两种选择:基于SAN(基于iSCSI的IP SAN和基于FC通道的FC SAN)和基于文件服务器集群的Hyper-V over SMB。
1、基于IP SAN和FC SAN
如下图是典型的两节点集群连接存储的实现高可用性的方案,可以看出IP SAN与FC SAN在网络拓扑上没有本质区别,两者都可以通过多路径IO(MPIO)实现IO高可靠性和负载均衡。这里的Storage Server即是传统意义上的存储服务器(带CPU和控制器的存储阵列),为Hyper-V Server集群提供共享存储。测试环境中,可以利用Windows Server中 iSCSI目标服务器角色在普通PC中实现一个IP SAN所需要的Storage Server。
2、Hyper-V over SMB
Hyper-V over SMB是微软特有的存储解决方案。从下图的网络拓扑看,多了一级Windows File Server Cluster作为Hyper-V集群的共享存储的提供者,大家也许会认为这样是多此一举,但实际上这样的方案有几个好处:
- 节约成本,重用旧有资产,使用便宜硬件。如果无需实现文件服务器的高可用性,那么任何一台连接的存储设备的PC都可以充当Hyper-V集群的共享存储的提供者,文件服务器的存储可以采用任何形式的存储模式(DAS、NAS和SAN),因而甚至可以是PC中的本地磁盘。如果实现文件服务器的高可以性,那么文件服务器故障转移集群本身也需要共享存储,因而文件服务器集群要么采用SAN,要么采用共享SAS连接JBOD,但应当推荐如下图所示通过共享SAS连接JBOD。JBOD比传统的RAID存储阵列便宜,它没有控制器,没有RAID的高可用性,但配合Windows Server存储空间特性,可以在文件服务器集群中实现高可用性和扩展性。
- 扩展性。文件服务器集群的节点可扩展。另外存储空间可扩展,如下图各个文件服务器节点可连接2个以上JBOD,配合存储空间特性实现大容量虚拟磁盘(存储空间特性需要微软验证的JBOD才支持,可以在此查阅通过验证的JBOD产品)。
- 兼容性。多一层文件服务器或文件服务器集群,上层应用只需访问文件服务器而无需知道底层存储的实现细节,因而可以兼容不同型号的产品。如下图两个JBOD可以来自不同厂家。
- 其他好处,关于与Hyper-V和其他微软产品的完美配合以及微软的产品简单易用就不提了。
实际上上图文件服务器集群不仅可以通过SMB也可以通过NFS协议和iSCIS将存储共享出去。但SMB 3.0已经明显强化了采用SMB协议的优势。
四、Windows Server故障转移集群的集群共享卷
集群共享卷是从Windows Server 2008 R2起就具有的为故障转移集群新增的一项特性。简单来说,集群共享卷使得多个节点对网络中同一位置的访问实现了真正的同步,各节点都拥有该位置的最新状态信息。集群共享卷特性为Windows Server 2012的虚拟化在存储上提供了一个可靠的基础,实现了虚拟化平台中的虚拟机的高可用性。
当我们使用Windows文件共享服务时会这样的经验:在节点1打开的共享文件夹\\fs01\share中新增了文件A,但是在节点2打开的同样位置\\fs01\share却没有文件A。网络位置\\fs01\share虽然是共享文件夹,但是在同一时间只能有一个节点维护其最新状态。在故障转移集群各节点*问集群共享卷时却没有这样的问题。
集群共享卷的好处远不止上面这一点:
- 每个集群共享卷都会被映射到每个节点的系统分区下ClusterStorage文件夹中,因为各节点访问集群共享卷就如同访问本地路径。如果系统分区在C盘,那么集群共享卷1的路径默认为C:\ClusterStorage\Volume1\,其中Volume1的名称可以随意更改。
- 多个虚拟机可以放置在同一个集群共享卷中,即同一个LUN中,并且可以正常进行故障转移(这时故障转移的单位不再是LUN,而是虚拟机),这充分利用了磁盘空间,也省却了为每个虚拟机配置LUN的繁琐工作。
- 即使一个节点和SAN之间连接中断或者部分网络中断,集群也可以正常响应,集群将通过SAN或网络中完好的部分来重新路由集群共享卷的通信。
Windows Server 2012对集群共享卷特性做了很大的改进,关于集群共享卷的实现原理详细可以参考 Cluster Shared Volume (CSV) Inside Out 和 Cluster Shared Volumes Reborn in Windows Server 2012: Deep Dive 这两篇文章。