收起左侧

飞牛虚拟机的网络限速

0
回复
102
查看
[ 复制链接 ]

1

主题

1

回帖

0

牛值

江湖小虾

目前飞牛官方并没有开发虚拟机的网络限速功能,但可以利用 OVS 原生 QoS 功能实现网络限速。(要求 OVS≥2.5 且支持 HTB )

# 查找虚拟机对应的 OVS 端口(如tap53eeb988-c7)
ovs-vsctl show

输出示例,可以看到虚拟机的接口是 vnet2,属于网桥 enp3s0-ovs,OVS 版本为 3.1.0

root@**Marker:~# ovs-vsctl show

19d20c10-43b1-4509-82d6-bcc1bf2cd08e

Bridge enp3s0-ovs

    Port enp3s0

        Interface enp3s0

    Port enp3s0-ovs

        Interface enp3s0-ovs

            type: internal

    Port vnet2

        Interface vnet2

ovs\_version: "3.1.0"

创建 QoS 策略并绑定到虚拟机端口

# 创建QoS策略(最大速率35Mbps)并关联队列
# 虚拟机的下载速度限制(对于 vnet2 端口来说是发送)
ovs-vsctl -- set port vnet2 qos=@newqos \
-- --id=@newqos create qos type=linux-htb other-config:max-rate=35000000 \
-- --id=@q0 create queue other-config:max-rate=35000000

# 虚拟机的上传速度限制(对于 vnet2 端口来说是接收)
ovs-vsctl set interface vnet2 ingress_policing_rate=35000 \
                      ingress_policing_burst=3500
  • OVS配置默认自动保存至数据库,重启后无需重新配置
  • 关键参数说明
    • type=linux-htb:使用分层令牌桶算法实现精确限速
    • max-rate=35000000:对应 35Mbps(单位:bit/s)
    • queue:每个队列对应一个限速规则,
    • other-config:max-rate需与 QoS 的 max-rate一致
    • ingress_policing_rate:下载限速35Mbps(单位Kbps)(注意两边单位是不一样的)
    • ingress_policing_burst:突发值=限速的10%

(可选)允许虚拟机短时突发下载流量

添加 burst参数:

ovs-vsctl set qos <QoS_UUID> other-config:burst=3500000  # 突发值=限速的10%(这里设置为 3.5Mbps)

验证配置生效

# 查看端口QoS绑定状态
ovs-vsctl list port vnet2 | grep qos

# 查看QoS策略详细信息
ovs-vsctl list qos

# 查看队列参数
ovs-vsctl list queue

# 查看端口统计(含突发包计数)
ovs-appctl dpctl/show -s

# 查看ingress限速统计(Kbps单位)
ovs-vsctl list interface vnet2 | grep policing

预期输出:qos 字段应显示 UUID,且 other_config:max-rate 值为 35000000

(回滚)恢复默认状态

# 消除 vnet2 端口的下载速度限制
ovs-vsctl clear port vnet2 qos
ovs-vsctl destroy qos <QoS_UUID>

# 消除上传速度限制
ovs-vsctl set interface vnet2 ingress_policing_rate=0 \
                      ingress_policing_burst=0
收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则