本發(fā)明涉及一種基于Openstack的neutron實現(xiàn)網(wǎng)絡QOS的方法,屬于網(wǎng)絡技術領域。
背景技術:
Neutron分別提供了二層(L2)vSwitch交換和三層(L3)Router路由抽象的功能,對應于物理網(wǎng)絡環(huán)境中的交換機和路由器實現(xiàn)。具體實現(xiàn)了如下功能:
Router:為租戶提供路由、NAT等服務。
Network:對應于一個真實物理網(wǎng)絡中的二層局域網(wǎng)(VLAN),從租戶的的角度而言,是租戶私有的。
Subnet:為網(wǎng)絡中的三層概念,指定一段IPV4或IPV6地址并描述其相關的配置信息。它附加在一個二層Network上,指明屬于這個network的虛擬機可使用的IP地址范圍。
Neutron提供了一種插件式擴展機制,擴展網(wǎng)絡虛擬化的功能。目前已支持防火墻、VPN、安全組、路由器、交換機等網(wǎng)絡功能的虛擬化。但在提供網(wǎng)絡服務質量上,需要擴展新的功能。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于Openstack的neutron實現(xiàn)網(wǎng)絡QOS的方法,以便更好地實現(xiàn)網(wǎng)絡QOS方法,改善使用效果,方便使用。
為了實現(xiàn)上述目的,本發(fā)明的技術方案如下。
一種基于Openstack的neutron實現(xiàn)網(wǎng)絡QOS的方法,主要步驟包括:提供neutron客戶端SDK與命令行工具,支持網(wǎng)絡QOS規(guī)則的管理與維護;提供neutron服務端QOS插件,對QOS規(guī)則進行存儲與下發(fā);提供neutron的QOS代理實現(xiàn)QOS規(guī)則的設置,該發(fā)明可以針對虛擬機網(wǎng)絡的接口流量進行QOS控制,也可以對虛擬的負載均衡、防火墻、路由器的接口進行QOS控制。
在虛擬的網(wǎng)絡中,允許根據(jù)業(yè)務情況,為指定的網(wǎng)絡通信提供更好的服務能力。在Neutron現(xiàn)有的功能中,并不能對虛擬網(wǎng)絡進行QOS控制,在Neutron的框架下擴展對虛擬網(wǎng)絡進行QOS控制,包括二層控制、三層控制。
Neutron主要支持的網(wǎng)絡模式有扁平、vlan、gre模式,三種網(wǎng)絡架構中,虛擬機的虛擬網(wǎng)卡通過linux橋接入到了openvswitch的br-int的橋上,路由器、防火墻、負載均衡器的虛擬接口直接接在了openvswitch的br-int橋上,通過在br-int橋上在虛擬接口相對應端口的QOS隊列與規(guī)則,即可以實現(xiàn)網(wǎng)絡的QOS控制;實現(xiàn)對虛擬二層端口流量進行精細的控制,滿足各種業(yè)務的網(wǎng)絡要求。
利用virsh命令的attach-interface指令只能現(xiàn)在虛擬機的網(wǎng)絡流量,對于虛擬網(wǎng)絡設備的流量不能進行控制。
該發(fā)明的有益效果在于:該發(fā)明能實現(xiàn)對虛擬二層端口流量進行精細的控制,滿足各種業(yè)務的網(wǎng)絡要求。利用virsh命令的attach-interface指令只能現(xiàn)在虛擬機的網(wǎng)絡流量,對于虛擬網(wǎng)絡設備的流量不能進行控制。
具體實施方式
下面結合實施例對本發(fā)明的具體實施方式進行描述,以便更好的理解本發(fā)明。
實施例
Neutron服務端擴展QOS的插件:
①擴展的Rest接口定義,增加QOS_RULE的資源定義:REST接口有post,put,get,delete四種方法,post為創(chuàng)建資源,put為修改某個資源,get為獲取某個資源,delete為刪除某個資源
②定義擴展的描述:擴展的描述從extensions.ExtensionDescriptor繼承。需要實現(xiàn)get_name、get_description、get_namespace、get_updated、get_resources、get_plugin_interface、update_attributes_map、get_extended_resources共8個接口。
③實現(xiàn)插件接口的定義:
插件的接口QOSPluginBase必須從ServicePluginBase繼承,get_plugin_name,get_plugin_type,get_plugin_description必須實現(xiàn),為插件的基礎信息。
必須為每個資源定義5個接口,分別為:
#list資源的接口
def get_qos_rules(self,context,filters=None,fields=None)
#顯示單個資源的接口
def get_qos_rule(self,context,id,fields=None):
#create單個資源的接口
def create_qos_rule(self,context,data):
#update單個資源的接口
def update_qos_rule(self,context,id,data):
#delete單個資源的接口
def delete_qos_rule(self,context,id):
④定義QOS規(guī)則的數(shù)據(jù)庫模型。
從model_base.BASEV2,models_v2.HasId,models_v2.HasTenant繼承,QOS規(guī)則屬性包括:網(wǎng)絡ID,端口ID,最大流量值,最大突發(fā)流量值。
⑤實現(xiàn)QOS規(guī)則的數(shù)據(jù)庫操作。
需要多重繼承插件接口類QOSPluginBase、base_db.CommonDbMixin;
#查詢qos_rules表獲取所有的qos規(guī)則
def get_qos_rules(self,context,filters=None,fields=None)
#查詢qos_rules,獲取id值匹配的qos規(guī)則
def get_qos_rule(self,context,id,fields=None):
#保存qos規(guī)則到qos_rules表
def create_qos_rule(self,context,data):
#修改qos_rules表中的qos規(guī)則
def update_qos_rule(self,context,id,data):
#從qos_ruls表中刪除指定id的qos規(guī)則
def delete_qos_rule(self,context,id):
⑥插件調度類的實現(xiàn)
QOS-Agent可以在不同的計算節(jié)點,網(wǎng)絡節(jié)點上運行,插件調度類找到對應的QOS-Agent;根據(jù)Agent的主機名,獲取需要的QOS規(guī)則信息。
調度類從agentschedulers_db.AgentSchedulerDbMixin繼承
⑦發(fā)送給Agent的RPC封裝實現(xiàn)
當服務端創(chuàng)建、刪除、修改QOS規(guī)則時,需要將信息通過RPC方式發(fā)送到Qos-Agent。
⑧處理QOS-Agent消息封裝實現(xiàn):通過plugin的數(shù)據(jù)庫接口根據(jù)qos-agent的主機名查詢對應的qos規(guī)則。
增加QOS-Agent:
①實現(xiàn)Agent的管理類,管理QOS驅動器的加載,從periodic_task.PeriodicTasks繼承,周期性上報Agent的狀態(tài);
②實現(xiàn)OVS的QOS驅動,通過配置隊列,端口的QOS選項、流表規(guī)則完成網(wǎng)絡QOS的控制。
Neutron客戶端擴展SDK與命令行:
①SDK封裝:
neutronclient\neutron\v2_0\增加目錄:qos
添加qos的命令定義
neutronclient\neutron\v2_0\qos\qos_rule.py
創(chuàng)建的接口需要從neutronv20.CreateCommand繼承
查詢列表的接口需要從neutronv20.ListCommand繼承
修改的接口需要從neutronv20.UpdateCommand繼承
刪除的接口需要從neutronv20.DeleteCommand繼承
顯示單條的接口需要從neutronv20.ShowCommand繼承;
②命令行實現(xiàn):
以上所述是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。