BBR 是 Google 开发的 TCP 拥塞算法,俗话说,Google 出品必属精品,如果条件允许,服务器尽量开启BBR。
BBR 模块从 4.9 版本的内核中开始支持,CentOS7 的发布版标配的是 kernel-3.10,所以首先需要升级内核到大于等于 4.9 的版本,然后再更改设置开启 BBR。
内核升级
升级内核有多种方法,小版本升级可以用 yum update
直接搞定,大版本升级有源码升级和 ELRepo 库升级两种方法。
安装 ELRepo 库
# 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
当执行第一句失败的情况下,需要更新系统,即执行 # yum update
指令。
执行命令结果提示 cannot find a valid baseurl for repo:base/7/x86_64
此问题存在两种情况:
方法一:
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
(每个机子都可能不一样),把 ONBOOT=no,改为 ONBOOT=yes;# service network restart
方法二:
# sudo dhclient
安装新内核
查看当前内核信息:
[root@DOAMS3 ~]# uname -r
3.10.0-693.el7.x86_64
我在一些博客上看到直接安装新内核,执行:
yum --enablerepo=elrepo-kernel install kernel-ml -y
但是结果返回报错。
此时我们需要先执行 # yum --disablerepo=\* --enablerepo=elrepo-kernel list available
语句,会显示所有安装包,缺失的会自动下载下来。结果如下:
可以看到有 kernel-lt 和 kernel-ml 两种类型的内核,选择安装 kernel-ml:
# yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml -y
需要等待一段时间下载,最后结果如图:
安装之后,查看内核列表。执行 # rpm -qa | grep kernel
查看是否有 4.9+ 的内核版本,如果有,则证明安装成功了:
接下来我们需要将新内核设置为默认选项。
在这里我根据网上教程执行 # grub2-set-default 0
命令,经尝试 发现,执行该条命令的一个前提在于新安装的内核在第一个,所以将 0 设为默认启动项。 由上图可知,我新安装的内核(Centos Linux 5.0.9)不是在第一个,所以这样执行是有问题的。
正确的做法应该是:
# grub2-editenv list
因为我上一步执行 # grub2-set-default 0
命令,导致设置错误。
# cat /boot/grub2/grub.cfg | grep menuentry
可以看出我有三个内核版本!请忽略最下方那个,是我设置错误的!
# grub2-set-default 'CentOS Linux (5.0.9-1.el7.elrepo.x86_64) 7 (Core)'
这里需要注意的是,内核版本号中的字符区分,5.0.9-1.el7 后面那个是小写英文字母 i,而不是数字 1。
# grub2-editenv list
在 /etc/sysctl.conf 后添加如下三行:
# echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
# echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
# sysctl -p
执行这一步时可能会有类似报错 error: “No such file or directory” setting key “net.core.default_qdisc”,不用管直接 reboot 即可。重启后执行。
查看结果:
# sysctl -n net.ipv4.tcp_congestion_control
# lsmod | grep bbr
如果两行命令都有 BBR 字样输出,则代表 BBR 启用成功。