TCP BBR是前不久谷歌开源的一项拥塞控制算法,可以更高效的利用公网网络带宽,提高联网效率和速度,建议有条件的服务器都安装一下,不过如果大家都装,那互相抢来抢去估计到时候就效果不明显了,不过目前这个还是挺少人用的就是了。
网上抄来一段介绍,大家可以看看
大多数人用的是 TCP Cubic (Linux) / Compound TCP (Windows),而在有一定丢包率的情况下,TCP BBR 更加激进,会抢占了更多的公网带宽
此次 Google 提交到 Linux 主线并发表在 ACM queue 期刊上的 TCP BBR 拥塞控制算法,继承了 Google “先在生产环境部署,再开源和发论文” 的研究传统。TCP BBR 已经在 Youtube 服务器和 Google 跨数据中心的内部广域网(B4)上部署。
TCP BBR 致力于解决两个问题:
1、在有一定丢包率的网络链路上充分利用带宽。
2、降低网络链路上的 buffer 占用率,从而降低延迟。
TCP 拥塞控制的目标是最大化利用网络上瓶颈链路的带宽。一条网络链路就像一条水管,要想用满这条水管,最好的办法就是给这根水管灌满水,也就是:
水管内的水的数量 = 水管的容积 = 水管粗细 × 水管长度
换成网络的名词,也就是:网络内尚未被确认收到的数据包数量 = 网络链路上能容纳的数据包数量 = 链路带宽 × 往返延迟
TCP 维护一个发送窗口,估计当前网络链路上能容纳的数据包数量,希望在有数据可发的情况下,回来一个确认包就发出一个数据包,总是保持发送窗口那么多个包在网络中流动。
其实可以简单的理解,这就是一个加速算法,可以加快你服务器访问速度,充分利用带宽资源。与锐速相同的是都是单边加速无须客户端且效果很好,与锐速不同是它可以免费使用,不存在破解的问题。
Linux Kernel 4.9 (含后续版本)已经集成了该算法,所以我们其实要做的就是将系统内核更换更新到最新即可。
因为操作中涉及服务器后台操作,所以一切都是在SSH中进行,另外因为涉及到内核改写,因此如果你不是独立服务器或者KVM架构的VPS可能不能成功,OPENVZ的是不行的噢(当然OpenVZ架构的VPS其实也是有变通方法可以用上BBR,就是有点麻烦,详见https://www.bnxb.com/linuxserver/27274.html)。
进入操作之前先把系统里面的软件升级到最新版
yum更新系统版本:
yum update
首先,我们为系统增加elrepo源(国内VPS,类似腾讯云,阿里云,百度云如果安装源失败,可以从第二步注意事项那边开始执行):
以ROOT权限登陆SSH,然后执行下面命令
cat > /etc/yum.repos.d/elrepo.repo << EOF
然后根据你CENTOS版本复制下面命令全部黏贴,然后回车
CENTOS6:
[elrepo-kernel] name=ELRepo.org Community Enterprise Linux Kernel Repository - el6 baseurl=http://elrepo.org/linux/kernel/el6/x86_64/$basearch/ http://mirrors.coreix.net/elrepo/kernel/el6/x86_64/$basearch/ http://jur-linux.org/download/elrepo/kernel/el6/x86_64/$basearch/ http://repos.lax-noc.com/elrepo/kernel/el6/x86_64/$basearch/ http://mirror.ventraip.net.au/elrepo/kernel/el6/x86_64/$basearch/ enabled=1 gpgcheck=0 EOF
CENTOS7:
[elrepo-kernel] name=ELRepo.org Community Enterprise Linux Kernel Repository - el7 baseurl=http://elrepo.org/linux/kernel/el7/x86_64/$basearch/ http://mirrors.coreix.net/elrepo/kernel/el7/x86_64/$basearch/ http://jur-linux.org/download/elrepo/kernel/el7/x86_64/$basearch/ http://repos.lax-noc.com/elrepo/kernel/el7/x86_64/$basearch/ http://mirror.ventraip.net.au/elrepo/kernel/el7/x86_64/$basearch/ enabled=1 gpgcheck=0 EOF
第二步,安装替换最新内核及grub2
yum -y install kernel-ml grub2
注意事项:国内的阿里云和腾讯云因为国内网络的问题不能用上面步骤执行,需要用下面步骤,您如果是国外服务器也可以不用用上面步骤,直接从这里开始执行,效果一样
CENTOS7安装elrepo并升级内核:
下载最新内核并安装
[root@BnxbComserver ~]#rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@BnxbComserver ~]#rpm -Uvh http://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-4.20.6-1.el7.elrepo.x86_64.rpm
CENTOS6安装elrepo并升级内核:
下载最新内核并安装
[root@BnxbComserver ~]#rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@BnxbComserver ~]#rpm -Uvh http://elrepo.org/linux/kernel/el6/x86_64/RPMS/kernel-ml-4.19.8-1.el6.elrepo.x86_64.rpm
最新的RMP包可以到http://elrepo.org/linux/kernel/el7/x86_64/RPMS/查看(上面的旧包都会被删掉,因此一定要去查看替换成新的)
第三步:查看最新内核是否安装成功
ls -l /boot/vmlinuz*
看到上面的结果,最后一条已经是4.10.5了,只要是4.9及以后的版本都是支持BR。
那么下面我们可以开始替换CentOS 7内核了:
第四步:更改grub
(以下用root进行操作)
CENTOS6输入以下命令查看grub启动列表:
awk -F' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
或者
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d '
会出现类似的列表:
0 : CentOS Linux (4.10.5-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux 7 Rescue f0e606d25a164f39aa306b052f38bc33 (3.10.0-327.36.3.el7.x86_64) 2 : CentOS Linux (3.10.0-327.36.3.el7.x86_64) 7 (Core) 3 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 4 : CentOS Linux (0-rescue-9720ffe2dea246599e9e8048162adebf) 7 (Core)
上面的查看grub不是必须的步骤,可以直接输入以下命令更新缺省内核
grub2-set-default 0
注意选择4.10.5版本新内核前面的数字,这里是0所以输入0
另外有可能grub2部分源中不存在,上面安装会失败,可以手动改一下GRUB启动列表
vi /boot/grub/grub.conf
将default=1改成default=0
centos7输入下面命令
cat /boot/grub2/grub.cfg |grep menuentry
注意一下我们新增的内核名称,然后稍微修改下下面的代码设置默认启动的内核
grub2-set-default "CentOS Linux (4.20.6-1.el7.elrepo.x86_64) 7 (Core)"
重启系统
reboot
重启后SSH会断开,我们需要稍微等待些许时间,即可再次连接上,然后查看内核:
uname -a
不出意外,应该已经是最新的4.10.5了
接下来赶紧开启BBR吧:
cat >>/etc/sysctl.conf << EOF
黏贴下面内容,点右键全部自动输入,然后回车
net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr EOF
再继续查看内核参数:
sysctl -p
看看有没有一行net.ipv4.tcp_congestion_control = bbr
最后保险起见,复核一下BBR是否生效:
sysctl net.ipv4.tcp_available_congestion_control
看看有没有一行:net.ipv4.tcp_available_congestion_control = reno cubic bbr
lsmod | grep bbr
看看有没有一行tcp_bbr ***** *
也就是都如图所示
看到的反馈说明,BBR模块已经开始运作了!感受下Google带来的黑科技吧!
注意:系统内的ipv6项并没有tcp_congestion_control一说,v4和v6用的是一样的(原文引用: IPv6 has no global variables such as tcp_*. tcp_* settings under ipv4/ also
apply to IPv6.)
另外因为这样相当于安装了新版内核,但是旧版内核也还在,如果不需要用到,其实是可以删掉旧版内核的,方法如下:
先查询系统已安装的内核
rpm -qa | grep kernel
yum remove -y 旧内核的名字就好了