一种运行多个虚拟机的方法及系统的制作方法

文档序号:6440441阅读:277来源:国知局
专利名称:一种运行多个虚拟机的方法及系统的制作方法
技术领域
本发明属于计算机技术领域,具体涉及一种在单镜像上同时运行多个虚拟机的方法及系统。
背景技术
虚拟化是云计算领域的关键技术和特征之一。虚拟化可极大的提升服务器的使用效率和降低使用成本,在虚拟化过程中,创建虚拟机的通常做法是为虚拟机指定一个安装了操作系统(比如windows xp系统、以桌面应用为主的Linux操作系统(ubuntu)或者其他操作系统)的镜像,然后通过虚拟化平台(比如Citrix的Xen、VMvare的vSphere等) 进行加载。在同一个物理主机(宿主机)上运行多个功能完全一样的虚拟机时,通过克隆的方式从已有的镜像生成多个相互独立的镜像,从而达到运行多个虚拟机的目的。这种克隆镜像的方式会造成两大后果一是对于大规模的虚拟化节点(虚拟化服务器),将存在多个克隆的镜像,比如一台物理主机上运行了 10个虚拟机,假设每个虚拟机镜像为4GB,将需要40GB的存储空间,假如整个云中有1000台这样的物理主机,存储设备的开销将变得非常庞大;二是不利于虚拟机操作系统及其上运行的软件的更新和升级,如果对上述1000台服务器的无数虚拟机进行同步更新和升级将会极大地浪费人力和物力。目前,Xen、vSphere和微软的Hyper-v都是采用这种克隆镜像的方式支持运行多个虚拟机。尽管Xen对同一个镜像被多次加载并没有限制,但被加载后运行的多个虚拟机会存在系统崩溃的问题,而Xen在虚拟机运行过程中并不会针对上述问题对镜像做相应的保护。

发明内容
本发明需要解决的技术问题是提供一种运行多个虚拟机的方法及系统,避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题。为了解决上述技术问题,本发明提供了一种运行多个虚拟机的方法,包括将虚拟机镜像划分为只读分区和可读写分区,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据;多个虚拟机加载所述虚拟机镜像,所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。进一步地,所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。进一步地,所述可读写分区为虚拟磁盘。进一步地,所述方法还包括为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系。 进一步地,不同的虚拟机对应不同的外部存储空间。 进一步地,所述方法还包括所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步。进一步地,所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步,包括所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内。进一步地,所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步还包括所述虚拟机启动时,将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内。为了解决上述技术问题,本发明还提供了一种运行多个虚拟机的系统,包括分区划分模块,用于将虚拟机镜像划分为只读分区和可读写分区,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据;多虚拟机加载模块,用于控制多个虚拟机加载所述虚拟机镜像;数据读写模块,用于控制所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。进一步地,所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。进一步地,所述可读写分区为虚拟磁盘。进一步地,所述系统还包括外部存储空间分配模块,用于为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系。进一步地,不同的虚拟机对应不同的外部存储空间。进一步地,所述系统还包括与所述数据读写模块和所述外部存储空间分配模块相连的数据同步模块,用于完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同

少ο进一步地,所述数据同步模块完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步,包括所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,所述数据同步模块将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内。进一步地,所述数据同步模块完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步,还包括所述虚拟机启动时,所述数据同步模块将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内。与现有技术相比,本发明提供的在单镜像上同时运行多个虚拟机的方法及系统避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题,在虚拟机关闭重启之后,从虚拟机的外部存储空间中进行数据恢复,即可恢复虚拟机退出前的运行状态,而且有利于虚拟机后续的迁移和维护。此外,极大地节省了虚拟机镜像所占用的存储空间,同时虚拟化服务器的更新和升级仅仅需要对一个镜像实施,即可同步到所有的节点,这不但节省了服务器的维护成本和缩短了维护时间,而且可以降低或者完全避免更新和升级过程中出错的可能性。


