linux设置sfq队列参数,Linux系统运维之Linux高级流量控制工具TC使用方法
Linux系统运维之Linux高级流量控制工具TC使用方法
本文标签: 运维 流量劫持
Linux系统运维之Linux高级流量控制工具TC使用方法,
在做MHA测试的时候,有一个重要的环节就是测试MHA Manager节点和Master节点的网络情况,如果产生了抖动,那么MHA本身提供了一个参数secondary_check来保证,但是如果你的部署环境中是一主一从的话,这个参数就不会起作用了,因为latest slave和oldest slave是同一个库,简单来说,连不上就是连不上了,至于切还是不切,这个还不好说。我们测试的场景下,有时候切,有时候不切。所以我们原本测试的MHA0.57版本就降级为了0.56,仔细测试发现,其实也存在这样的问题,综合再三,我们就把secondary_check给取消了,直接在MHA的代码里调整了超时次数的配置(默认是4次)。
接下来的问题来了,如果做更深入的测试,我们势必需要完整的模拟网络的抖动情况,这个时候传统的service network stop ; sleep xxx; service network start的方式就会受限了。潜在的一个原因就是重启服务以后,VIP就没有了。
但是基本能够模拟出MHA的场景,保证在指定的时间范围内出现抖动而不会误切。
所以经过全方位的测试,我们心里有底了,那些方面该怎么调整,那些细节需要继续深究,都有了一些心得和体会。
但是网络的测试其实感觉还是不够彻底,毕竟真实的网络抖动不会网卡不可用,而是网络超时,丢包等等。
所以如果能够尽可能模拟出网络问题,配合MHA来联调测试,就能够基本模拟出真实的问题场景了。所以tc这个方案就进入了我的视线。
Linux的网络流控,控发不控收 , 所以只能对产生瓶颈网卡处的发包速率进行控制 , 流量控制过程分二种
1. 队列控制 即 QOS, 瓶颈处的发送队列的规则控制,常见的有 SFQ PRIO
2. 流量控制 即带宽控制 , 队列的排队整形, 一般为 TBF HTB
Linux 流量控制算法分二种:
1. 无类算法 用于树叶级无分支的队列,例如:SFQ
2. 分类算法 用于多分支的队列,例如:PRIO TBF HTB
而涉及到的流控算法SFQ和TBF都是需要简单了解的。
SFQ(Stochastic Fairness Queueing 随机公平队列 ) 是公平队列算法家族中的一个简单实现 . 它的精确性不如其它的方法 , 但实现了高度的公平 , 需要的计算量亦很少 .
其中SFQ 只会发生在数据发生拥堵 , 产生等待队列的网卡上,出口网卡若无等待队列 ,SFQ 也不起作用 ...
令牌桶过滤器 (TBF) 是一个简单的队列规定 : 只允许以不超过事先设定的速率到来的数据包通过 , 但可能允许短暂突发流量朝过设定值 .
首先简单模拟网络超时100ms
使用如下的命令,网卡的情况具体对待,修改配置即可。
# tc qdisc add dev eth1 root netem delay 100ms
如果在本机ping测试。延时还是很低的。0.0x级别。
[root@oel642 ~]# ping 192.168.253.129
PING 192.168.253.129 (192.168.253.129) 56(84) bytes of data.
64 bytes from 192.168.253.129: icmp_seq=1 ttl=64 time=0.011 ms
64 bytes from 192.168.253.129: icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from 192.168.253.129: icmp_seq=3 ttl=64 time=0.051 ms
而如果设置了超时选项,就会很均匀的产生指定的延时。
[root@oel643 ~]# ping 192.168.253.129
PING 192.168.253.129 (192.168.253.129) 56(84) bytes of data.
64 bytes from 192.168.253.129: icmp_seq=1 ttl=64 time=202 ms
64 bytes from 192.168.253.129: icmp_seq=2 ttl=64 time=101ms
64 bytes from 192.168.253.129: icmp_seq=3 ttl=64 time=101ms
64 bytes from 192.168.253.129: icmp_seq=4 ttl=64 time=101ms
64 bytes from 192.168.253.129: icmp_seq=5 ttl=64 time=100 ms
取消tc的设置,可以使用
tc qdisc del dev eth1 root netem
如下的方式会产生一个范围的延时,比如默认延时100毫秒,上下浮动10毫秒。
[root@oel642 ~]# tc qdisc add dev eth1 root netem delay 100ms 10ms
ping的结果如下:
64 bytes from 192.168.253.129: icmp_seq=278 ttl=64 time=98.3 ms
64 bytes from 192.168.253.129: icmp_seq=279 ttl=64 time=99.1 ms
64 bytes from 192.168.253.129: icmp_seq=280 ttl=64 time=93.4 ms
64 bytes from 192.168.253.129: icmp_seq=281 ttl=64 time=95.5 ms
还有几类网络情况需要考虑,比如丢包。在流量劫持的场景中,丢包率是一个需要重点关注的场景。
我们可以玩得大一些,丢包率10%,那是比较严重的问题了。
[root@oel642 ~]# tc qdisc add dev eth1 root netem loss 10%
ping的结果如下,可以看到小结的部分,丢包率是基本在10%的基本范围内,目前是8%。
64 bytes from 192.168.253.129: icmp_seq=421 ttl=64 time=0.486 ms
64 bytes from 192.168.253.129: icmp_seq=422 ttl=64 time=0.413 ms
64 bytes from 192.168.253.129: icmp_seq=423 ttl=64 time=0.616 ms
^C
--- 192.168.253.129 ping statistics ---
426 packets transmitted, 390 received, 8% packet loss, time 425724ms
rtt min/avg/max/mdev = 0.144/64.257/120.621/49.069 ms
如果数据包有重复的情况下,该如何处理。比如重复包的比例,我们设置为50%。
>tc qdisc add dev eth1 root netem duplicate 50%
使用ping的结果如下:
PING 192.168.253.128 (192.168.253.128) 56(84) bytes of data.
64 bytes from 192.168.253.128: icmp_seq=1 ttl=64 time=0.402 ms
64 bytes from 192.168.253.128: icmp_seq=1 ttl=64 time=0.409 ms (DUP!)
64 bytes from 192.168.253.128: icmp_seq=2 ttl=64 time=0.788 ms
64 bytes from 192.168.253.128: icmp_seq=3 ttl=64 time=0.887 ms
64 bytes from 192.168.253.128: icmp_seq=4 ttl=64 time=0.721 ms
64 bytes from 192.168.253.128: icmp_seq=4 ttl=64 time=0.757 ms (DUP!)
64 bytes from 192.168.253.128: icmp_seq=5 ttl=64 time=1.33 ms
比如产生坏包的情况。
tc qdisc add dev eth1 root netem corrupt 50%
ping的结果如下:
64 bytes from 192.168.253.128: icmp_seq=51 ttl=64 time=0.468 ms
64 bytes from 192.168.253.128: icmp_seq=52 ttl=64 time=0.822 ms
wrong data byte #23 should be 0x17 but was 0x15
#16 10 11 12 13 14 15 16 15 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
#48 30 31 32 33 34 35 36 37
64 bytes from 192.168.253.128: icmp_seq=53 ttl=64 time=1.71 ms
wrong data byte #53 should be 0x35 but was 0x37
#16 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
#48 30 31 32 33 34 37 36 37
64 bytes from 192.168.253.128: icmp_seq=54 ttl=64 time=0.000 ms
64 bytes from 192.168.253.128: icmp_seq=56 ttl=64 time=0.000 ms
如果包是乱序的,我们可以加入随机性,25%的包立即发送,其他的包延时10毫秒,系数为50%
[root@oel641 ~]# tc qdisc change dev eth1 root netem delay 10ms reorder 25% 50%
ping的结果如下所示:
64 bytes from 192.168.253.128: icmp_seq=200 ttl=64 time=1.24 ms
64 bytes from 192.168.253.128: icmp_seq=201 ttl=64 time=0.587 ms
64 bytes from 192.168.253.128: icmp_seq=202 ttl=64 time=1.01 ms
64 bytes from 192.168.253.128: icmp_seq=203 ttl=64 time=0.790 ms
64 bytes from 192.168.253.128: icmp_seq=204 ttl=64 time=0.998 ms
64 bytes from 192.168.253.128: icmp_seq=205 ttl=64 time=0.285 ms
64 bytes from 192.168.253.128: icmp_seq=206 ttl=64 time=0.882 ms
如果更复杂的场景呢,比如我们可以考虑加入流量的限制,网速控制在256k,最大延迟为50ms
[root@oel641 ~]# tc qdisc add dev eth1 root handle 1:0 netem delay 100ms
[root@oel641 ~]# tc qdisc add dev eth1 parent 1:1 handle 10: tbf rate 256kbit burst 10000 latency 50ms
速率 256kbit 突发传输 10k 最大延迟 50ms
如果不做流量控制,默认的情况下,传输可以达到90M美妙。
[root@oel642 ~]# scp 192.168.253.128:~/Percona-Server-5.6.14-rel62.0-483.Linux.x86_64.tar.gz .
Percona-Server-5.6.14-rel62.0-483.Linux.x86_64.tar.gz 100% 93MB 92.9MB/s 00:01
而如果设置了流量控制的场景,就绝对保持在一个指定范围内。
[root@oel642 ~]# scp 192.168.253.128:~/Percona-Server-5.6.14-rel62.0-483.Linux.x86_64.tar.gz .
Percona-Server-5.6.14-rel62.0-483.Linux.x86_64.tar.gz 0% 208KB 16.8KB/s 1:34:05 ETA
当然上面的场景都需要在测试环境先模拟一下,要不出现意料之外的问题就得不偿失了。
本文由清平云盾整理并发布,希望对同学们有所帮助。了解更多详情请关注清平云盾系统运维之Linux!
2020-08-21 22:40:59
linux设置sfq队列参数,Linux系统运维之Linux高级流量控制工具TC使用方法相关推荐
- linux设置sfq队列参数,Linux内核中流量控制(5)
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性, 5.5 SFQ(Stochastic Fairness Queueing discipline ...
- linux cgi c环境配置,Linux下配置nginx支持.cgi | 系统运维
说明: 操作系统:CentOS 6.x web环境:php+nginx+mysql nginx安装目录:/usr/local/nginx nginx配置文件:/usr/local/nginx/conf ...
- linux系统运维 pdf6,Linux系统运维之系统管理.pdf
<Linux 系统运维之系统管理> Linux系统运维之系统管理 Linux系统运维之系统管理 LLiinnuuxx系系统统运运维维之之系系统统管管理理 UNIXHOT 运维社区 UNIX ...
- 计划任务linux时间,系统运维|在 Linux 中怎么使用 cron 计划任务
没有时间运行命令?使用 cron 的计划任务意味着你不用熬夜程序也可以运行. 系统管理员(在许多好处中)的挑战之一是在你该睡觉的时候去运行一些任务.例如,一些任务(包括定期循环运行的任务)需要在没有人 ...
- Windows系统运维转linux系统运维的经历
2019独角兽企业重金招聘Python工程师标准>>> 开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维.最近,在<Linux就该这么学>书籍的影响下和朋友小 ...
- linux windows 运维比较,linux与windows的比较_系统运维_linux操作_linux系统_课课家
用户做比较是一个学习的过程,深入学习的朋友们都喜欢拿Linux与Windows来进行比较,对比一下这个两种系统它们有什么不一样的地方,本文将为大家简单的进行这两种系统的比较,让大家可以简单的进行一个学 ...
- linux 命令查看块设备,系统运维|用 Linux blkid 命令查找块设备详情
今天我们将会向你展示如何使用 lsblk 和 blkid 工具来查找关于块设备的信息,我们使用的是一台安装了 CentOS 7.0 的机器. lsblk lsblk 是一个 Linux 工具,它会显示 ...
- mysql cnf参数_系统运维|MySQL my.cnf参数配置优化详解
本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点, ...
- linux服务器文件偶尔丢失,【服务器运维】linux抛出找不到文件非常的解决方法...
场景: 项目在windows下接见一般,linux下抛非常,找不到文件. 剖析: 假如接见的项目文件是如许的:abc/bcd/aa.jpg ,而体系中接见文件的途径是:abc/Bcd/aa.jpg,二 ...
最新文章
- Window10 VS17下 Opencv3.4.5配置
- 程序员硬核资源:一本贼有趣的设计模式学习pdf
- iOS属性传值传递不过去
- CSP-2019总结
- Java 整数型的进制间的互相转换
- sql2008能否打开mysql数据库_mysql数据库数据能不能导入到sql server中
- 在学Python前学Linux,Python原来这么好学-1.2节: 在Linux中安装python
- C++ 获取类型信息
- JVM体系结构与工作方式
- java网页截图_Java实现的简单网页截屏功能示例
- 如何实现Outlook 2010 下载邮件后自动删除服务器上的邮件
- Django入门-helloworld
- python数字组合算法_python - 简单算法题 - 求三位数组合
- [2018.10.10 T2] 烯烃
- 怎样学好模拟集成电路设计?
- 集成电路和芯片的联系与区别
- 利用Google翻译实现网站国际化——js插件
- 4G物联网模块的通讯原理介绍
- 深度学习之LSTM案例分析(三)
- 描述: 一注完整的双色球彩票号码由5个红色号码,2个蓝色号码组成 共七位数注意: 只要刷新一次页面 让球发生一次变化