OpenStack L3网络QOS的实现思路

在L版的ReleaseNotes里面我们看到Neutron已经支持了 ML2-QOS 特性, 这个特性可以让我们针对L2-Port和L2-Net做流量QOS设置, 这是一个非常实用的特性,在之前的版本中,对于虚机网络流量QOS,我们只能通过Flavor来去设置QOS, Flavor-QOS不是很灵活,这会让我去维护很多个Flavor来保证不同的QOS需求。

但是ML2-QOS只能做二层网络的流量限制,对于floating-IP级别的并不能生效,而且ML2-QOS依托于OpenVswitch本身的特性, 且OpenVswitch的QOS只能设置单向流量(虚机上行流量)。

我们还是需要一个L3-QOS,来实现针对floating-IP和router设置QOS,且能够设置上行和下行流量。

TC是基础

在Linux系统上,无论去使用怎样的工具,本质上都要使用TC来做流量控制。 如上面所说,针对floating-IP和router的QOS设置,我们必须让TC规则作用在对应的Net-namespace上:

图片描述

使用HTB来控制虚机的上行流量,使用Ingress来控制虚机的下行流量:

图片描述

此处需要注意的是,TC的版本不能太低,否则TC不能支持在namespace下设置规则,如果你是ubuntu系统, 建议至少使用这个版本IProute2_4.1.1-1ubuntu1_amd64。
实现原理请参考这个脚本:

\#!/bin/bash
\#
\#  kb or k: Kilobytes
\#  mb or m: Megabytes
\#  mbit: Megabits
\#  kbit: Kilobits
\#  To get the byte figure from bits, divide the number by 8 bit
\#
\#  ex: tc_htb.sh restart qg-f5f0ed64-84 qrouter-d5b5b595-9ae2-49e9-8fd9-6ddbf6195702
#
TC=/sbin/tc
if [ -n "$3" ]; then
    TC="/sbin/tc -n $3" #tc utility, IProute2-ss150706
fi
IF=$2           # Interface
UPLD=1mbit          # VM UPLOAD Limit
DEF_UPLD=2mbit          # VM UPLOAD Limit
DNLD=10mbit          # VM DOWNLOAD Limit
DEF_DNLD=20mbit          # VM DOWNLOAD Limit
IP=192.168.252.168  # VM IP
GW_IP=192.168.252.141  # Router GW IP
HTB_U32="$TC filter add dev $IF protocol all parent 1: prio 1 u32"
INGRESS_U32="$TC filter add dev $IF protocol all parent ffff:"

start() {
    # UPLOAD TRAFFIC
    $TC qdisc add dev $IF root handle 1: htb default 1000
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值