服务器虚拟化一般的做法就是将原本多台服务器的工作负载集中到几台物理服务器中,而且这些物理服务器后端也只使用几台存储设备,这就意味着多台虚拟机(VM)会争抢存储资源,瓶颈就这样产生了。对于桌面虚拟化环境,这种集中整合变得更加固实,因为众多的桌面其实后台都运行在同一台主机之上。所以,对虚拟环境下的存储系统的管理,是一项持续的挑战,它通常需要管理员同时具有桌面、服务器、虚拟化以及存储系统方面的知识和技能,从而支撑整个虚拟化系统良好运行。这里有10条技巧来帮助你更好的管理虚拟环境中的存储系统。
1.了解你的存储负载情况。虚拟桌面产生的负载与虚拟服务器产生的负载是显著不同的,同时,不同的虚拟桌面之间以及不同的虚拟服务器之间所产生的负载情况也会差异显著。如果完全不考虑它们对磁盘IO方面的需求而随便将虚拟机放置到任何一台主机上,那么便可能会产生持续的瓶颈。
根据某台虚拟机上运行的应用程序以及其他负载,你应当可以估算出来这台虚拟机所耗费的大概磁盘IO情况。利用这种方法,你就可以将有高磁盘IO需求的虚拟机平衡的部署到所有的物理服务器以及存储资源之上。如果一台物理主机所承载的需要高磁盘IO性能的虚拟机太多的话,那么可能就会造成这台主机底层的存储控制器超载。同样的,多台具有高磁盘IO需求的虚拟机如果共同访问单个存储系统或者Lun的话,那么就会造成性能瓶颈。所以,即便是你对虚拟机所耗费的磁盘IO资源的情况有自认为很准的估计,也最好还是使用性能监控工具来获取更为详细的统计数据比如平均利用率以及峰值利用率等。
此外,还有一点需要注意,虚拟机是可以移动的,它们并不总是被承载于同一台物理服务器。它们可以通过诸如VMwareVMotion这种技术被移动到另外一台主机。如果某台物理主机承载了多台具有高负载的Exchange服务器,那么就极有可能将这台服务器底层的存储设备拖垮。如果你正在使用VMware的DistributedResourceScheduler(分布式资源调度器,DRS)工具来将工作负载均衡到多台主机上的话,那么请注意了,DRS并没有把磁盘IO资源考虑在内,也就是说它并不能均衡磁盘存储资源,它只能根据CPU以及内存利用率来做均衡。但是为了补偿这个不足,可以让DRS总是将特定的虚拟机分布到不同的物理主机上。
2.避免磁盘IO过载。某些场景下,虚拟机可能会产生周期性的极大的磁盘IO操作,这导致的结果便是产生大量的资源吞噬从而导致所有的虚拟机都会变慢。对于虚拟桌面环境,这种情况一般发生在某些特定时间点,比如早晨上班时大量用户同时打开各自的桌面,这种情况被称为“启动风暴”,虽然这种情况是无法避免其发生的,但是依然有办法来应对,比如在控制器中增加更大容量的缓存,比如NetApp的Perfor mance AccelerationModule(性能加速模块,PAM),或者通过使用Automatedstoragetiering(自动存储分级)技术来充分使用更高速的存储介质比如SSD固态硬盘。
对于其他场景,比如虚拟机备份以及虚拟机的计划任务比如病毒扫描、补丁安装等,这些情况便是可以控制的了。对运行在同一台物理机或者底层使用同一台存储设备的多个虚拟机进行并行的备份任务时,会产生大量的IO从而导致运行于同一台物理机或者底层对应同一台存储设备的其他虚拟机运行缓慢。你可以考虑一下那些支持Server-Free的备份软件,它们可以直接访问虚拟机底层对应的存储资源而无需通过前端主机,从而对前端主机运行不产生影响。再比如一些特殊的虚拟化磁盘到磁盘的备份产品,可以缩短备份窗口,而且支持将磁盘临时备份区内的数据下写到磁带存放,对主机以及虚拟机的运行不产生影响。对于一些计划任务比如病毒扫描以及补丁安装等,尽量将所有任务平衡排列,进行任务优先级计划从而可以将这些操作平衡以至于它们不会同时被触发。你也需要注意一些磁盘碎片整理操作,这些操作将会产生大量的磁盘IO,而且一个副作用是使得开启ThinProvision功能的Lun快速的变胖,不再Thin。(译者注:由于地层无法感知上层文件系统逻辑,文件系统需要将数据读出并写入新空间从而实现连续存放,而这个动作会导致底层存储为这个Lun分配实际空间,从而越来越胖,直到达到额定空间为止)
3.高效的使用存储空间。对于虚拟机来讲,很容易就会将磁盘空间用满,但是仍然有办法限制它们对底层存储设备空间的使用。对于虚拟桌面或者用于测试的虚拟服务器环境下,使用链接克隆可以大大降低对磁盘空间的占用。链接克隆与虚拟机快照类似,即快照生成那一时刻,虚拟机底层的虚拟磁盘文件被置为只读,后续的针对这个虚拟磁盘的更改都被另存到另外的文件当中。链接克隆会创建一个主虚拟磁盘影像,这个影像被多个虚拟机只读,但是所有虚拟机的写入操作均被重定向到各自的delta磁盘或文件中。比如,你创建了100个虚拟机,每个分配40GB的虚拟磁盘,如果不使用链接克隆的话,那么他们总共会消耗4TB的磁盘空间,但是如果你使用了链接克隆的话,那么你就可以只将1份40GB的虚拟磁盘共享给所有虚拟机使用,而另外只需要1GB到2GB的虚拟磁盘用来保存每个虚拟机的写入数据,这样就可以大大节省磁盘空间。
Thin Provision(自动精简配置)也可以帮助节省空间。自动精简配置既可以在虚拟机层实现,也可以在存储层实现。基本上所有的虚拟机均被分配了远大于它们实际需求的存储空间。自动精简配置可以让你对底层的存储空间进行超供,让虚拟机文件所占用的底层空间随用随分配,而不是一次性分配它所要求的空间。使用自动精简配置可以极大的降低虚拟机对底层磁盘空间的消耗,同时可以让你更好的控制昂贵的存储系统扩容。
4.避免不必要的IO操作。如果你根本不需要的话,那么为何要生成额外的磁盘IO呢?你应该总是尝试去限制虚拟服务器以及虚拟桌面生成磁盘IO。这包括金庸任何不需要的Windows服务、卸载不需要的应用程序、禁用文件索引、限制操作系统和应用程序的日志生成等。当然还有很多其他零零碎碎的可以调节的地方,这些细小的地方积累起来可以产生大量磁盘IO,如果消除它们,那么就可以大大降低额外不必要的磁盘IO了。你可以使用endpointmanagementtool以及ActiveDirectory组策略来帮助你控制和配置这些设置。这样的话,你不仅可以降低虚拟机耗费的不必要的磁盘IO,而且还可以降低对其他系统资源的消耗。降低虚拟机耗费的磁盘IO绝对一个聪明之举,它可以让你的存储系统最高效的运行。
5.针对你的工作负载情况使用最适合的存储系统。大多数物理主机服务器除了使用外部共享存储系统之外,还使用本地存储来存放虚拟机数据。各种各样的存储系统会体现出不同的性能属性,比如8Gb的FC通道SAN和1Gb的iSCSI或者NFS存储设备。除了不同的存储协议之外,你还面对着不同的磁盘驱动器类型和速度,比如10K或者15K转速的,以及各种磁盘驱动器接口,比如SAS,SATA等。面对如此多的存储种类,针对虚拟机来选择合适的存储系统是非常有意义的。将负载较小的虚拟机放置到稍微慢速一些的存储层级中,而将负载较高的虚拟机虚拟机放置到性能较高的存储层级中。你也可以选择使用一些支持自动分级存储的存储系统,比如CompellentTechnologiesInc.的FluidData(流动的数据)架构,或者EMCCorp.的FAST(FullyAutomatedStorageTiering,完全自动存储分级)技术,它们可以实现按照数据的访问频度来自动的将数据在不同的存储层级之间移动。
此外,你可以更进一步。比如你可以将虚拟机磁盘分成多个分区,而每个分区对应的虚拟磁盘文件可以按照不同的性能需求放置到多个存储层级中。通常的做法是,在操作系统中创建多个分区,比如Pagefile分区、应用程序分区以及数据分区。数据分区可以使用高性能存储层级以获得高IO访问速度,而慢速存储层级则可以用于其它数据。就算你不这么做,你也依然可以将每个虚拟机生成的Swap文件放置到较慢的存储层级中,当虚拟机的内存耗费超出了物理内存时,就会使用这些Swap文件。这样做也可以确保降低虚拟机对更高性能层级存储资源的耗费。
6.别忘了监控。人们基本上只有当出现问题时才会去注意到存储系统的统计监控数据。但实际上,对存储设备的监控应该是一个连续的过程。如果你不是去连续的监控存储性能数据,那么就不可能发现一些潜在问题以及瓶颈,也不可能做出后续的预测,从而你就不能先于问题发生而动作。这个问题对于基于以太网的iSCSI和NFS存储设备尤为重要,因为网络状况是否良好直接关系着存储设备表现出的性能。存储性能的监控需要同时在虚拟机层和存储层开展,因为有些问题可能只在某一层才可以表现出来,而另一层根本发现不了。对虚拟环境的监控相对于对物理环境的监控会更加复杂,一些专门为虚拟机环境所设计的监控工具可以监控终端用户和应用程序的行为,它们可以帮助你定位到底是哪些资源或者组件出现了瓶颈。
7.时刻注意那些可能不断增长的存储威胁。虚拟机快照以及自动精简配置后的虚拟机磁盘具有双倍的潜在威胁,因为它们可能随时会消耗掉全部虚拟机存储资源,而这会导致系统崩溃宕机。如果你打算用自动精简配置的方式来对底层存储进行超供,那么你就必须时刻注意底层空间的消耗情况。不要全靠自动精简配置来解决存储消耗问题,当你创建虚拟磁盘时,首先要去对虚拟机磁盘进行精确地空间分配,而不要去给他们分配一个它们根本不用不满的尺寸。
快照是个更大的威胁。虚拟机可以创建多个快照,这些快照的总共逻辑空间可以远远超过它们实际占用的空间。虽然快照是个很方便的工具,但是绝对不要认为它可以替代传统的备份。不但快照会占用额外的存储空间,它们还会降低存储系统的性能。对性能的影响尤其体现在你删除某个快照之后,因为系统需要将delta磁盘内的之前写入的数据写回到原来的虚拟磁盘内,这样就会产生高密度的磁盘IO。对于每个快照,试着去合理的规划它们的删除时间点,尽量排在非生产时段,这样会降低额外磁盘IO对性能的影响。
不要依赖手动方式来监控自动精简配置以及快照。对于Thin磁盘,对空间消耗比例设置一个报警阀值,一旦达到阀值,系统会自动报警让你第一时间知道。对于快照,对超过一定尺寸的快照设置一个报警触发点。此外,你也应当对系统整体的剩余空间进行自动报警监控,当剩余空间低时你将会第一时间得到通知。确保你的报警触发频率设置要高一些,因为Thin以及快照磁盘可能会增长的很快,有时候甚至都来不及对应。同时,也不要完全依靠快照自动报警,可以使用定期报告工具来监控快照,以确保不需要的快照可以第一时间被删掉。
8.将服务器虚拟化与存储虚拟化进行整合。越来越多的存储厂商正在将服务器虚拟化与存储正好,以便于在同一个管理控制台中同时管理和监控。典型的例子便是NetApp以及EMC分别为VMwarevCenterServer开发的插件:VirtualStorageConsole以及VirtualStorageIntegrator这两款产品,它们可以让管理员直接在vCenterServer中队存储系统进行管理和监控。这种整合方式极大的简化了对虚拟机所使用的存储系统的管理和监控,因为所有的工作,比如监控、供应、复以及其他很多存储操作步骤都可以直接在vCenter服务器上进行操作了。
存储厂商同时也在对虚拟化API进行大力的支持,以将存储层和虚拟化层进行更紧密的整合。通过使用VMwarevStorageAPI,一些原本只能在虚拟机中执行的动作,比如Blockzeroing(块清零)以及StorageVMotion(存储迁移)等就可以被下放到存储阵列中执行了。这样就可以降低对虚拟机服务器的资源消耗。这些API同时也提供了更加智能的多路径管理从而实现更好的IO吞吐量以及IO路径冗余接管,同时为诸如VMware的vCenterSiteRecoveryManager提供了更好的复制支持。
9.先不要抛弃传统的一些方法。从物理环境迁移到虚拟环境,往往伴随着一些思想上的变化。比如对于备份、服务器部署、监控和管理等过程均会随着虚拟环境的部署而模样大变。那些为监控物理环境而编写的应用程序可能将变得不再对虚拟环境有效,因为这些程序根本无法感知处于硬件和Guest操作系统之间的虚拟层中的逻辑以及部件。
对于备份,举例来讲,如果通过运行在物理服务器上的虚拟机操作系统层来执行备份的话,那样效率不会高。一些可以感知虚拟层的备份软件可以直接与虚拟层打交道,这样就可以做到更加迅速和高效。性能监控是另外一个例子,如果你使用一个无法感知虚拟层的OS监控工具,那么这将会导致性能监控结果不准确,因为它根本无法深入到底层的硬件层。
10.对存储数据流量进行优先级划分。对于一个承载多个虚拟机运行于其上的物理服务器,此时此刻这台服务器上的状况正犹如狂野西部一样,多个虚拟机会争抢这台物理服务器上有限的资源。极端情况下你可能会发现非关键的虚拟机影响了那些关键虚拟机对资源的控制和使用。为了避免这种情况的发生,可以考虑使用存储IO控制,对特定的关键虚拟机或者虚拟机上的关键业务提供一种QualityofService(QoS)服务质量级别保证。Vmware的vSphere4.1引入了一项新功能,叫做StorageIOControl(SIOC)存储IO控制,它通过衡量存储IO的延迟来工作。当在4秒钟的时隙内如果发生IO拥塞,这个功能便会强制让高优先级的虚拟机获得更多的IO资源。SIOC可以协助在多台忙碌的服务器之间回归秩序,让多个虚拟机和平的共存,避免几台抢资源厉害的虚拟机拖慢系统的整体性能。