霜天部落 | 关注LAMP高性能、高并发架构的设计与研究

Linux虚拟化的危险、陷阱和规划

Linux虚拟化并不是什么新鲜事物,至今大约已经有10个年头了,单从技术上讲,它确实取得了显著的进步,但这并不意味着它就变简单了(51CTO相关文章:Linux虚拟化:我爱你的十大诱人理由)。恰恰相反,现在到处都充斥着令人眼花缭乱的虚拟化解决方案,都声称可以管好工作负载和存储,减少复杂性,降低成本和能源消耗,但都没有回答是否应该部署虚拟化的问题,今天,我们面临的真正问题是什么样的虚拟化解决方案适合虚拟化什么样的工作负载。

另外,虚拟化也不是万能的,有些工作负载只有直接在物理服务器上运行才能获得最佳效果。不过话说回来,服务器虚拟化确实有相当多的优点。我们将用4 篇文章对Linux虚拟化进行详细阐述,本文先概述一下Linux虚拟化解决方案,未来几周内,你将看到有关标准虚拟化战略,虚拟设备,云计算等更多细节 信息。

虚拟化为我们带来了什么?

首先,我要告诉你的是虚拟化解决方案现在的销售情况还不错,通过虚拟化提高了服务器利用率,降低了能源成本,通过最大化每个服务器承担的工作负载, 提高了资源的利用率。以前,运行在商用x86服务器上的Linux往往只使用了一小部分服务器计算能力,大量的计算能力都处于闲置状态。通过使用虚拟化, 你可以确保硬件承载的工作量适当,既不超负荷,又不空转,同时通过将多个物理服务器上的应用整合到一个服务器还可以节省电力成本。(请参考51CTO相关 文章:虚拟化技术在高性能计算机系统中的应用研究

如果你选择了合适的工具,并制定好管理方案,虚拟化还可以减少复杂性,提供更方便的系统管理。优秀的虚拟化管理工具可以从一个GUI控制台管理数十 甚至数百个虚拟机,其复杂性不会超过管理一台物理服务器。例如,使用Parallels Virtuozzo容器,只需要点击几下鼠标,配置和部署一个标准操作系统模板就可以让虚拟机上线了,使用SUSE Studio,你可以在几分钟内快速搭建起一个VMware或Xen虚拟化服务器,开源虚拟机Xen 4.0发布,增强了容错性和可伸缩性。

虚拟化也带来了更大的灵活性,例如,当工作负载超出其资源承受极限时,通过虚拟化可以将更多的资源分配给同一台服务器,也可以将虚拟机(VM)移动到容量更大的服务器。如果你在使用基于云的解决方案,天空就是工作负载灵活性的限制。

注意,我们要谈的是服务器虚拟化,不会过多涉及桌面级虚拟化解决方案,因此包括VirtualBox,VMware Workstation和Parallels Desktop等在内的桌面级虚拟化工具,还请大家自行研究,但我们强烈建议不要在关键业务上使用这些桌面级虚拟化解决方案。(51CTO相关文章:如何面对服务器虚拟化——中小企业篇

Linux服务器虚拟化解决方案为各种规模的组织提供了大量的选择,无论你是想整合服务器,还是想给Web 2.0初创公司提供一个解决方案,Linux应该是虚拟化规划的核心,但问题是它适合哪些项目,应该选择哪个厂商的解决方案。

虚拟化的前景

虚拟化涉及的技术领域广泛,最初,谈及Linux虚拟化时,往往指的是完全虚拟化,即主机操作系统运行了多个客户机操作系统,好像它们都运行在自己 的硬件上一样,也许是Linux,也许是其它操作系统。现在,人们谈论虚拟化时可能指的是操作系统虚拟化,存储虚拟化或虚拟设备。

对于操作系统虚拟化,你会发现有很多成熟的Linux虚拟化解决方案,首先你要决定是使用完全虚拟化还是基于容器的虚拟化,抑或是想要基于云的计 算。这里所说的完全虚拟化,我指的是在一个系统管理程序(Hypervisor)上运行一或多个操作系统的解决方案,如Xen,Parallels的 Bare Metal,VMware ESXi和Linux自带的KVM(Kernel-based Virtual Machine,基于内核的虚拟机)。

完全虚拟化在今天被广泛使用,但基于容器的虚拟化对某些工作负载来说也是一个很好的解决方案,基于容器的虚拟化一般不会运行多个操作系统,它是在它 自己的用户空间中容纳客户机操作系统,而不是运行在一个单独的操作系统内核上,基于容器的虚拟化更坚固,因为不需要处理硬件仿真,它需要的系统开销更少。 基于容器的虚拟化的缺点是不允许在同一个硬件平台上运行多个操作系统,想在一台服务器上使用基于容器的虚拟化解决方案运行6个Linux实例?没问题,但 如果想和Microsoft Server一起运行几个Linux客户机?使用基于容器的虚拟化解决方案就不行了。

对于基于容器的虚拟化解决方案,你可以研究一下Parallels Virtuozzo容器,或是开源但功能更少的OpenVZ,如果你使用的是FreeBSD,你可以尝试一下jails,如果你使用的是Solaris/OpenSolaris,那么可以试试Zones。

完全虚拟化和基于容器的虚拟化之间有什么实质性区别呢?使用完全虚拟化解决方案,你可以使用大部分操作系统,也可以混合使用,例如,一个小型组织可 能在一台服务器上使用完全虚拟化工具,如Xen、Parallels、KVM、VMware,或微软的Hyper-V,同时运行Windows Server 2008和SUSE Linux Enterprise Server 10以整合它们的工作负载。

但在托管环境中,你需要在一台物理服务器上运行几十个Linux虚拟专用服务器,类似OpenVZ或Virtuozzo可能是最好的选择。

虽然KVM已经非常成熟,但它仍然不被认为是与Xen,VMware或Parallels解决方案在同一个层次上,KVM状态页(http://www.linux-kvm.org/page/Status)列出了已经完成的工作和正在进行的工作,从长远来看,KVM完全可以达到专业解决方案同等水平,值得一提的是KVM现在已经进入到Linux内核主干,引起了内核社区的极大关注。

危险,陷阱和规划

虚拟化不是解决你所有计算问题的万能方案,事实上,如果你选择了错误的或不当的虚拟化解决方案,让你头疼的问题可能更多。为了避免增加你的工作量,对方案进行评估很重要,因为至少未来5年你都得与它们打交道。

首先,确保你的组织准备好迎接虚拟化带来的挑战,例如,当两个部门共享物理硬件运行虚拟机时,谁承担多少虚拟化成本,谁可以控制底层硬件,需要调整虚拟机资源分配时该谁负责,如何协调部门间的资源争夺,这些问题都需要好好思考和规划,否则只会出现混乱的局面。

如果部门自己有IT人员,那么谁有权部署和管理虚拟机?他的管理范围有多大?这些都不属于技术问题,但这些问题必须在内存不够用,存储不够用等问题出现之前先得到解决和明确。

你还需要防止虚拟机滥用,在未好好规划之前,不应该一时冲动就部署虚拟机,管理虚拟机应该象管理物理服务器一样,应当有计划地规划和部署。(51CTO相关文章:服务器虚拟化整合规划五步走

另一个需要考虑的是虚拟化工作负载的类型,底层硬件以及虚拟化解决方案的限制,虽然许多工作负载都适合虚拟化,但不是所有的都适合,例如,你要确保为资源密集型应用提供强大的硬件支撑,如果不行,不如让它们直接运行在物理硬件平台之上。

还有一个经常被忽略的问题也很重要,那就是培训,虽然现在的虚拟化工具对系统管理员来说不是很大的挑战,但也不是每个人都已经熟练掌握,如果你的组织计划用新的工具集实施虚拟化,培训应该是实施过程和预算的一部分。

通过本文我们只看到了虚拟化很片面的一部分内容,接下来几篇文章我们51CTO将介绍虚拟化在企业中的最佳战略实践,并会对完全虚拟化和基于容器的虚拟化之间的区别进行深入讨论,还会就云计算对你的组织有何意义进行讨论,请继续关注。

原文:Today’s Guide to Linux Virtualization 作者:Joe ‘Zonker’ Brockmeier