使用linux下的TC进行服务器流量控制
来源:asp之家 发布时间:2009-09-09 08:39:00
公司一台服务器,网络环境太高,那台服务器和源服务器连接下载,就跑到400M-500M,为了控制一下,所以研究了一下TC.来做流量控制。给他控制到小点,不要让这一台占了所有的网络。TC很是强大啊,很多所谓的硬件路由器,都是基于这个做的。
TC介绍
在linux中,TC有二种控制方法CBQ和HTB.HTB是设计用来替换CBQ的。它是一个层次式的过滤框架。
TC包括三个基本的构成块: 队列规定qdisc(queueing discipline )、类(class)和分类器(Classifiers)
队列(queueing discipline):用来实现控制网络的收发速度。通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 TCP)的前提下来平滑网络流量。需要注意的是,linux对接收队列的控制不够好,所以我们一般只用发送队列,即“控发不控收”。它封装了其他两个主要 TC组件(类和分类器)。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。
最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。
队列规则包括FIFO(先进先出),RED(随机早期探测),SFQ(随机公平队列)和令牌桶(Token Bucket),类基队列(CBQ),CBQ 是一种超级队列,即它能够包含其它队列(甚至其它CBQ)。
class用来表示控制策略。很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了。
filter用来将用户划入到具体的控制策略中(即不同的class中)。比如,现在,我们想对xxa,xxb两个IP实行不同的控制策略(A,B),这时,我们可用filter将xxa划入到控制策略A,将xxb划入到控制策略B,filter划分的标志位可用u32打标功能或IPtables的 set-mark(大多使用iptables来做标记)功能来实现。
目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其中,fwmark分类器允许我们使用 Linux netfilter 代码选择流量,而u32分类器允许我们选择基于 ANY 头的流量 .需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。
数据包->iptables(在通过iptables时,iptables根据不同的ip来设置不同的mark)->TC(class)->TC(queue)
应用
假设eth0位是服务器的外网网络接口。
1)首先在eth0的qdiscA,qdiscA控制通过本机到外网的速度,因此是用来控制服务器流出速度的
#tc qdisc add dev eth1 root handle 1:htb default 1
添加 设置接口 最上层 句柄(做标记用) 标记 默认使用1的class
解释如下:无论是队列,还是class和filter都有ID之类的标志符,一般都有parent(父,上层的),注意ID具有接口本地性,不同的网络接口可以有相同的ID.对于这里因为qdisc在顶部,所以parent无,用‘root’字样来标识,ID用1:来标志
‘default 91′表示当某个ip流不满足任何已设定的filter规则时,将自动归入class 1中。更详细的指令规则说明请参考手册。
2)然后在qdisc下建立两个class,来指定eth0控制通过本机到外网的速度
#tc class add dev eth0 parent 1:0 classid1:30 htb rate 2mbit ceil 4mbit prio 2
注:以上就是我们控制输出服务器的速度,为2M,最大可以到4M
rate: 是一个类保证得到的带宽值。如果有不只一个类,请保证所有子类总和是小于或等于父类。
prio:用来指示借用带宽时的竞争力,prio越小,优先级越高,竞争力越强。
ceil: ceil是一个类最大能得到的带宽值。
3)接着针对不同的应用在各root class下设置不同的类,。示例如下。(如果只有一个类,这个就没有必要了)
#tc class add dev eth0 parent 1:30 classid 1:31 htbrate 0.5mbit ceil 2mbit prio 3
同时为了不使一个会话永占带宽,在节点(即本文的各应用结点)添加随即公平队列sfq.(多IP)
#tc qdisc add dev eth0 parent 1:31 handle 31:sfq perturb 10
4)接着添加过滤器。
#tc filter add dev eth0 parent 1: protocol ipprio 31 handle 31 fw flowid 1:31
4)用iptable打标,也可以使用u32之类
#iptables -t mangle -I FORWARD -i !eth1 -p tcp –sport 80 -s xxx.xxx.xxx.xxx –j MARK –set-mark 31


猜你喜欢
- 10月27日消息,巨人网络(NYSE:GA)今日确认,该公司“赢在巨人”计划的新仙侠网游巨作《仙途》将于10月30日开启不删档测试。这意味着
- 同一片蓝天下飘过同一朵云彩同样经历了的风雨同处在网络爆发时代,却有不同的人生有人说性格决定命运,也有人说不同的环境造就不同的人为什么自己还是
- 前一段时间XP系统自动打了KB942830和KB942831补丁,后来发现IIS突然就不能启动了,老是处于“停止”状态,而且手动
- 1 概述企业知名度增加,网站访问量逐渐上升,是每一个网管所盼望的。但同时应用服务器的数据流量和访问量将成倍增加,服务器将不堪重负。这时,可采
- 2010年的春节一开始,《魔兽世界》的网友们就迎来了好消息:新闻出版总署在2月12日审批通过了网易《魔兽世界:燃烧的远征》。至此,《魔兽世
- Foxmail Server(FMS)是一款功能强大的邮件服务器软件,他提供了多种邮件服务,包括SMTP、POP3、LDAP等,并内建邮件扩
- 从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本
- 核心提示:网站的存在就已经不是一个个人行为了,因为你面向的是一个广泛的群体,而非只是针对性的自己一个人,因此,网站的运营过程中,就必经有人加
- 一条逐渐被证明成熟、可靠的通信行业商业规律正浮现在大家的眼前:第一,给你的手机起个叫“×Phone&
- 序言偶尔你们会有机会了解一件事情的来龙去脉和其中的内幕,今天你就很幸运,因为我将带你领略当今最热门,同时也可能是你已经熟悉了的技术:万维网。
- 现在互联网上出现越来越多的小说类网站,如何推广这样的网站是摆在小说类站长面前不得不解决的问题,我这里不说网上那些谁也知道的方法,说一下我自己
- 我们都知道关键词分析在算法中起着承上启下的作用。百度在还没调整算法之前所用的关键词分析是最大匹配法:正向匹配法,逆向匹配法和双向匹配法。比如
- 整理了一些Godaddy主机的Apache转到Tomcat的文档扩展名。因Apache处理的文档受.htaccess 设置的影响,而转到及由
- DNS(Domain Name System)即域名系统是历史悠久的方法,它可以为具有IP地址的计算机分配域名,使计算机拥有字符型名称,如如
- ldd 查看程序依赖库ldd作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。示例:查看test程序运
- CloudStack 环境重新部署: &nbs
- 方法一 将新模板覆盖templets下的文件最简单的更换模板的方法是直接覆盖templets目录下的所有文件但是这样会导致原先的模板被覆盖。
- 本文为大家分享了VMware Tools安装配置图文教程,供大家参考,具体内容如下因为在虚拟机下安装Ubuntu16.04 64位时无法进入
- 掌握软文推广方法是一个网络推广人员必备的技能之一,应该说软文推广时贯穿整个网络推广工作的,无论哪种推广方式都离不开软文。在硬广告不再强势的这
- 从三个方面来讲关键字如何在网站的内部来做优化!第一:网站的titletitle中关键字所占的权重是相当主要的,写好一个合理的title对优化