公司用的是实体服务器,租用机房带宽,买了30M的带宽,然而经常有带宽超额的问题,每个月都要额外交几千块,因此打算限制带宽。
在交换机上限制带宽是一种方法,但是这个挺麻烦的。另外,也可以通过软件限制带宽,在对外提供服务的服务器上限制带宽。
这里介绍的控制带宽资源的方式是在每一个接口上限制带宽。wondershaper 就是干这个的,github上的版本是基于原开发者代码的基础上做的二次开发,添加了些功能。
wondershaper 实际上是一个 shell 脚本,它使用 tc 来定义流量调整命令,使用 QoS 来处理特定的网络接口。外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的;而传入流量通过丢包的方式来达到速率限制的目的。
其实, wondershaper 的既定目标不仅仅是对一个接口增加其带宽上限;当批量下载或上传正在进行时,wondershaper 还试图去保持互动性会话如 SSH 的低延迟。同样的,它还会控制批量上传(例如 Dropbox 的同步)不会使得下载“窒息”,反之亦然。即 上传和下载 互不影响。
在 Fdora 或 CentOS/RHEL (带有 EPEL 软件仓库) 中安装 wondershaper(版本到 1.2 ):
# yum install wondershaper
经二次开发的最新版本( 最新为 1.4 ),直接下载github上的代码就可以了:
# git clone https://github.com/magnific0/wondershaper.git
# cd wondershaper
使用帮助:
# ./wondershaper -h
USAGE: ./wondershaper [-hcs] [-a ] [-d ] [-u ]
Limit the bandwidth of an adapter
OPTIONS:
-h Show this message
-a Set the adpter
-d Set maximum download rate (in Kbps) and/or
-u Set maximum upload rate (in Kbps)
-p Use presets in /etc/conf.d/wondershaper.conf
-c Clear the limits from adapter
-s Show the current status of adapter
-v Show the current version
MODES:
wondershaper -a -d -u
wondershaper -c -a
wondershaper -s -a
EXAMPLES:
wondershaper -a eth0 -d 1024 -u 512
wondershaper -a eth0 -u 512
wondershaper -c -a eth0
参数说明:
使用 ip addr show
查看要限制带宽的网卡名称,老的机器可能没有这个命令,改用 ifconfig
查看。
例子:
将 eth0 的最大下载/上传带宽分别设定为 3072 kbps 和 2048 kbps
# ./wondershaper -a eth0 -d 3072 -u 2048
清空规则,不再限制带宽
# ./wondershaper -a eth0 -c
这里的规则,重启服务器后就会失效,可以把命令写进 /etc/rc.local
,开机自启动。
利用 speedtest-cli 来测试网速。
speedtest-cli 是一个用 Python 编写的轻量级的命令行工具,用于测试带宽。Python2.4+ 的环境下均可运行。它是基于 speedtest.net
的基础架构来测量网络的上/下行速率。
pip/easy_install 方式安装:
# pip install speedtest-cli
或
# easy_install speedtest-cli
Github 方式安装:
# pip install git+https://github.com/sivel/speedtest-cli.git
或
# git clone https://github.com/sivel/speedtest-cli.git
# python speedtest-cli/setup.py install
直接下载脚本:
# wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
# chmod +x speedtest-cli
或
# curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
# chmod +x speedtest-cli
使用speedtest-cli命令也很简单,它不需要任何参数即可工作。
# speedtest-cli
Retrieving speedtest.net configuration...
Testing from China Telecom Guangdong (183.xxx.xxx.215)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by ShenZhen Telecom (Shenzhen) [0.00 km]: 2.856 ms
Testing download speed................................................................................
Download: 28.35 Mbit/s
Testing upload speed................................................................................................
Upload: 11.97 Mbit/s
果解释:
输入这个命令后,它会自动发现离你最近的 speedtest.net 服务器(地理距离),然后打印出测试的网络上/下行速率。
可以对比 wondershaper 配置前后的速率,验证限速是否生效。
speedtest-cli 常用命令详解: