具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下通过具体实施例并参见附图,对本发明进行详细说明。
本申请中,生成每一虚拟机模板时,在该虚拟机模板对应的基础镜像文件中预留出空闲存储空间,为该虚拟机模板创建超级管理虚拟机;
当需要对基于上述基础镜像文件创建的虚拟机中的任一虚拟机升级时,查找到该虚拟机对应的基础镜像文件,暂停所有基于该基础镜像文件创建的虚拟机,通过该基础镜像文件对应的超级管理虚拟机对该基础镜像文件进行升级,将升级时变化的数据写入该基础镜像文件预留的空闲存储空间,对基于该基础镜像文件创建的所有虚拟机进行批量升级。
本申请方案通过预先在基础镜像文件中留出空闲存储空间,升级时将因升级而导致变化的数据写入所述预留的空闲存储空间中,使得在使用backing file技术基于基础镜像文件部署大量虚拟机的情况下,不需要对每个虚拟机进行补丁或软件升级,只需要对所述基础镜像文件进行补丁或软件升级,即可完成对所有基于该基础镜像文件创建的虚拟机的补丁或软件升级,可以极大减少升级的工作量,简化升级操作,提高效率。
为了便于更好理解本申请的实施例,首先对现有虚拟机管理平台的系统组网结构进行简要介绍。
如图2所示,三台物理主机在一个集群中,为了简化,这里仅仅以三台物理主机组成的集群为例,实际组网中的物理主机节点个数可以灵活的弹性伸展,各物理主机上运行基于Linux的qemu-kvm虚拟化平台,运行libvirt开源等虚拟化中间件,是虚拟机、虚拟交换机、存储的载体。每个物理主机上运行多个虚拟机,如物理主机A上运行虚拟机VM0~VM1,各虚拟机上分别运行不同的业务,比如:DataBase server、web server、file server、ftp serve、mail server等。
虚拟机管理平台用于实现对所有物理主机以及物理主机上运行的虚拟机、虚拟交换机、存储等资源的统一管理。相关功能介绍如下:
A、实现对物理主机的增加、删除等操作。虚拟机管理平台通过ssh等远程工具来管理物理主机。
B、实现虚拟机的创建、删除、启动、停止、暂停、迁移等所有虚拟机生命周期相关的操作和管理。
C、实现对虚拟机模板的管理。虚拟机模板可以由一个虚拟机转化或克隆而来。本申请实施例中对虚拟机模板的相关操作均可由虚拟机管理平台来实现。
虚拟机管理平台管理一组虚拟机模板,比如winxp_templet、win7_templet、redhat6_templet等,管理员通过指定模板批量部署虚拟机,在部署虚拟机时采用backing file技术,将模板对应的磁盘文件作为基础镜像文件,新部署的虚拟机在此基础镜像文件的基础上创建属于自己的可读写的新的磁盘文件(或称为增量镜像文件),用于保存自己的私有数据。
上述系统组网属于现有虚拟机管理平台的常用组网方式,下面结合图2的虚拟机管理平台组网结构示意图,通过具体实施例对本申请方案进行进一步说明。
本申请实施例的方法流程如图3所示,一种虚拟机升级的方法,包括以下步骤:
步骤301:生成每一虚拟机模板时,在该虚拟机模板对应的基础镜像文件中预留出空闲存储空间,为该虚拟机模板创建超级管理虚拟机。
如图2所示,管理员可以在IE等浏览器上登录虚拟机管理平台vManager,依据具体的业务部署需要或用户群类别创建用于转为虚拟机模板的虚拟机,在创建的虚拟机上安装指定操作系统以及相应补丁、需要的应用软件等。例如,若需要针对销售业务生成虚拟机模板,则可在创建的虚拟机上安装指定操作系统、以及与销售相关的应用软件,然后将此虚拟机转为虚拟机模板,即依据销售业务生成了相应的虚拟机模板。上述过程属于现有技术,此处不再赘述。
本申请实施例中,生成的任一虚拟机模板对应一个基础镜像文件,当所述基础镜像文件为qcow2格式时,数据被保存在多个簇cluster内,如图4所示。
qcow2的全称为QEMU Copy On Write version 2,其中,QEMU是一套由FabriceBellard所编写的开源跨平台模拟器,qcow2格式是一种常用的虚拟机磁盘镜像格式,在qcow格式上优化而来,使用qcow2格式时,数据被保存在多个簇cluster内,qcow2格式根据实际使用量来占用空间使用量,磁盘镜像文件大小随着实际使用量增长,支持快照,支持加密和压缩,是目前比较主流的磁盘镜像格式。
生成任一虚拟机模板时,若该虚拟机模板对应的基础镜像文件为qcow2格式,则可以通过qemu软件的命令语句,实现在所述qcow2格式基础镜像文件中预留设定数量的空闲簇cluster,如图4所示的预留空闲区,为后续可能的系统补丁或软件升级做准备。
例如,可以通过在qemu软件的qemu-img命令语句中增加reserve参数(也可用其它参数表示),实现在现有qcow2格式基础镜像文件的基础上预留多个clusters,比如,为基础镜像文件win7-001.qcow2预留500个cluster的空闲空间,可使用如下命令:
qemu-img reserve-clusters 500 win7-templet.qcow2
每个cluster的大小根据实际需要设置,比如可以通过cluster_size参数设定。
所述预留的空闲cluster的数量根据该虚拟机模板安装的操作系统、及该虚拟机模板对应的qcow2格式基础镜像文件的实际磁盘占用空间大小来确定。
例如,若该虚拟机模板安装的操作系统比较稳定,假设为Linux系统,系统漏洞较少,需要打补丁的地方就越少,进行补丁升级的次数也就越少,这时可以少预留一些空闲cluster,否则,可以多预留一些空闲cluster。
此外,预留的cluster数量还与该虚拟机模板对应的qcow2格式基础镜像文件的实际磁盘占用空间大小有关,比如winxp模板安装完成后磁盘占用2G、且每个cluster大小为2M;那么,可以考虑预留2G的空闲空间用于升级,即预留1000个cluster。
当然,也可以使用qemu软件的其它命令语句实现上述预留空闲空间的目的。
每个cluster上带有特殊标记,用于指示该cluster是为升级预留的、且只有超级管理虚拟机有写入的权限,还用于标识该cluster是否已被使用。
例如,每个cluster上可带有特殊标记LabelA和LabelB,LabelA用于指示该cluster是为升级预留的、且只有超级管理虚拟机有写入的权限,LabelB用于标识该cluster是否已被使用。
当然,也可以用其它方式设置每个cluster的标记,比如,也可以为每个cluster只设置一个标记,用一个比特位表示,该标记的值为1时,表示该cluster是为升级预留的、只有超级管理虚拟机有写入的权限、且该cluster未被使用,该标记的值为0时,表示该cluster是为升级预留的、只有超级管理虚拟机有写入的权限、且该cluster已被使用。
本申请实施例中的基础镜像文件也可以采用其它格式,比如qcow格式、raw格式等,并不仅限于qcow2格式。
为该虚拟机模板创建一个超级管理虚拟机,通过该超级管理虚拟机可以对基础镜像文件进行补丁或软件升级管理,在升级时将变化的数据写入上述预留的空闲cluster中。
每个虚拟机模板都对应着一个超级管理虚拟机,该超级管理虚拟机对该虚拟机模板对应的基础镜像文件有读写权限。
步骤302:当需要对基于上述基础镜像文件创建的虚拟机中的任一虚拟机升级时,查找到该虚拟机对应的基础镜像文件,暂停所有基于该基础镜像文件创建的虚拟机,通过该基础镜像文件对应的超级管理虚拟机对该基础镜像文件进行升级,将升级时变化的数据写入该基础镜像文件预留的空闲存储空间,对基于该基础镜像文件创建的所有虚拟机进行批量升级。
基于上述基础镜像文件创建虚拟机的方法为:
使用backing file技术基于此基础镜像文件创建虚拟机,所述创建的每一虚拟机上的镜像文件,为基于此基础镜像文件而生成的增量镜像文件。
基于所述基础镜像文件创建的虚拟机的数量可以根据实际需要而定。
对于创建的任何一个虚拟机,其上的镜像文件就是基于基础镜像文件而产生的增量镜像文件,用于保存该虚拟机的私有文件,且这个增量镜像文件是可读可写的,而基础镜像文件是只可读、不可写的。
例如,如图2所示,管理员若需要选择在物理主机B上批量部署虚拟机,则可使用backing file技术在虚拟机模板对应基础镜像文件的基础上创建虚拟机VM2~VM5,即为每个虚拟机基于该基础镜像文件创建一个可读可写的增量镜像文件,用于保存该虚拟机的私有数据。
backing file技术属于现有技术,此处不再赘述。
管理员可以将上述创建的虚拟机分配给指定的用户使用,或作为一个公共虚拟机供多人使用,虚拟机运行一段时间后,需要进行系统补丁或软件升级。
当虚拟机的操作系统出现漏洞时,需要对虚拟机进行补丁升级。有时也需要对虚拟机上的软件进行升级。
当需要对任一虚拟机升级时,可以很容易查找到该虚拟机对应的基础镜像文件,这部分属于现有技术。
该基础镜像文件对应的超级管理虚拟机,即如步骤301中所述,为该基础镜像文件所在的虚拟机模板创建的超级管理虚拟机。
通过所述超级管理虚拟机对该基础镜像文件进行补丁或软件升级,将升级时变化的数据写入该基础镜像文件预留的空闲存储空间时,查找携带了所述特殊标记的空闲cluster,将升级时变化的数据写入所述cluster,更新所述cluster携带的特殊标记。
如图4所示,需要先查找适用于升级的预留空闲区,因为也有可能存在一些预留空闲区是用于其它用途的,所以,需要找到专门用于升级的预留空闲区,即查找到携带了所述特殊标记的空闲cluster,接续步骤301中的举例,就是查找携带了特殊标记LabelA和LabelB、且LabelB标识为未被使用的cluster,然后将因为升级而带来变化的数据写入所述cluster。由步骤301中的示例可知,每个cluster上带有特殊标记LabelA和LabelB,LabelA用于指示该cluster是为升级预留的、且只有超级管理虚拟机有写入的权限,LabelB用于标识该cluster是否已被使用。将升级时变化的数据写入所述cluster中,还要更新所述cluster携带的特殊标记,例如,需要将LabelB更新为标识所述cluster已被使用。
以补丁升级为例,在任一虚拟机上的操作系统需要补丁升级时,找出该虚拟机对应的基础镜像文件,暂停所有基于该基础镜像文件创建的虚拟机,启动所述基础镜像文件对应的超级管理虚拟机,通过所述超级管理虚拟机对所述基础镜像文件进行补丁升级操作,且在升级操作时,在该超级虚拟机内部,同补丁程序交互,获取数据变化,并能够查找到事先预留的clusters,将变化的数据写入事先预留出来的用于升级的空闲clusters中并更新特殊标记。
如图4所示,将升级时变化的数据写入该基础镜像文件预留的空闲存储空间时,按补丁或软件的升级原理,会把只限于某一段二进制代码的跳转地址修改为指向补丁或软件升级之后的新的二进制代码地址,也就是说,若基础镜像文件的某部分数据(一般为一段二进制代码)在升级时发生了变化,则将发生变化了的该部分数据写入基础镜像文件的预留存储空间,并将该部分数据的跳转地址修改为指向预留存储空间中的写入地址,升级完成后,虚拟机在读磁盘操作时,当读到这部分数据时,根据上述跳转地址指向,会读取上述新地址的数据。因此,可以实现只对基础镜像文件升级,就完成了对所有基于该基础镜像文件创建的大量虚拟机的升级。
升级完成后,恢复升级前暂停的所有虚拟机,即对所述暂停的所有虚拟机取消暂停操作,关闭超级管理虚拟机。这样就完成了所有虚拟机的补丁或软件升级工作。
升级前之所以需要暂停所有基于该基础镜像文件创建的虚拟机,是为了保证系统补丁或软件升级之前,使用各增量镜像文件的虚拟机不会去读写因为基础镜像文件进行了系统升级而做修改的那部分内容,从而保证了基于基础镜像文件部署的所有虚拟桌面不至于受到系统补丁或软件升级的影响,可以在升级完成后不对增量镜像文件进行修改而直接使用。
也就是说,虽然基础镜像文件进行了升级,发生了变化,但基于该基础镜像文件创建的所有虚拟机却可以不因该基础镜像文件的变化而改变各自的增量镜像文件,仍然可以直接使用修改后的所述基础镜像文件。
目前,现有技术中,针对windows系列操作系统的虚拟机进行升级,可以使用Windows Server Update Service(WSUS)技术,该技术是微软提供的免费网络化补丁管理的统一解决方案,WSUS可以从微软公司的官方网站上自动下载最新的Windows操作系统补丁,并且可以自动分发给内网中的各终端用户,帮助管理员进行局域网内的系统补丁升级管理。WSUS采用C/S工作模式,分为WSUS服务器端和客户端,服务器端软件可以从微软网站上获取,WSUS客户端已被包含在各Windows操作系统上,无需单独安装。对于linux系列操作系统的虚拟机,也有类似的相关技术。这种情况下,一般是安装一个虚拟机,然后复制相应的份数,形成各个虚拟机,不是采用backing file技术基于一个基础镜像文件而生成增量镜像文件的虚拟机。
上述现有技术方案虽然将管理员从大量的繁琐的手工升级工作中解脱出来,可以通过软件实现自动升级,但是,仍然需要在每一个终端虚拟机上执行升级工作,升级完成后一般都需要对虚拟机进行重启,而本申请方案无需在每个终端虚拟机上执行升级工作,只需对基础镜像文件进行升级即可,且无需对虚拟机进行重启,只需暂停就可以。相对于上述现有方案,本申请方案创建的虚拟机因为只保存该虚拟机的私有数据而可以节省存储空间,且因为无需重启而对用户使用的干预较小。
本申请实施例的装置结构如图5所示,一种虚拟机升级的装置,包括:存储空间预留模块、超级管理虚拟机创建模块、虚拟机创建模块和虚拟机升级模块,其中:
存储空间预留模块,用于生成每一虚拟机模板时,在所述虚拟机模板对应的基础镜像文件中预留出空闲存储空间;
超级管理虚拟机创建模块,用于为所述虚拟机模板创建超级管理虚拟机;
虚拟机创建模块,用于基于上述基础镜像文件创建虚拟机;
虚拟机升级模块,用于当需要对虚拟机创建模块创建的任一虚拟机升级时,查找到该虚拟机对应的基础镜像文件,暂停所有基于该基础镜像文件创建的虚拟机,通过该基础镜像文件对应的超级管理虚拟机对该基础镜像文件进行升级,将升级时变化的数据写入该基础镜像文件预留的空闲存储空间,对基于该基础镜像文件创建的所有虚拟机进行批量升级。
较佳地,所述虚拟机创建模块,具体用于:
基于上述基础镜像文件创建虚拟机时,使用backing file技术基于此基础镜像文件创建虚拟机,所述创建的每一虚拟机上的镜像文件,为基于此基础镜像文件而生成的增量镜像文件。
较佳地,若所述基础镜像文件为qcow2格式,所述存储空间预留模块具体用于:
生成任一虚拟机模板时,通过qemu软件的命令语句,实现在所述qcow2格式基础镜像文件中预留设定数量的空闲簇cluster;每个cluster上带有特殊标记,用于指示该cluster是为升级预留的、且只有超级管理虚拟机有写入的权限,还用于标识该cluster是否已被使用。
较佳地,所述存储空间预留模块预留的空闲cluster的数量,根据该虚拟机模板安装的操作系统、及该虚拟机模板对应的qcow2格式基础镜像文件的实际磁盘占用空间大小来确定,每个cluster的大小根据实际需要设置。
较佳地,所述虚拟机升级模块,在将升级时变化的数据写入该基础镜像文件预留的空闲存储空间时,查找携带了所述特殊标记的空闲cluster,将升级时变化的数据写入所述cluster,更新所述cluster携带的特殊标记。
本申请实施例中,为了能够实现大量虚拟机的补丁或软件升级,对虚拟机模板对应的基础镜像文件做了特殊处理,即在安装完成操作系统后,预留足够大的磁盘存储空间(多个簇cluster,比如一个cluster为2M,预留500M的空间的话,就是预留256个clusters),为后续可能的补丁或软件升级作准备。此外,预留的空闲存储空间也可以用来进行数据共享。
这样,基于虚拟机模板部署的所有的虚拟机都对这些预留的存储空间有读的权限,基于该虚拟机模板部署的虚拟机对应的可读写的增量镜像文件的内容不必由于系统补丁或软件升级而改变。
也就是说,系统升级之前,使用各增量镜像文件的虚拟机不会去读写因为基础镜像文件进行了系统升级而做修改的那部分内容,从而保证了基于基础镜像文件部署的所有虚拟桌面不受到系统补丁或软件升级的影响,可以在补丁或软件升级完成后,不对增量镜像文件进行修改而直接使用增量镜像文件。如此,可以简化使用backing file技术创建的大量虚拟机的系统补丁或软件升级操作,减少升级的工作量,提高升级效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。