CENTOS 7母机或KVM架构VPS升级换内核开启BBR加速 纯手工安装BBR

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

blob.png

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 旧内核的名字就好了

原文地址:https://www.cnblogs.com/yanglang/p/12112240.html