前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Linux服务器流量及并发控制

关于Linux服务器流量及并发控制

作者头像
星哥玩云
发布2022-07-04 13:52:29
1.9K0
发布2022-07-04 13:52:29
举报
文章被收录于专栏:开源部署

本篇主要讲述了利用tc工具对 Linux 进行高级流量控制.TC流量控制工具 , 从 Linux2.2 版开始已并入内核而且功能非常强大。如果你需要搭建高性能的 Linux 网关 , 本文将会使你受益颇多。

一、Linux 流量控制过程分二种:

1、队列控制 即 QOS, 瓶颈处的发送队列的规则控制,常见的有 SFQ PRIO

2、流量控制 即带宽控制 , 队列的排队整形, 一般为 TBF HTB

二、Linux 流量控制算法分二种:

1、无类算法 用于树叶级无分支的队列,例如:SFQ

2、分类算法 用于多分支的队列,例如:PRIO TBF HTB

三、具体实现:

 1. 在网卡上建立 以SFQ算法的限流

#tc qdisc add dev eth0 root handle 1: sfq

 SFQ 参数有 perturb( 重新调整算法间隔 ) quantum  基本上不需要手工调整 :

 handle 1: 规定算法编号 .. 可以不用设置由系统指定 ..

#tc qdisc sh dev eth0 显示算法

#tc qd del dev eth0 root 删除  注 : 默认 eht0 支持 TOS 2. 在网卡建立以 TBF算法的限流 #tc qd add dev eth1 root handle 1: tbf rate 256kbit burst 10000 latency 50ms  速率 256kbit  突发传输 10k  最大延迟 50ms #tc -s qd sh dev eth1 统计 #tc qd del dev eth1 root 删除 3. 在网卡建立 PRIO  #tc qdisc add dev eth0 root handle 1: prio   # 此命令立即创建了类 : 1:1, 1:2, 1:3 ( 缺省三个子类 )   #tc qdisc add dev eth0 parent 1:1 handle 10: sfq   #tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000     注 : 此为 TBF 限速的另一写法 , 前文有讲解 .   #tc qdisc add dev eth0 parent 1:3 handle 30: sfq 4. WEB 服务器的流量控制为 5Mbps,SMTP 流量控制在 3Mbps 上 . 而且二者一共不得超过 6Mbps, 互相之间允许借用带宽  #tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8   #tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate 6Mbit weight      0.6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded     这部分按惯例设置了根为 1:0, 并且绑定了类 1:1. 也就是说整个带宽不能超过 6Mbps.   #tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate 5Mbit weight     0.5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000   #tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit rate 3Mbit weight     0.3Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000     建立了 2 个类 . 注意我们如何根据带宽来调整 weight 参数的 . 两个类都没有配置成"bounded", 但它们都连   接到了类 1:1 上 , 而 1:1 设置了"bounded". 所以两个类的总带宽不会超过 6Mbps. 别忘了 , 同一个 CBQ 下面的子   类的主号码都必须与 CBQ 自己的号码相一致 !   #tc qdisc add dev eth0 parent 1:3 handle 30: sfq   #tc qdisc add dev eth0 parent 1:4 handle 40: sfq     缺省情况下 , 两个类都有一个 FIFO 队列规定 . 但是我们把它换成 SFQ 队列 , 以保证每个数据流都公平对待 .   #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid     1:3   #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 25 0xffff flowid     1:4 6. 过滤器过滤示例  #tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1     在 10: 节点添加一个过滤规则 , 优先权 1: 凡是去往 22 口 ( 精确匹配 ) 的 IP 数据包 , 发送到频道 10:1..   #tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1     在 10: 节点添加一个过滤规则 , 优先权 1: 凡是来自 80 口 ( 精确匹配 ) 的 IP 数据包 , 发送到频道 10:1..   #tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2     在 eth0 上的 10: 节点添加一个过滤规则 , 它的优先权是 2: 凡是上二句未匹配的 IP 数据包 , 发送到频道 10:2..   #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1     去往 4.3.2.1 的包发送到频道 10:1 其它参数同上例   #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1     来自 1.2.3.4 的包发到频道 10:1   #tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2     凡上二句未匹配的包送往 10:2   #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 match ip sport 80 0xffff flowid 10:1     可连续使用 match, 匹配来自 1.2.3.4 的 80 口的数据包

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档