本文编写于 603 天前,最后修改于 603 天前,其中某些信息可能已经过时。

BBR是一款谷歌开发的TCP拥塞控制算法,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。BBR可以预判丢包率,调配发包速率等,使用软件优化网络质量的一种算法。

写在前面的话

BBR并不是万能的,相对于丢包过于严重的网络环境,还是加钱世界可达。BBR比较适合使用在延迟高,丢包率小的网络环境中,有时候也会让网络变得更糟糕(根据我的经验而谈)。

手动安装BBR开启加速

参考:开启TCP BBR拥塞控制算法 -- Github

  • Debian 8+ / Ubuntu 14.04

下载最新内核,内核最新查看这里

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.16/linux-image-4.16.0-041600-generic_4.16.0-041600.201804012230_amd64.deb

安装内核

dpkg -i linux-image-4.*.deb

删除旧内核(可选)

dpkg -l | grep linux-image 
apt-get purge 旧内核

更新grub系统引导文件并重启

update-grub
reboot
  • Ubuntu 16.04

安装Hardware Enablement Stack(HWE),自动更新内核

apt install --install-recommends linux-generic-hwe-16.04

删除旧内核(可选)

apt autoremove
  • CentOS 6

更换下载内核
最新内核查看这里

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

查看内核是否安装成功

rpm -qa | grep kernel

删除旧内核(可选)

rpm -ev 旧内核

更新grub系统引导文件并重启

sed -i 's:default=.*:default=0:g' /etc/grub.conf
reboot

安装完成后不要忘记修改/boot/grub/menu.lst和/etc/grub.conf,将这两个文件中旧内核的启动项删除即可避免无法重启的问题。

更新到最新版内核

yum --enablerepo=elrepo-kernel update -y 
reboot
  • CentOS 7

更换下载内核
最新内核查看这里

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

查看内核是否安装成功

rpm -qa | grep kernel

删除旧内核(可选)

rpm -ev 旧内核

更新grub系统引导文件并重启

egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0  # default 0 
表示第一个内核设置为默认运行, 选择最新内核就对了
reboot

注意,某些服务商(如Digital Ocean)可能需要首先将VPS配置为可自定义内核,然后grub2的配置才会生效。
重新启动后,如果会出现“只读文件系统”的错误,root账户下执行mount -o remount rw /即可

更新到最新版内核
方法同CentOS 6

  • 开启BBR

开机后uname -r看看是不是内核> = 4.9

执行lsmod | grep bbr,如果中查询查询结果没有tcp_bbr的话教育就先执行

modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

执行

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

保存生效

sysctl -p

执行

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

如果结果都有bbr,则证明你的内核已开启bbr

执行lsmod | grep bbr,看到有tcp_bbr模块即说明bbr已启动

更为方便的一键脚本

脚本来自:一键安装最新内核并开启 BBR 脚本---秋水逸冰

  • 本脚本适用环境

    系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
    虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
    内存要求:≥128M

  • 关于本脚本

    1、本脚本已在 Vultr 上的 VPS 全部测试通过。
    2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
    3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
    4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

  • 使用方法

    使用root用户登录,运行以下命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。

  • 验证安装是否成功

重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:

uname -r

查看内核版本,显示为最新版就表示 OK 了

sysctl net.ipv4.tcp_available_congestion_control`
返回值一般为:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
或者为:
net.ipv4.tcp_available_congestion_control = reno cubic bbr

sysctl net.ipv4.tcp_congestion_control
返回值一般为:
net.ipv4.tcp_congestion_control = bbr

sysctl net.core.default_qdisc
返回值一般为:
net.core.default_qdisc = fq

lsmod | grep bbr
返回值有 `tcp_bbr` 模块即说明 bbr 已启动。注意:并不是所有的 VPS 都会有此返回值,若没有也属正常。