CentOS Linux 6 / 7 安装 BBR(来自 Google 的 TCP 拥塞控制算法)

BBR 介绍:

相对于传统的 TCP 拥塞控制算法,BBR 在充分利用网络带宽的同时,还能够大幅减少不必要的丢包。具体请参见该篇文章《 BBR 拥塞控制算法解析(来自 Google 的 TCP 拥塞控制算法)》。

安装:

目前 Linux Kernel 4.9 及其以上版本已经集成了 BBR,所以只需要升级 Kernel 即可。

CentOS Linux 6 安装:

1、进入你的 CentOS,先升级你的 CentOS Linux 6 到最新的版本(当前最新版本是 6.9 ):

[root@host ~]# yum -y update

请使用如下命令查看 CentOS Linux 的版本号:

[root@host ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

2、再使用 yum 安装 wget(如果已经安装过,可忽略这步):

[root@host ~]# yum -y install wget

3、Ricky 个人是喜欢把一些临时文件放到 /tmp 目录下,所以进入 /tmp 目录,使用 wget 命令把安装脚本下载到这里,并执行脚本即可:

[root@host ~]# cd /tmp
[root@host ~]# wget --no-check-certificate https://ccie.lol/wp-content/uploads/2018/01/BBR.zip
[root@host ~]# unzip BBR.zip -d . && rm -f BBR.zip && sh BBR.sh

CentOS Linux 6 的 BBR 安装脚本内容请参见本文结尾部分。

4、CentOS Linux 6 重启完成后,请使用如下命令查看 BBR 是否开启:

[root@host ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

[root@host ~]# uname -r
4.14.11-1.el6.elrepo.x86_64

[root@host ~]# lsmod | grep bbr
tcp_bbr                16384  26 

[root@host ~]# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

至此,安装完成。

CentOS Linux 7 安装:

1、进入你的 CentOS,先升级你的 CentOS Linux 7 到最新的版本(当前最新版本是 7.4 ):

[root@host ~]# yum -y update

请使用如下命令查看 CentOS Linux 的版本号:

[root@host ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

2、安装 elrepo 并升级内核:

[root@host ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@host ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@host ~]# yum --enablerepo=elrepo-kernel install kernel-ml -y

3、更新 grub 文件并重启( reboot 后,ssh 会断开,稍等一会儿重新连接):

[root@host ~]# egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
[root@host ~]# grub2-set-default 0
[root@host ~]# reboot

4、开机后查看内核是否已更换为 4.9 及其以上的版本:

[root@host ~]# uname -r
4.14.11-1.el7.elrepo.x86_64

5、添加 BBR 相关配置并加载:

[root@host ~]# echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
[root@host ~]# echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
[root@host ~]# sysctl -p

这里最好重启一下服务器:

[root@host ~]# reboot

6、CentOS Linux 7 重启完成后,请使用如下命令查看 BBR 是否开启:

[root@host ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

[root@host ~]# uname -r
4.14.11-1.el7.elrepo.x86_64

[root@host ~]# lsmod | grep bbr
tcp_bbr 20480 849 

[root@host ~]# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

至此,安装完成。

附:CentOS Linux 6 的 BBR 安装脚本

手机端观看以下内容会因强制换行而导致排版上出现问题,请在 PC 端上观看。

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
rm -f $0

# Check if user is root
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please use root to install BBR"
    exit
fi

clear
echo "+------------------------------------------------------------------------+"
echo "|                          GooGle TCP BBR                                |"
echo "+------------------------------------------------------------------------+"
echo "|        A tool to auto-compile & install BBR on CentOS                  |"
echo "+------------------------------------------------------------------------+"
echo "|                 Welcome to  http://github.com/52fancy                  |"
echo "+------------------------------------------------------------------------+"

if [ ! -f "/boot/grub/grub.conf" ];then
	echo "不支持当前系统,即将退出程序!"
	exit
fi

Get_RHEL_Version()
{
    if grep -Eqi "release 5." /etc/redhat-release; then
        RHEL_Version='5'
    elif grep -Eqi "release 6." /etc/redhat-release; then
        RHEL_Version='6'
    elif grep -Eqi "release 7." /etc/redhat-release; then
        RHEL_Version='7'
    fi
}

Get_RHEL_Version
if [ $RHEL_Version != "6" ]; then
    echo "Error: You must be CentOS 6 to run this script, please use CentOS 6 to install BBR"
	exit
fi

Install()
{
    if lsmod | grep -Eqi "bbr"; then
	    echo "您已经成功安装BBR"
		exit
	else
	    read -p "即将升级内核?[Y]:" is_update
		if [[ ${is_update} == "y" || ${is_update} == "Y" ]]; then
		    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 -y install kernel-ml kernel-ml-devel
			
			sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf
			
			sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
			sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
			echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
			echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
			
			sysctl -p >/dev/null 2>&1
			
			read -p "重启后生效,是否重启?[Y]:" is_reboot
			if [[ ${is_reboot} == "y" || ${is_reboot} == "Y" ]]; then
			    reboot
			else
			    exit
			fi
		else
		    echo "程序即将退出安装"
            exit
		fi
    fi
}

Install
exit
打赏作者
这里是 “ CCIE 工程师社区 ” 官方的捐款通道,您是否可以考虑请我们喝杯咖啡呢?

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

Article Attachments

Was this article helpful?

Related Articles

Leave A Comment?

This site uses Akismet to reduce spam. Learn how your comment data is processed.