图1是实施例中运行多个虚拟机的方法流程图;图2是实施例中运行多个虚拟机的系统结构图;图3是一个应用示例中新建虚拟机的过程流程图;图4是一个应用示例中创建多个虚拟机的过程流程图;图5是一个应用示例中虚拟机与外部存储空间进行数据同步的流程图;图6是一个应用示例中虚拟机数据恢复过程流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。实施例一尽管Xen对同一个镜像被多次加载并没有限制,但被加载后运行的多个虚拟机会存在系统崩溃的问题,原因在于这些同时运行的虚拟机都可以往这个被加载的镜像中写入文件,引起文件读写冲突,进而导致文件系统被破坏,运行中的虚拟机随即崩溃。单镜像支持多虚拟机的文件读写冲突大致存在两种情况一是虚拟机运行过程中产生的系统日志等系统类文件,二是虚拟机上运行的软件所产生的诸如数据存储、用户设置等等。要实现同一个镜像上同时运行多个虚拟机,需要虚拟机各自保存其系统运行和软件运行过程中的文件和数据到不同的存储空间,但是共享操作系统和其上运行的软件。艮口, 将虚拟机系统和其上软件运行过程中可能产生数据操作的部分单独从镜像中分离出来,保留不变的部分。本实施例中,对镜像进行分区划分,将操作系统和无需改变的部分划分为只读写分区,另一分区用于上述虚拟机运行过程中产生的文件和数据读取操作,避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题。如图1所示,本实施例提供了一种运行多个虚拟机的方法,包括以下步骤SlOl 在虚拟平台上,比如vSphere或者Xen,将虚拟机镜像划分为只读分区和可读写分区;其中,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据,对该分区的数据只能进行写保护操作,以保证镜像上所安装的操作系统不会被破坏,所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。所述可读写分区为虚拟磁盘,类似于RAMDisk(RAM驱动器),采用RAMDisk机制,这个分区的空间通常比较小,比如100M,用于满足虚拟机运行过程中的数据的临时存储需求。S102 多个虚拟机加载所述虚拟机镜像;其中,多个虚拟机均指向同一个虚拟镜像,所述多个虚拟机可以运行在同一个镜像上进行数据读写操作。S103:所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。由于这个可读写分区为虚拟磁盘,其读写实际上类似RAMDisk的机制,在一段内存区域(该可读写分区)中,多个虚拟机同时运行过程中的文件和数据的读写操作不会发生冲突。也正因为这样,该可读写分区保存的数据与RAMDisk类似,无法永久保存的,在系统掉电或者重启后失效。所以,为了实现真正的数据保存,使虚拟机重启后数据依然有效, 本实施例还包括以下步骤S104 为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系;其中,不同的虚拟机对应不同的外部存储空间,所述外部存储空间可以包括比如,宿主机硬盘、U盘、存储卡,甚至是位于网络的存储设备,或者可根据实际情况进行配置。S105:所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步。其中,所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步,包括所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内;所述虚拟机启动时,将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内,恢复到虚拟机退出时的状态。这样,在虚拟机关闭重启之后,从虚拟机的外部存储空间中进行数据恢复,即可恢复虚拟机退出前的运行状态。此外,如图2所示,本实施例还提供了一种运行多个虚拟机的系统包括依次相连的分区划分模块、多虚拟机加载模块和数据读写模块,其中所述分区划分模块,用于将虚拟机镜像划分为只读分区和可读写分区;其中,只读分区中保存所述虚拟机镜像中需要进行写保护的数据;所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。其中,可读写分区为虚拟磁盘,类似于RAMDisk(RAM驱动器),这个分区的空间通常比较小,比如100M,用于满足虚拟机运行过程中的数据的临时存储需求。所述多虚拟机加载模块,用于控制多个虚拟机加载所述虚拟机镜像;其中,多个虚拟机均指向同一个虚拟镜像,所述多个虚拟机可以运行在同一个镜像上进行数据读写操作。所述数据读写模块,用于控制所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。此外,为了实现真正的数据保存,使虚拟机重启后数据依然有效,本实施例中所述系统还包括外部存储空间分配模块以及与所述数据读写模块和所述外部存储空间分配模块相连的数据同步模块;其中,所述外部存储空间分配模块,用于为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系。其中,不同的虚拟机对应不同的外部存储空间,所述外部存储空间可以包括比如,宿主机硬盘、U盘、存储卡,甚至是位于网络的存储设备,或者可根据实际情况进行配置。所述数据同步模块,用于完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步。作为优选的方式,所述数据同步模块完成数据同步的方式有所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,所述数据同步模块将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内。所述虚拟机启动时,所述数据同步模块将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内。在一个应用示例中,为了便于对上述实施例中的方法进行更具体和更详细的说明,下面以虚拟平台Xen和文件系统工具Aufs为例对本实施例进一步详细描述。Xen作为虚拟平台,支持运行多个虚拟机,Xen是开源项目,从网络上可以下载源码在Iinux系统上编译和安装,也可以下载Xen的二进制安装包直接安装,或者直接下载已经集成Xen的Iinux系统,比如CentOS。Xen的使用方法在网络上有大量的资料可以参考, 这里不再赘述。为了将Xen虚拟机系统和其上软件运行过程中可能产生数据操作的部分单独从镜像中分离出来,保留不变的部分。按照本发明的思路,需要对虚拟机镜像进行分区划分, 将通用和无需改变的部分划分为只读写分区,其余分区用于保存数据,Aufs提供了相应划分分区的解决办法。Aufs是个开源的文件系统工具,提供了这样一种机制可以将镜像划分成两个不同的分区,其中一个是只读分区,挂载操作系统,另一个分区是可读写分区,用来存放系统运行和软件运行过程中的文件和数据。这个可读写分区读写实际上类似RAMDisk的机制, 其保存的数据是无法永久保存的,在系统掉电或者重启后失效。但也正是这种机制,避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题。考虑到如何保存虚拟机运行过程中所产生的用户数据。如上所述,需要保存的数据已经单独分区,现在只需要挂载一个镜像之外的存储空间并映射到该分区即可,镜像之外的存储空间可以是宿主机的空闲硬盘,也可以是位于网络上的存储设备。当文件或数据保存在镜像内的可读写分区后,这些文件或数据将会被同步到挂载的外部存储空间。同理, 虚拟机启动时,保存在外部存储空间的文件或数据会被同步到镜像内的可读写分区内,恢复到虚拟机退出时的状态。此外,在虚拟化服务器运营的过程中,为了提供不间断的业务支持,虚拟机需要实现在各物理机间的迁移,网络文件系统(Network File System,简称NFQ服务器是必不可少的。虚拟机系统镜像和用于存储虚拟机保存的数据可以都存放在NFS服务器上,这样有利于虚拟机后续的迁移和维护。在一个应用示例中,以Xen和Aufs为例,如图2 5所示,单镜像支持同时运行多个虚拟机主要涉及以下几个方面一、如图3所示,新建虚拟机的过程包括以下步骤S201 新建虚拟机的配置文件,包括对诸如CPU、内存、虚拟机ID、网络MAC地址等进行配置;
S202 在NFS服务器上为该虚拟机分配一个独立的存储空间(即虚拟机的外部存储空间),其与虚拟机ID唯一对应,以保证数据存储的独立性;S203 为该虚拟机创建一个空白的镜像,镜像大小可根据实际需要分配,例如,如果安装Windows XP需要10G,Win7可能需要20G,安装游戏要按游戏软件的大小;在该镜像上安装操作系统,支持多个虚拟机在这个镜像上运行;上述步骤S201 S203是现有技术中虚拟机镜像的初始化过程,在虚拟机建立后均会为虚拟机建立相应的镜像。S204:启动虚拟机,将所述镜像划分为只读和可读写两个分区,分别对应于系统分区和数据分区;S205 将步骤S202中分配的外部存储空间挂载到该虚拟机,作为挂载分区,并建立与上述数据分区的映射关系;S206 实现可读写分区和挂载分区之间的数据同步,即,后续虚拟机运行过程中产生的任何数据存储操作都将被同步到挂载分区,比如文件的保存、删除等。二、如图4所示,单镜像支持同时运行多个虚拟机,创建多个虚拟机的过程包括以下步骤S301 创建多个虚拟机的配置文件,该配置文件的文件名具有唯一性,该配置文件中的虚拟机ID、网络MAC地址也具有唯一性,以免造成冲突。但配置文件中的镜像名称是一致的,多个虚拟机均指向上述新建虚拟机生成的镜像;S302 为步骤S301中创建的多个虚拟机分别在NFS服务器上分配相应的存储空间,各个存储空间与各虚拟机ID唯一对应;S303 加载已有的镜像文件,启动各虚拟机;在实际操作中,上述步骤S302和S303可以互换顺序,即,也可以先加载已有的镜像文件,启动各虚拟机,然后再为各个虚拟机分配外部存储空间。S304 将步骤S302中所分配的存储空间分别挂载到对应的虚拟机上,作为各虚拟机挂载分区,并建立与上述数据分区的映射关系;S305 实现各虚拟机可读写分区与其对应挂载分区的数据同步。三、如图5所示,虚拟机与外部存储空间进行数据同步的过程包括以下步骤S401 虚拟机在可读写分区进行数据读写操作,比如保存、删除等;S402 虚拟机在可读写分区的数据操作完成之后,同步类似操作到镜像外的挂载分区,实现保存、删除等操作;四、如图6所示,虚拟机数据恢复过程包括以下步骤S501 启动(重启)已有虚拟机;S502:将与该虚拟机数据分区建立了映射关系的外部存储空间挂载到该虚拟机, 作为挂载分区;S503 将挂载分区的数据同步到虚拟机可读写分区,恢复虚拟机退出前的状态;S504 虚拟机进入可运行状态。上述应用示例中,以Xen和Aufs为例,详细描述了如何实现在单一操作系统镜像上同时运行多个虚拟机的数据读写操作。这里以Xen和Aufs为例,并非表示本实施例所公布的方法只能用于Xen和Aufs的情况,而是因为Xen和Aufs是开源项目,可以很方便地根据本实施例所需进行代码定制和修改,在实现单镜像多虚拟机支持时有较大的自由度,仅仅是为了达到对本实施例内容进行实际验证的目的。实际上,本实施例的方法同样可适用于包括vSphere、Hyper-v在内的其他任何虚拟化平台。本实施例中所涉及到的Xen、Aufs 和NFS的使用方法为现有技术,这里不再赘述。从上述实施例可以看出,相对于现有技术,上述实施例中提供的在单镜像上同时运行多个虚拟机的方法及系统避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题,在虚拟机关闭重启之后,从虚拟机的外部存储空间中进行数据恢复,即可恢复虚拟机退出前的运行状态,而且有利于虚拟机后续的迁移和维护。此外,极大地节省了虚拟机镜像所占用的存储空间,同时虚拟化服务器的更新和升级仅仅需要对一个镜像实施,即可同步到所有的节点,这不但节省了服务器的维护成本和缩短了维护时间,而且可以降低或者完全避免更新和升级过程中出错的可能性。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。以上所述仅为本发明的优选实施例而已,并非用于限定本发明的保护范围。根据本发明的发明内容,还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种运行多个虚拟机的方法,包括将虚拟机镜像划分为只读分区和可读写分区,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据;多个虚拟机加载所述虚拟机镜像,所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。
2.如权利要求1所述的方法,其特征在于,所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。
3.如权利要求1所述的方法,其特征在于, 所述可读写分区为虚拟磁盘。
4.如权利要求1或3所述的方法,其特征在于,所述方法还包括为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系。
5.如权利要求4所述的方法,其特征在于, 不同的虚拟机对应不同的外部存储空间。
6.如权利要求4所述的方法,其特征在于,所述方法还包括所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步。
7.如权利要求6所述的方法,其特征在于,所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步,包括 所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内。
8.如权利要求7所述的方法,其特征在于,所述可读写分区与所述虚拟机的外部存储空间之间进行数据同步还包括 所述虚拟机启动时,将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内。
9.一种运行多个虚拟机的系统,包括分区划分模块,用于将虚拟机镜像划分为只读分区和可读写分区,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据;多虚拟机加载模块,用于控制多个虚拟机加载所述虚拟机镜像; 数据读写模块,用于控制所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。
10.如权利要求9所述的系统,其特征在于,所述需要进行写保护的数据包括操作系统,或者,包括操作系统和其他不需要变更的数据。
11.如权利要求9所述的系统,其特征在于, 所述可读写分区为虚拟磁盘。
12.如权利要求9或11所述的系统,其特征在于,所述系统还包括外部存储空间分配模块,用于为所述虚拟机分配所述虚拟机镜像之外的外部存储空间,并与所述可读写分区建立映射关系。
13.如权利要求12所述的系统,其特征在于,不同的虚拟机对应不同的外部存储空间。
14.如权利要求12所述的系统,其特征在于,所述系统还包括与所述数据读写模块和所述外部存储空间分配模块相连的数据同步模块,用于完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步。
15.如权利要求14所述的系统,其特征在于,所述数据同步模块完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步,包括所述虚拟机在可读写分区对其系统运行和软件运行过程中的文件和数据进行读写操作完成之后,所述数据同步模块将所述文件和数据同步到与所述虚拟机建立映射关系的外部存储空间内。
16.如权利要求14所述的系统,其特征在于,所述数据同步模块完成所述可读写分区与所述虚拟机的外部存储空间之间的数据同步,还包括所述虚拟机启动时,所述数据同步模块将保存在所述虚拟机的外部存储空间中的文件和数据同步到镜像内与所述虚拟机的外部存储空间建立映射关系的可读写分区内。
全文摘要
本发明公开了一种运行多个虚拟机的方法及系统,该方法包括将虚拟机镜像划分为只读分区和可读写分区,所述只读分区中保存所述虚拟机镜像中需要进行写保护的数据;多个虚拟机加载所述虚拟机镜像,所述多个虚拟机在所述可读写分区中对其系统运行和软件运行过程中的文件和数据进行读写操作。该系统包括分区划分模块、多虚拟机加载模块以及数据读写模块,本发明提供的方法和系统避免了多个虚拟机运行在同一个镜像上时文件的读写冲突问题。此外,虚拟化服务器的更新和升级仅需对一个镜像实施,即可同步到所有节点,不仅节省了虚拟服务器的维护成本,缩短了维护时间,而且可以降低或者完全避免更新和升级过程中出错的可能性。
文档编号G06F9/455GK102521016SQ20111040618
公开日2012年6月27日 申请日期2011年12月8日 优先权日2011年12月8日
发明者何平, 缪敬 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1