本发明涉及网络数据处理,具体涉及一种openstack批量创建虚拟机的改进方法、设备和介质。
背景技术:
1、openstack是目前广泛使用的一种开源云平台技术,主要提供计算、网络、存储的虚拟化服务和管理功能。其在计算服务中原生就具备良好的调度算法和丰富的过滤器用以更智能的创建虚拟机,但是在批量创建虚拟机时还是存在以下问题:1、集群整体资源不足时需要经过多次循环调度和预占才能发现资源不足,而发现资源不足时还要再去删除预占,虚拟机数量较大时耗时很长;2、调度程序在控制节点,当批量创建时,只能通过某一个控制节点的调度程序循环,将虚拟机创建任务一个一个分发给计算节点,使得这个控制节点的调度程序成为整个批量创建的瓶颈,无法发挥分布式系统优势;3、调度分配算法单一,无法满足不同业务场景对调度结果的期望;4、各个计算节点资源均衡且批量创建虚拟机数量超过计算节点数量的情况下,某些虚拟机在所选计算节点创建失败时,就不再重新调度,即使其他计算节点资源足以支持这些虚拟机创建也会返回创建失败。
技术实现思路
1、本发明所要解决的技术问题是虚拟机数量较大时耗时很长,调度分配算法单一且浪费资源,目的在于提供一种openstack批量创建虚拟机的改进方法、设备和介质,通过资源试算能够缩短失败的返回时间,增强可用性和用户体验;通过一次性调度减少在调度模块的循环次数,突破创建瓶颈,提高批量创建效率;通过重新调度模块提高批量创建虚拟机的成功率。
2、本发明通过下述技术方案实现:
3、本发明第一方面提供一种openstack批量创建虚拟机的改进方法,包括以下具体步骤:
4、s1、获取请求指令,对创建数量进行试算;
5、s2、查询用户配置的分配算法,按照分配算法计算的每个计算节点的创建数量,通过一次循环向各个计算节点发起异步创建请求;
6、s3、计算节点接收请求,按照创建数量创建各个虚拟机;
7、s4、若存在虚拟机在计算服务中创建失败,进入重新调度模块,如果创建成功,则返回成功;
8、s5、在重新调度模块中重新选择节点并去除失败的节点;
9、s6、获取新的计算节点列表host_lists_new中的首个节点作为选择的计算节点发起创建请求,执行步骤s3。
10、本发明通过资源试算能够缩短失败的返回时间,增强可用性和用户体验;通过分配算法能够使得单个服务器资源利用率更高,通过一次性调度减少在调度模块的循环次数,突破创建瓶颈,提高批量创建效率;通过重新调度模块提高批量创建虚拟机的成功率。
11、进一步的,所述s1具体包括:
12、s11、获取请求数据中虚拟机规格中的cpu数量num_cpu、内存容量size_mem、硬盘容量size_disk和请求数据中的创建数量num;
13、s12、计算集群中计算节点最大创建数量,具体步骤包括:
14、s211、向nova发起请求,获取node1的空闲逻辑资源node1_cpu、node1_mem和node1_disk;
15、s122、根据node1_cpu/num_cpu得出node1在cpu资源的最大创建数num1;
16、s123、根据node1_mem/size_mem得出node1在内存资源的最大创建数num2;
17、s124、根据node1_disk/size_disk得出node1在硬盘资源的最大创建数num3;
18、s125、取num1、num2和num3中的最小值,确定node1的最大创建数num_node1;
19、s126、循环执行步骤s12~s125,得到其他节点的最大创建数num_noden;
20、s127、将num_node1至num_noden所有数相加,得出集群最大创建数num_cluster;
21、s128、比较num和num_cluster,若num>num_cluster,则返回失败;若num≤num_cluster,则继续步骤s2。
22、进一步的,所述用户配置的分配算法包括平衡分配法和集中算法。
23、进一步的,所述按照分配算法计算的每个计算节点的创建数量包括:
24、若查询用户配置的分配算法为平衡分配法,则:
25、s211、获取请求数据中的创建数量num和可用的计算节点数量n;
26、s212、计算num/n得出每个节点平均的创建数量num_avg;
27、s213、num%n得出平均后的余数num_rem;
28、s214、调用原生资源,取出按可用资源从大到小排序的前num_rem个计算节点,组成列表rem_node_list;
29、s215、循环给集群中计算节点分配创建数量。
30、进一步的,所述循环给集群中计算节点分配创建数量具体包括:
31、s2151、判断计算节点是否在列表rem_node_list中:
32、s2152、如果在列表rem_node_list中则该计算节点的创建数量为num_avg+1;
33、s2153、如果不在列表rem_node_list中则该计算节点的创建数量为num_avg;
34、s2154、循环至全部计算节点计算完成。
35、进一步的,所述按照分配算法计算的每个计算节点的创建数量还包括:
36、若查询用户配置的分配算法为集中算法,则:
37、s221、从资源试算模块获取每个计算节点的空闲逻辑资源及最大创建数;
38、s222、向nova发起请求获取每个计算节点的hypervisor id,将按节点组成字典型列表list;
39、s223、对list进行排序,输出排序结果;
40、s224、令j=0,获取请求数据中的创建数量num;
41、s225、计算num与list[j]的最大创建数num_nodej之间的差值diff,如果diff<=0,则list[j]中计算节点nodej应分配的创建数为num,list[j+1]至list[n-1]的计算节点分别应分配的创建数为0,跳至步骤s2;如果diff>0,则list[j]中计算节点nodej应分配的创建数为num_nodej,将diff赋值给num,此时j=j+1,循环执行步骤s225。
42、进一步的,所述对list进行排序具体包括:
43、s2231、令i=0;
44、s2232、比较list[i]的空闲cpu数量与list[i+1]的空闲cpu数量,如果大于则交换二者的位置;如果小于则位置不变,如果等于则执行步骤s2237,完成后继续执行s2233;
45、s2233、比较list[i]的空闲cpu数量与list[i+2]的空闲cpu数量,如果大于则交换二者的位置;如果小于则位置不变,如果等于则进行步骤s2237,完成后继续执行s2234;
46、s2234、如此循环比较list[i]直到list[i+n-1]的空闲cpu数量,如果大于则交换二者的位置;如果小于则位置不变,如果等于则进行步骤s2237,完成后继续执行s2235;
47、s2235、令i=1,执行步骤s2232~s2234;
48、s2236、令i=2,执行步骤s2232~s2234,直到i=n-2;
49、s2237、比较两者的空闲内存资源大小,如果前者大于后者则交换二者的位置,返回原步骤;如果小于则位置不变,返回原步骤,如果等于则进行步骤s2238,完成后返回原步骤;
50、s2238、比较两者的空闲硬盘资源大小,如果前者大于后者则交换二者的位置,返回;如果小于则位置不变,返回;如果等于则进行步骤对列表进行排序,完成后返回;
51、s2239、按照顺序规则比较两者hypervisor id的每一位字符大小,如果前者大于后者则位置不变,返回;否则交换二者位置,返回。
52、进一步的,所述在重新调度模块中重新选择节点并去除失败的节点具体包括:
53、将创建失败的计算节点名称追加写入虚拟机的metadata中;
54、重新选择资源合适的计算节点列表得到host_lists;
55、循环在host_lists中查找虚拟机metadata中的计算节点,将其从host_lists中删除;
56、得到新的计算节点列表host_lists_new,判断其是否为空:
57、如果为空则返回虚拟机创建失败,将虚拟机置为错误状态;
58、如果不为空,执行步骤s6。
59、本发明第二方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现一种openstack批量创建虚拟机的改进方法。
60、本发明第三方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现一种openstack批量创建虚拟机的改进方法。
61、本发明与现有技术相比,具有如下的优点和有益效果:
62、1、资源试算模块可以按照本次批量创建的虚拟机规格试算出目前集群资源允许创建的最大数量,如果不能满足请求创建数量直接返回失败,无需耗费时间进行调度和预占;
63、2、一次性调度模块可以按照节点资源情况和请求创建的数量,计算出每个节点应分配的创建请求数量,一次性将批量请求全部分发给计算节点,减少循环次数,降低瓶颈效应;
64、3、一次性调度模块提供两种可选分配算法——平衡分配法和集中分配法,供用户配置选择,其中平衡分配法尽可能将虚拟机均衡的分配在各个计算节点,使得每个虚拟机都发挥最佳性能,满足追求虚拟机性能的数据中心用户;集中分配法尽可能将虚拟机集中向相同的计算节点分配,使得单个服务器资源利用率更高,满足追求节能的数据中心用户;
65、4、重新调度模块可以在创建虚拟机失败时,重新为这个虚拟机选择合适的计算节点并主动排除已经失败的计算节点,使其可以增加成功创建在其他资源足够的计算节点上的机会。本专利的有益效果是通过资源试算能够缩短失败的返回时间,增强可用性和用户体验;通过一次性调度减少在调度模块的循环次数,突破创建瓶颈,提高批量创建效率;通过重新调度模块提高批量创建虚拟机的成功率。