tc流控脚本 ,动态保证每个ip有1M带宽

简介:

tc主脚本:

#!/bin/bash

#

. /root/tc_functions

NUM=2

DEV=eth0

init_tc $NUM

while : ; do

#IP=`netstat  -antup|grep ESTABLISHED |grep  80|cut -d ":" -f8`

IP=`netstat -antup|grep ESTABLISHED|grep 80|awk '{print $5}' |grep  -o  "\([0-9]\{1,3\}\.\)\{1,3\}[0-9]\{1,3\}"|sort  -rn |uniq -c|awk '{print $2}'`

free=0

for  i  in $IP

do

IP16=`ip_to_16 $i`

if  tc -s filter ls dev $DEV | grep $IP16 &>/dev/null ;then

continue;

fi 

for x in `seq $NUM`

do

change $x

if [  $free -eq 1 ];then

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst $i flowid 1:$x ;

free=0;

break 1;

fi

done

done

 tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 0.0.0.0/0 flowid 1:$[$NUM+1] ;

sleep 30

tc filter del dev eth0 parent 1: protocol ip prio 16 u32;

done





tc_functions:


function hd(){

case $1 in

10)

echo a;;

11)

echo b;;

12)

echo c;;

13)

echo d;;

14)

echo e;;

15)

echo f;;

*)

echo $1;;

esac

}

function ip_to_16(){

a=`echo $1|cut -d '.' -f1 `

b=`echo $1|cut -d '.' -f2 `

c=`echo $1|cut -d '.' -f3 `

d=`echo $1|cut -d '.' -f4 `

a1=$[$a/16]

a2=$[$a%16]

b1=$[$b/16]

b2=$[$b%16]

c1=$[$c/16]

c2=$[$c%16]

d1=$[$d/16]

d2=$[$d%16]

q1=`hd $a1` 

q2=`hd $a2`

q3=`hd $b1` 

q4=`hd $b2` 

q5=`hd $c1` 

q6=`hd $c2` 

q7=`hd $d1` 

q8=`hd $d2`

echo $q1$q2$q3$q4$q5$q6$q7$q8 

}

function change(){

        PAST=`tc -s class ls dev $DEV|grep  Sent |cut -d ' ' -f3|head -$1|tail -1`

        sleep 1

        NOW=`tc -s class ls dev $DEV|grep  Sent |cut -d ' ' -f3|head -$1|tail -1`

        [ $NOW  -eq $PAST ]&& free=1

}

function init_tc(){

tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 1: htb r2q 1

local i 

for  i  in `seq $1`

do

tc class add dev eth0 parent 1: classid 1:$i htb rate 1mbit ceil 1mbit

done

tc class add dev eth0 parent 1: classid 1:$[$i+1] htb rate 2mbit ceil 2mbit

}



















本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1766222 ,如需转载请自行联系原作者

相关文章
|
网络协议 芯片
|
3月前
|
弹性计算 监控 负载均衡
slb部署使用路径规则进行更细粒度控制
slb部署使用路径规则进行更细粒度控制
40 7
|
5月前
|
NoSQL 算法 Java
接口限流是一种控制访问频率的技术
在高并发场景下,合理的接口限流、防重复提交及接口防抖机制对保障系统稳定性至关重要。本文介绍了如何利用AOP在不改变业务代码的前提下,灵活添加这些功能。具体包括:通过`@AccessLimit`注解实现接口限流,利用Redis进行计数与控制;通过`@RepeatSubmit`注解防止重复提交,确保数据一致性;通过`@AntiShake`注解实现接口防抖,提升用户体验。此外,提供了基于Redisson和Spring Cloud的实现示例。
74 4
|
7月前
|
弹性计算 负载均衡 网络架构
搞懂链路负载及入口带宽和出口带宽
搞懂链路负载及入口带宽和出口带宽
271 7
|
9月前
|
负载均衡 Kubernetes 网络协议
如何在集群的负载均衡过程保留请求源IP
本文探讨了在Kubernetes (k8s)集群中如何确保服务获取到请求的源IP。通常,源IP可能会因网络地址转换(NAT)和代理服务器而丢失。为保留源IP,文章建议在代理服务器层添加HTTP头`X-REAL-IP`字段。在K8s中,通过设置`externalTrafficPolicy: Local`可保留源IP,但这会牺牲负载均衡。使用Ingress时,可通过配置Ingress Controller的`use-forwarded-headers`并调整ConfigMap来同时保留源IP和实现负载均衡。文章适用于对网络和K8s感兴趣的读者。
201 3
流量过滤与转发路径控制
流量过滤与转发路径控制
如何避免错误配置的应用接收用户流量?
如何避免错误配置的应用接收用户流量?
|
虚拟化
问题解决:网络自动失败 您的网络可能并未使用dhcp协议
问题解决:网络自动失败 您的网络可能并未使用dhcp协议
368 0
问题解决:网络自动失败 您的网络可能并未使用dhcp协议
|
网络协议 网络架构
什么是DHCP(接口模式+全局模式)
什么是DHCP(接口模式+全局模式)
1000 0
什么是DHCP(接口模式+全局模式)
|
网络协议 物联网
DFP 数据转发协议应用实例 4.修改网络中指定设备的参数
稳控科技编写的一套数据转发规则, 取自“自由转发协议 FFP(Free Forward Protocol)” ,或者 DFP(DoubleF Protocol), DF 也可以理解为 Datas Forward(数据转发)的缩写。DF 协议是与硬件接口无关的数据链路层协议,规定了数据流如何在不同设备之间、不同接口之间的传输方向。 DF 协议一般用于延长数字接口的传输距离(数据中继),它与硬件接口类型无关,可以基于 UART、 LoRA、TCP 等异步数据传输介质。
DFP 数据转发协议应用实例  4.修改网络中指定设备的参数