日期:2010-12-17 浏览次数:916
出处:TT中国
说到VMware vSphere的某些高级特性,比如VMotion、fault tolerance(容错)、high availability(高可用)以及VMware DRS(Distributed Resource Scheduler,分布式资源调度)。vSphere的专利技术--“VMFS文件系统”——具有一种特殊的锁机制,允许多台物理主机连接到同一个共享的存储卷,其上的虚拟机也可以共享存储空间。不过,从传统的角度来说,实现共享存储卷意味着必须使用昂贵的光纤通道网络基础架构, 不过现在,iSCSI和NFS网络存储设备已经成为了一种更经济的选择。
在本文中,我们将为您介绍如何在vSphere环境中正确的安装、配置iSCSI存储,我们会对要点做相应的提示,并提供一些最佳实践供您参考。此外,我们在不同的配置环境下做了性能测试,通过比较这些测试结果,能够分析出各类配置对性能的影响。
VMware的流行促进了iSCSI的普及
第一个支持iSCSI网络存储的VMware版本是 ESX 3.0。它的内部集成了一个叫做initiatior(发起端)的客户端程序,通过局域网将SCSI命令发送到存储装置中的Target(目标端)SCSI设备。与光纤通道技术不同,iSCSI使用传统的网络元件和标准的TCP/IP协议,因此它不需要特殊的线缆和交换机设备。
目前iSCSI的initiator(发起端)可以是软件程序,也可以基于硬件。软件initiator 通过使用内建于VMkernel的设备驱动,利用网络适配器和以太网协议将数据写到远端的iSCSI Target(目标端)。因此软件initiator 的一些重要特征是:
使用以太网卡和本地VMkernel iSCSI堆栈
对于刀片服务器,或者扩展槽有限的服务器来说是一个好的选择
比硬件initiator便宜
CPU密集运算,因为协议的处理会增加CPU的开销
ESX server不支持基于软件initiator的boot(启动)模式;ESXi可以使用iSCSI Boot Firmware Table(iBFT)。
硬件initiator则使用专用的iSCSI HBA卡,它可以帮助服务器提升性能。它包括网络适配器、TCP/IP协议卸载引擎(TOE,TCP/IP offload engine)、以及SCSI总线控制器等组件。硬件initiator的特征包括:
I/O性能比软件initiator好
消耗更少的ESX server主机资源,特别是CPU资源
ESX server能够从硬件initiator启动
对于正在使用光纤通道存储的用户来说,iSCSI是个不错的替代方案,因为iSCSI不但可以降低部署成本,还可以保证良好的性能。vSphere目前已经能够支持10Gbps以太网协议,性能大大超过1Gbps以太网技术。当然,使用iSCSI也存在一个大的风险,如果采用的是软件initiator,难免会给CPU带来额外的开销,不过换成硬件initiator之后,这个问题就可以避免。使用硬件initiator还有一个好处就是可以将iSCSI数据流与其他网络流量完全隔离,而各种数据流的混合会让网络环境变得脆弱且容易波动。
出于优化vSphere的目的,VMware公司将软件iSCSI initiator的堆栈代码完全重写了一遍,就是为了更有效的利用CPU时钟周期。结果,与VMware的上一个版本Infrastructure 3相比,vSphere的效率和吞吐量明显提升。这个结果的实现主要是通过改进VMkernel的TCP/IP堆栈,优化相关缓存,以及通过提高内部锁的效率达成的。vSphere还增加了对双向CHAP(Challenge-Handshake Authentication Protocol)的支持,无论是initiator(发起端)还是Target(目标端)都需要经过相互的认证,这种认证机制提供了更好的安全保护。
在vSphere环境中,如何规划iSCSI的实施
在我们计划将iSCSI存储用于vSphere环境之前,必须做好几个决策。让我们先来看看iSCSI存储设备。
我们可以在vSphere环境中随心所欲的使用任何类型的iSCSI存储设备,因为主机端连接使用的是标准的网络适配器、标准的initiator以及通用的协议。但是我们必须注意两件事。首先,vSphere官方宣称支持的iSCSI存储设备仅限于某些厂商的特定型号(具体参见vSphere硬件兼容性指南),这就意味着如果我们打电话向VMware咨询一个与存储设备相关的问题,他有可能让我们去拨打存储供应商的支持电话。其次,我们需要注意的是,不同的iSCSI存储系统性能也有较大的差异。通常,对性能要求越高,所需的成本也越高。所以,针对虚拟机环境,我们要谨慎的选择iSCSI设备,确保它的性能能够满足应用程序对磁盘I/O的要求。
关于网络,也有一些需要注意的事项。如果要优化iSCSI的性能,最好创建一个独立的网络环境。这是为了确保iSCSI数据流不被其他网络流量干扰,同时对确保iSCSI的信息安全也有帮助。在虚拟机环境下,不能用100兆网卡承载iSCSI应用,那会非常的慢,甚至于完全不可用。所以,至少要用到千兆网络环境,如果预算充足的话,推荐使用万兆以太网。如果担心服务器资源开销过大,则可以考虑使用硬件initiator(TOE适配器),前提是确保我们选择的这个TOE适配器在VMware的硬件兼容列表中。如果我们使用了一个VMware不支持的TOE适配器,vSphere会将视其为一个标准的网卡,那也就无从发挥TOE的好处了。最后,如果为了获得最高的系统可用性而使用多路径的话,至少要用到两块网卡(不能是桥接或者多端口)分别连接到两台物理交换机,这一点与我们在光纤通道环境中配置多路径是一样的。
在vSphere环境中设置iSCSI
一旦建立起了iSCSI环境,我们就可以开始vSphere的设置。针对软件或硬件initiator,设置的方法会有所不同。我们先来看看软件initiator的设置。
基于软件initiator的设置:vSphere中内建的软件iSCSI initiator被当做一个存储适配器,要启用这个适配器,用户必须在一个vSwitch上(虚拟交换机)创建一个VMkernel端口组。vSphere凭借这个VMkernel接口与iSCSI目标端连接。所有主机与目标存储之间的网络流量都必经过虚拟交换机(vSwitch)上的这个VMkernel接口。每个vSwitch上的VMkernel接口数量可以大于一个。这个VMkernel接口也被用于VMotion、容错(fault-tolerance)日志传输以及连接NFS存储设备。当需要使用VMkernel接口做上面提到的多种用途时,我们强烈建议用户为iSCSI连接创建一个独立的vSwitch,并使用专用的VMkernel接口;而且还应该将两个物理网卡同时绑定到这个vSwitch上,以便保证容错性或实施多路径配置。如果环境中同时拥有多个网卡和多个VMkernel接口,那么应该确保iSCSI VMkernel接口被绑定在正确的那个网卡上。更多信息可参考VMware的iSCSI SAN配置指南。
在设置了vSwitch和VMkernel接口之后,我们就可以配置软件iSCSI适配器了。在vSphere客户端界面选择“配置/存储适配器”,会看到“软件iSCSI适配器”显示出来,选择它,并点击属性配置。在总标签栏(General tab)下,我们可以启用适配器,并配置CHAP认证(强烈建议做CHAP配置)。在动态搜索(Dynamic Discovery tab)标签栏下,我们可以通过添加目标设备的IP地址自动搜索iSCSI目标端设备;另一个方法是通过在静态搜索栏(Static Discovery tab)下,手动输入目标设备的名字,输入这些信息之后,返回到存储适配器的界面,然后点击“重新扫描”按钮进行设备搜索,即可找到我们需要的iSCSI目标端设备。
基于硬件initiator的设置:这个过程与设置软件initiator相似,只是不需要使用VMkernel网络,所以有些步骤可以跳过。TOE适配器是一个特殊的网络适配器,但它却可以在存储适配器界面显示。选择该适配器,单击并设置属性。在这里,属性的设置原则跟软件initiator类似,通过在总标签栏(General tab)、动态搜索(Dynamic Discovery tab)标签栏、静态搜索栏(Static Discovery tab)中输入恰当的信息。需要注意的是,在总标签栏中,我们还需要为TOE适配器分配一个固定的IP地址,因为此时TOE设备并不依赖VMkernel网络。
在设置好initiator之后,应该可以顺利搜索到目标iSCSI存储设备,然后以VMFS卷的格式将其映射给前端主机。具体步骤是选择一个主机,点选“设置标签栏”,然后选择存储,点击“添加存储”之后进入一个向导界面,磁盘类型选择“Disk/LUN”,表示这是一个基于块的存储设备。(如果使用基于网络文件系统的存储设备,则选择添加“NFS磁盘存储设备“)。进入下一个界面,在可用设备列表中选择所需的iSCSI目标端设备,为其添加一个卷名,然后设定块的大小。这个过程走完,我们就完成了新VMFS数据卷的创建,可以随时使用了。
vSphere环境使用iSCSI存储的最佳实践
一旦完成了iSCSI磁盘设备的配置,虚拟机就可以使用它们了。下面罗列的一些关于iSCSI存储系统的最佳实践,有助于我们在使用过程中获得最佳的性能和可用性。
iSCSI存储系统的性能表现与网络的健康程度和利用率密切相关,为了追求最佳的效果,准备一个独立的网络环境,完全隔离iSCSI数据流是必要的。
每台ESX server主机只能配置一个软件initiator。为iSCSI连接配置vSwitch时,可以利用多个物理网络端口形成冗余结构。如果想正确的配置多路径,还要确保VMkernel接口与vSwithc中的网络端口有正确的绑定关系。
确保iSCSI vSwitch的网络端口与一个独立的网络交换机连接,以降低网络单点故障所带来的影响。
vSphere支持存储协议中使用jumbo frames(巨帧),但是jumbo frames的优势只在一些非常特殊的环境中才能发挥出来,比如I / O的尺寸非常大的数据流。此外,后端的存储系统必须能够处理较大的吞吐量,比如RAID组中磁盘的数量大于等于15个,否则我们将看不到任何效果。如果I / O尺寸太小或者磁盘数量不够,那么使用jumbo frames的效果会很差,甚至感觉不到任何性能的提升。在某些环境下,jumbo frames还可能会造成性能的衰减,所以在启用jumbo frames之前和之后做两次性能测试,比较jumbo frames产生的影响是必要的。还有一个需要注意的问题是,整个连接环节中,每一个端到端的组件都必须支持并且打开jumbo frames功能,包括物理网络端口和网络交换机、vSwitch(虚拟交换机)、VMkernel端口、以及iSCSI目标端。其中任何一个环节没有设置jumbo frames,jumbo frames都不会起作用。
使用最新的Paravirtual SCSI总线控制器(PVSCSI)作为虚拟机的磁盘控制器,可以带来最大的吞吐带宽和性能,超过传统上常用的标准LSI Logic以及BusLogic总线控制器。如果I/O的压力很小,那么LSI Logic总线控制器是最佳选择。
设置高级多路径(advanced multipathing)功能可以获得更好的性能,进入iSCSI存储卷的属性界面,点击路径管理,就可以配置路径的选择策略,多路径驱动既可以是VMware自带的,也可以是第三方多路径插件。当使用软件initiator的时候,我们可以在一个vSwitch虚拟交换机上创建两个VMkernel接口,并各分配一个物理网络端口,一个是Active状态,另一个是Unused状态;使用命令“esxcli”将一个VMkernel端口绑定到第一个网络端口,另一个VMkernel端口绑定到第二个网络端口上。用“循环使用(Round Robin)”的路径切换策略代替“修复/最近使用(Fixed or Most Recently Used (MRU))”策略,通常会获得更好的性能。不过,如果虚拟机上运行的是MSCS(Microsoft Cluster Server),则要避免使用“循环策略(Round Robin)”。