本发明涉及虚拟机管理技术领域,特别是一种防御云平台虚拟机启动风暴的方法。
背景技术:
随着云计算行业日益发展,为了让云主机更高效低耗运行,采用镜像快照形式创建虚拟机,但是这个技术带来了批量启动虚拟机的启动风暴问题:
一是客户在上班时间段,都会去启动虚拟机,这时候可能会出现开机黑屏的情况;
二是虚拟机批量同时开启带来网络IO阻塞问题;
三是虚拟机批量同时开启会导致宿主机负载升高,影响宿主机上的虚拟机和业务运行;
四是虚拟机开机失败,影响客户日常业务运行。
为了解决虚拟机启动风暴问题,需要一种防御云平台虚拟机启动风暴的方法,从而解决虚拟机同时开机黑屏和失败等问题。
技术实现要素:
本发明解决的技术问题在于提供一种防御云平台虚拟机启动风暴的方法;解决防御虚拟机同时批量开机出现的启动风暴问题,确保客户环境可以正常使用,满足大批量虚拟机同时启动,增大虚拟机的稳定性。
本发明解决上述技术问题的技术方案是:
所述的方法包括如下步骤:
步骤1:将需要开机的虚拟机加入等待队列中;
步骤2:动态计算出物理机平均cpu负载和网络IO;
步骤3:判断步骤2两组数据值是否达到预设高峰值;
步骤4:满足步骤3的前提下,根据先进先出和优先级算法选择一台虚拟机;
步骤5:执行开机命令,让线程进去等待状态;
步骤6:检测开机是否完成,如果返回失败,则返回步骤2;
步骤7:检测成功后,删除对应虚拟机的开机队列。
所述的动态计算是获取N次数据,分别去掉两组最低和最高数值,然后再计算剩下N-4数据平均值。
所述等待队列是基于分布式同步锁的技术实现线程安全队列;
所述cpu负载是cpu能够并行处理的事务的数量,是cpu个数*cpu核数的值;
所述预设高峰值是根据日常最高负载平均值推算出来该物理机负载高峰值;
所述先进先出和优先级算法是指哪一个虚拟机先入队列就可以先发出的原则,并且每一台虚拟机都是赋予了一个权限,根据权限值和加入队列时间来选择出列的虚拟机;
所述线程等待状态是指云计算平台系统当前线程进入阻塞状态。
本发明通过监控物理机负载和网络IO值来实现虚拟机开机队列等待,根据先进先出及优先级算法来分批筛选虚拟机,实现满足大批量虚拟机同时成功开启,并且不影响宿主机上其他虚拟机和业务的运行。本发明给大型桌面云环境提供了有效的支撑,有效防御了虚拟机启动风暴问题,跟其他云平台系统处理启动风暴问题对比,他们有些是才去定时任务去开机,这样子的话会导致资源的浪费,客户虚拟机不一定都需要每天定时去启动,本发明就可以满足客户随时启动虚拟机都可以防御虚拟机启动风暴问题。本发明解决了虚拟机启动风暴的同时,也可以让宿主机稳定运行虚拟机,时刻监控着负载来处理虚拟机操作,让客户云平台更加节能,高效,稳定运行。
附图说明
下面结合附图对本发明进一步说明:
图1为本发明方法流程图。
具体实施方式
如图1所示,本发明的的基本步骤是:
步骤1:将需要开机的虚拟机加入等待队列中;
步骤2:动态计算出物理机平均cpu负载和网络IO;
步骤3:判断步骤2两组数据值是否达到预设高峰值;
步骤4:满足步骤3的前提下,根据先进先出和优先级算法选择一台虚拟机;
步骤5:执行开机命令,让线程进去等待状态;
步骤6:检测开机是否完成,如果返回失败,则返回步骤2;
步骤7:检测成功后,删除对应虚拟机的开机队列。
并且,动态计算是获取N次数据,分别去掉两组最低和最高数值,然后再计算剩下N-4数据平均值。cpu负载是cpu能够并行处理的事务的数量,是cpu个数*cpu核数的值。根据日常最高负载平均值推算出来该物理机负载高峰值。指哪一个虚拟机先入队列就可以先发出的原则,并且每一台虚拟机都是赋予了一个权限,根据权限值和加入队列时间来选择出列的虚拟机。
相关获取宿主机负载和防御代码如下:
获取宿主机负载代码:
防御代码: