具体实施方式
参阅图1所示,是本发明虚拟机启动排程系统200较佳实施例的应用环境图。该虚拟机启动排程系统200应用于监控计算机20中。该监控计算机20与数据中心(Data Center)50通过网络40进行通信连接。
所述网络40可以是互联网、局域网或者其它通讯网络。
所述数据中心50包括多个服务器500(图中以四个为例),所述服务器500为刀片服务器。在本实施例中,所述服务器500称为Host主机,每个Host主机上安装有一个或多个虚拟机,为了更有效的管理这些虚拟机,每个Host主机上还安装有Hypervisor软件。所述Hypervisor软件是一种运行在服务器500和服务器500的操作系统之间的中间软件层,可允许多个操作系统和应用共享服务器500上的硬件,也可叫做虚拟机监视器(virtual machine monitor,VMM)。Hypervisor软件可以访问服务器500上包括CPU、磁盘和内存在内的所有物理设备,Hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器500启动并执行Hypervisor软件时,Hypervisor软件会分配给每一台虚拟机适量的内存、CPU、网络和磁盘等资源,以保证虚拟机的运行。
所述监控计算机20用于监控数据中心50的服务器500的运行情况,获取每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。具体而言,所述服务器500的配置信息包括服务器500的CPU时钟频率、CPU核心数量、CPU的缓存值、CPU型号、内存的容量、内存的时钟频率、内存的型号、存储器的容量、存储器的接口存取速度及存储器的型号等信息。所述服务器500分配给虚拟机的资源信息包括每个虚拟机所分配到的CPU核心数量、内存的容量及存储器的容量。
该监控计算机20还安装有动态主机设置协议(Dynamic HostConfiguration Protocol,DHCP)服务,通过DHCP服务可以分配网络之间互连的协议(Internet Protocol,IP)地址给数据中心50中的各个服务器500,使监控计算机20能够与数据中心50的各个服务器500进行通信。该监控计算机20可以是个人计算机、网络服务器,还可以是任意其它适用的计算机。此外,该监控计算机20还可以放置在数据中心50内部,用户只需通过客户端10进行操作就可以实现对服务器500的监控。
所述监控计算机20通过一个数据库连接与数据库30连接。其中,所述数据库连接可为一开放式数据库连接(Open Database Connectivity,ODBC),或Java数据库连接(Java Database Connectivity,JDBC)。所述数据库30用于存储从数据中心50的各个服务器500传送过来的数据,该数据包括数据中心50中每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。
在此需说明的是,数据库30可独立于监控计算机20,也可位于监控计算机20内。所述数据库30可存于监控计算机20的硬盘或者闪存盘中。从系统安全性的角度考虑,本实施例中的数据库30独立于监控计算机20。
此外,客户端10用于提供一个互动式界面给用户,便于用户进行操作并将操作过程中的各种数据存于监控计算机20中。该客户端10可以是个人计算机、笔记本电脑、手机、平板电脑以及其它任意能与监控计算机20连接的设备。
参阅图2所示,是本发明监控计算机20较佳实施例的结构示意图。该监控计算机20包括虚拟机启动排程系统200。该虚拟机启动排程系统200包括设置模块210、分配模块220、发送模块230、获取模块240、计算模块250及启动模块260。本发明所称的模块是完成一特定功能的计算机程序段,比程序更适合于描述软件在计算机中的执行过程,因此在本发明以下对软件描述中都以模块描述。
所述设置模块210用于在监控计算机20中设置监控程序。所述监控程序用于读取服务器500上Hypervisor软件的每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。
所述分配模块220用于通过监控计算机20中的DHCP服务分配IP地址给数据中心50中的各个服务器500,以和各个服务器500建立通信连接。具体而言,如图1所示,数据中心50有四个服务器500,通过DHCP服务给每个服务器500单独分配一个IP地址。
所述发送模块230用于将监控程序发送到服务器500中,在接收到监控程序的服务器500中运行该监控程序。
所述获取模块240用于通过所述监控程序获取每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。
所述计算模块250用于根据所获取的每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息计算每个虚拟机启动的时间间隔。所述计算方式为:
首先,计算出服务器500上每个虚拟机的资源使用量系数VMusage;
其次,计算服务器500上所有虚拟机的资源使用量系数VMgroup;
其中,VMusage=(Wk-0.1*VMn)*(f(VMcpu)+g(VMmemory)),f(VMcpu)=Wc*VMcpu,g(VMmemory)=Wm*VMmemory;
VMcpu为虚拟机使用CPU的核心数量,VMmemory为虚拟机使用内存的容量,VMn为虚拟机的排序数值,VMn数值越大,虚拟机的个数就越多,Wk、Wc、及Wm为常数,Wk-0.1*VMn的值大于零;
所有虚拟机的资源使用量系数VMgroup为各个虚拟机的资源使用量系数VMusage之和,即VMgroup=∑VMusage;
接下来,计算服务器500的资源使用量系数HOSTgroup;
其中,HOSTgroup=Wk*(f(HOSTcpu)+g(HOSTmemory))+h(HOSTio);
f(HOSTcpu)=Wc*HOSTcpu;
g(HOSTmemory)=Wm*HOSTmemory;
h(HOSTio)=Wi*HOSTdisk/HOSTio;
HOSTcpu为服务器500的CPU的核心数量,HOSTmemory为服务器500的内存的容量,HOSTdisk为服务器500的存储器的容量,HOSTio为服务器500的存储器的接口存取速度,Wk、Wc、Wm及Wi为常数;
最后,时间间隔Tgroup等于服务器500的资源使用量系数HOSTgroup除以所有虚拟机的资源使用量系数VMgroup;
即Tgroup=HOSTgroup/VMgroup;
需要说明的是,上述计算公式中,只是取每个参数的数值进行计算,并不考虑每个参数的单位,而所计算出来的虚拟机的资源使用量系数也没有单位,只是一个数值。
而对于计算出来的Tgroup,其本身只是一个系数,没有单位,此时将该系数赋予时间单位(分钟),该系数Tgroup的值就是虚拟机之间启动的时间间隔。
以下举例说明,
f(VMcpu)=VMcpu*0.38;
g(VMmemory)=VMmemory*0.59;
VMusage=(1.2-0.1*VMn)*(f(VMcpu)+g(VMmemory)));
假设服务器500上有两个虚拟机分别为V1和V2,其中,虚拟机V1中VMcpu的值为2,VMmemory的值为2,VMn的值为1,则虚拟机V1的资源使用量系数为1.94。
虚拟机V2中VMcpu的值为4,VMmemory的值为4,VMn的值为2,则虚拟机V2的资源使用量系数为3.49。
而该服务器500的所有虚拟机的资源使用量系数为5.432。
f(HOSTcpu)=HOSTcpu*0.38;
g(HOSTmemory)=HOSTmemory*0.59;
h(HOSTio)=0.068*HOSTdisk/HOSTio;
服务器500的HOSTcpu的值为8,HOSTmemory的值为16,服务器500的存储器容量HOSTdisk为2TB=2000*1024M,HOSTio的值为80mb/秒=80*60mb/分钟;
f(HOSTcpu)=8*0.38;g(HOSTmemory)=16*0.59;
h(HOSTio)=0.068*2000*1024/(80*60);
HOSTgroup=1.2*(f(hostcpu)+g(hostmem))+h(hostio)=43.989;
Tgroup=HOSTgroup/VMgroup=8.018。
则虚拟机V1与虚拟机V2之间启动的时间间隔为8.018分钟。
所述启动模块260用于根据计算出的时间间隔依次启动虚拟机。具体而言,假设服务器A上包括两个虚拟机,所计算出来的时间间隔为8.018分钟,则启动模块260首先启动虚拟机V1,8.018分钟之后启动虚拟机V2。
如图3所示,是本发明虚拟机启动排程方法较佳实施例的流程图。
步骤S10,设置模块210在监控计算机20中设置监控程序。所述监控程序用于读取服务器500上Hypervisor软件的每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。
步骤S20,分配模块220通过监控计算机20中的DHCP服务分配IP地址给数据中心50中的各个服务器500,以和各个服务器500建立通信连接。具体而言,如图1所示,数据中心50有四个服务器500,通过DHCP服务给每个服务器500单独分配一个IP地址。
步骤S30,发送模块230将监控程序发送到服务器500中,在接收到监控程序的服务器500中运行该监控程序。
步骤S40,获取模块240用于通过所述监控程序获取每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息。
步骤S50,计算模块250根据所获取的每个服务器500的配置信息及该服务器500分配给虚拟机的资源信息计算每个虚拟机启动的时间间隔。所述计算方式为:
首先,计算出服务器500上每个虚拟机的资源使用量系数VMusage;
其次,计算服务器500上所有虚拟机的资源使用量系数VMgroup;
其中,VMusage=(Wk-0.1*VMn)*(f(VMcpu)+g(VMmemory)),f(VMcpu)=Wc*VMcpu,g(VMmemory)=Wm*VMmemory;
VMcpu为虚拟机使用CPU的核心数量,VMmemory为虚拟机使用内存的容量,VMn为虚拟机的排序数值,VMn数值越大,虚拟机的个数就越多,Wk、Wc、及Wm为常数,Wk-0.1*VMn的值大于零;
所有虚拟机的资源使用量系数VMgroup为各个虚拟机的资源使用量系数VMusage之和,即VMgroup=∑VMusage;
接下来,计算服务器500的资源使用量系数HOSTgroup
其中,HOSTgroup=Wk*(f(HOSTcpu)+g(HOSTmemory))+h(HOSTio);
f(HOSTcpu)=Wc*HOSTcpu;
g(HOSTmemory)=Wm*HOSTmemory;
h(HOSTio)=Wi*HOSTdisk/HOSTio;
HOSTcpu为服务器500的CPU的核心数量,HOSTmemory为服务器500的内存的容量,HOSTdisk为服务器500的存储器的容量,HOSTio为服务器500的存储器的接口存取速度,Wk、Wc、Wm及Wi为常数;
最后,时间间隔Tgroup等于服务器500的资源使用量系数HOSTgroup除以所有虚拟机的资源使用量系数VMgroup;
即Tgroup=HOSTgroup/VMgroup;
需要说明的是,上述计算公式中,只是取每个参数的数值进行计算,并不考虑每个参数的单位,而所计算出来的虚拟机的资源使用量系数也没有单位,只是一个数值。
而对于计算出来的Tgroup,其本身只是一个系数,没有单位,此时将该系数赋予时间单位(分钟),该系数Tgroup的值就是虚拟机之间启动的时间间隔。
以下举例说明,
f(VMcpu)=VMcpu*0.38;
g(VMmemory)=VMmemory*0.59;
VMusage=(1.2-0.1*VMn)*(f(VMcpu)+g(VMmemory)));
假设服务器500上有两个虚拟机分别为V1和V2,其中,虚拟机V1中VMcpu的值为2,VMmemory的值为2,VMn的值为1,则虚拟机V1的资源使用量系数为1.94。
虚拟机V2中VMcpu的值为4,VMmemory的值为4,VMn的值为2,则虚拟机V2的资源使用量系数为3.49。
而该服务器500的所有虚拟机的资源使用量系数为5.432。
f(HOSTcpu)=HOSTcpu*0.38;
g(HOSTmemory)=HOSTmemory*0.59;
h(HOSTio)=0.068*HOSTdisk/HOSTio;
服务器500的HOSTcpu的值为8,HOSTmemory的值为16,服务器500的存储器容量HOSTdisk为2TB=2000*1024M,HOSTio的值为80mb/秒=80*60mb/分钟;
f(HOSTcpu)=8*0.38;g(HOSTmemory)=16*0.59;
h(HOSTio)=0.068*2000*1024/(80*60);
HOSTgroup=1.2*(f(hostcpu)+g(hostmem))+h(hostio)=43.989;
Tgroup=HOSTgroup/VMgroup=8.018。
则虚拟机V1与虚拟机V2之间启动的时间间隔为8.018分钟。
步骤S60,所述启动模块260根据计算出的时间间隔依次启动虚拟机。具体而言,假设服务器A上包括两个虚拟机,所计算出来的时间间隔为8.018分钟,则启动模块260首先启动虚拟机V1,8.018分钟之后启动虚拟机V2。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照以上较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。