本发明涉及云计算技术领域,特别是一种基于虚拟网络实现批量虚拟机端口限速的方法。
背景技术:
云计算的兴起,越来越多的用户开始选择使用云服务器资源,各云平台在提供带有网络接口的云服务器的同时,往往需要对其进行带宽限制,以实现云服务器网络带宽的合理限制,避免出现一台云服务器占用了整个物理网卡实际带宽总量的现象。常见的云服务器网卡带宽限制的方法有:方法一是创建云服务器网络端口时就逐个对该端口进行带宽设置;方法二则是程序固定或者通过新增配置文件配置项的方式固定一个带宽初始值,虚拟机网络端口被创建时默认设置此值。
上述两种方法都可以实现虚拟机网络端口带宽限制,但存在如下问题:
1、方法一无法实现虚拟机网络端口带宽限制的批量设置,当云平台所管理的网络端口非常多时,逐个端口进行设置效率低下;
2、方法二虽然可以批量设置云平台虚拟机网络端口带宽限制,但是不灵活,并且云平台所有的网络端口带宽设置初始值都一样,不能满足一些个性化的业务需求。
技术实现要素:
本发明解决的技术问题在于提出了一种基于虚拟网络实现批量虚拟机端口限速的方法,避免了需要对云平台大量端口逐个进行带宽限制设置的问题。
本发明解决上述技术问题的技术方案是:
所述的方法包括如下步骤:
步骤1:创建一个虚拟网络并同时为其创建一个虚拟子网;
步骤2:定义虚拟网络的带宽特性;
步骤3:在所述虚拟网络上创建端口并分配所述虚拟子网内IP;
步骤4:将端口绑定给虚拟机;
步骤5:根据端口所属虚拟网络的带宽特性进行端口限速;
所述的步骤5具体包括:
判断端口本身是否包括带宽限制特性;
如果有则按端口本身的带宽特性进行限速;
如果没有则继续判断端口所述网络是否有带宽限制特性;
如果有则根据端口所属网络的带宽特性进行限速;
如果没有则不限速。
所述的虚拟网络是一个供虚拟机使用的网络,该网络里面可以动态创建和销毁无限多个虚拟端口;
所述的虚拟子网是虚拟网络里面的一个IP段,该IP段用以为所述虚拟端口分配具体的IP地址;所述的虚拟端口则是虚拟机所使用的网卡接口对应的逻辑表示。
所述的定义虚拟网络的带宽特性是指为虚拟网络对象增加上行带宽和下行带宽的特征值;所述的特征值是带宽的速度最大值。
所述的将端口绑定给虚拟机是指为虚拟机添加网卡,网卡的特征来源于端口。
所述的批量虚拟机端口限速是指一次可以对多个虚拟机网络端口进行带宽定义,而无需逐个限制。
本发明方案的有益效果如下:
1、本发明提供一种基于虚拟网络实现批量虚拟机端口限速的方法,避免了需要对云平台大量端口逐个进行带宽限制设置所引起的效率低下,管理不方便等问题。
2、本发明的方法比较灵活,可以根据不同的业务需求创建不同带宽特性的虚拟网络,实现批量的修改多个端口的带宽限制值,避免了通过程序固定或者通过新增配置文件配置项的方式导致云平台上所有的端口固定一个带宽初始值问题。
附图说明
下面结合附图对本发明进一步说明:
图1为本发明的流程图;
图2为本发明实施例在具体端口限速时的实现流程图。
具体实施方式
请参见图1为本发明实施例所提供的一种基于虚拟网络实现批量虚拟机端口限速的方法流程图,图2位本发明实施例在具体端口限速时的实现流程。下面分别对其各个流程具体实现进行描述。
首先基于云平台创建一个虚拟网络并同时为其创建一个虚拟子网。
虚拟网络和虚拟子网都分别是一个ORM对象,其中虚拟网络对象中包括了最重要的ingress属性和outgress属性,分别代表着该虚拟网络对应端口上的 入口带宽限制值和出口带宽限制值;其中的虚拟子网对象则包括了最重要的network_id属性和cidr属性,分别代码这该虚拟子网所述的虚拟网络和虚拟子网本身的子网段。
另外,我们根据上述虚拟网络和虚拟子网的ORM对象特征,创建一个命名空间并在命名空间中启动一个dnsmasq进程,已提供网络dhcp服务。
然后定义虚拟网络的带宽特性。即为上述虚拟网络ORM对象的ingress属性和outgress属性赋值,具体的可以是:
ingress:10Mbps outgress:10Mbps
则是分别限制了该虚拟网络上所有端口的入口带宽和出口带宽分别为10Mps。
接着在所述虚拟网络上创建批量端口并分配所述虚拟子网内IP。
在虚拟网络上创建虚拟端口,端口ORM对象重要特征属性为id和network_id,id代码虚拟端口本身的ID,network_id则代表该端口所属虚拟网络。另外端口对象本身也具有ingress属性和outgress属性代表其自身带宽限制,且优先级高于所属网络的带宽限制。
接着将所述端口绑定给虚拟机,这里以虚拟机通过linux bridge桥接到ovs桥为例进行说明。
(1)创建虚拟机使用的linux bridge和veth pair。
(2)准备虚拟机使用的libvirt配置文件,必须保证uuid为上述虚拟端口的divice_id;保证<target dev=’tap19e74fc8-aa’/>tap后面的11个字符为虚拟端口id的前11个字符。
(3)将veth peer的两端分别接入到linux bridge和ovs桥br-int上。
最后根据端口所属虚拟网络的带宽特性进行端口限速。
虚拟机所在节点服务通过RPC通信拿到上述虚拟网络和虚拟端口的带宽限制信息ingress和outgress,并按如下流程进行端口限速:
判断虚拟机的虚拟机端口本身是否包括带宽限制属性值;
如果有则按端口本身的带宽属性值进行限速;
如果没有则继续判断端口所述网络是否有带宽限属性值;
如果有则根据端口所属网络的带宽属性值进行限速;
如果没有则不限速。
具体的可以通过如下命令来实现:
1、限制虚拟机端口(qvo4577af09-7b)的下行速度为10Mbps
ovs-vsctl set port qvo4577af09-7b qos=@newqos----id=@newqos create qos type=linux-htb queues=0=@q0----id=@q0 create queue other-config:max-rate=10000000
其中:
qvo4577af09-7b:虚拟机对应的ovs桥(br-int)上的port
min-rate:最小带宽速度,单位bps
max-rate:最大带宽速度,单位bps
2、增加虚拟机上行速度最大为1024Kbps,最大值浮动125kbps
ovs-vsctl set interface qvo4577af09-7b ingress_policing_rate=1024
ovs-vsctl set interface qvo4577af09-7b ingress_policing_burst=125
以上描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出实质性创造所获得的方案, 都属于本发明保护的范围。