使用环境

虚拟化:KVM、Xen等,除了OpenVZ基本都行

系统:CentOS 6+,Debian 7+,Ubuntu 12+

内存:128MB以上

方法

使用root登陆VPS,输入下面命令:

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

完成后,提示重启,输入y并重启VPS。

bbr.sh脚本详细内容:

#!/usr/bin/env bash
#
# Auto install latest kernel for TCP BBR
#
# System Required:  CentOS 6+, Debian7+, Ubuntu12+
#
# Copyright (C) 2016-2018 Teddysun <i@teddysun.com>
#
# URL: https://teddysun.com/489.html
#red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'cur_dir=$(pwd)[[ $EUID -ne 0 ]] && echo -e "${red}Error:${plain} This script must be run as root!" && exit 1[[ -d "/proc/vz" ]] && echo -e "${red}Error:${plain} Your VPS is based on OpenVZ, which is not supported." && exit 1if [ -f /etc/redhat-release ]; thenrelease="centos"
elif cat /etc/issue | grep -Eqi "debian"; thenrelease="debian"
elif cat /etc/issue | grep -Eqi "ubuntu"; thenrelease="ubuntu"
elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; thenrelease="centos"
elif cat /proc/version | grep -Eqi "debian"; thenrelease="debian"
elif cat /proc/version | grep -Eqi "ubuntu"; thenrelease="ubuntu"
elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; thenrelease="centos"
elserelease=""
fiis_digit(){local input=${1}if [[ "$input" =~ ^[0-9]+$ ]]; thenreturn 0elsereturn 1fi
}is_64bit(){if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ]; thenreturn 0elsereturn 1fi
}get_valid_valname(){local val=${1}local new_val=$(eval echo $val | sed 's/[-.]/_/g')echo ${new_val}
}get_hint(){local val=${1}local new_val=$(get_valid_valname $val)eval echo "\$hint_${new_val}"
}#Display Memu
display_menu(){local soft=${1}local default=${2}eval local arr=(\${${soft}_arr[@]})local default_promptif [[ "$default" != "" ]]; thenif [[ "$default" == "last" ]]; thendefault=${#arr[@]}fidefault_prompt="(default ${arr[$default-1]})"filocal picklocal hintlocal vnamelocal prompt="which ${soft} you'd select ${default_prompt}: "while :doecho -e "\n------------ ${soft} setting ------------\n"for ((i=1;i<=${#arr[@]};i++ )); dovname="$(get_valid_valname ${arr[$i-1]})"hint="$(get_hint $vname)"[[ "$hint" == "" ]] && hint="${arr[$i-1]}"echo -e "${green}${i}${plain}) $hint"doneechoread -p "${prompt}" pickif [[ "$pick" == "" && "$default" != "" ]]; thenpick=${default}breakfiif ! is_digit "$pick"; thenprompt="Input error, please input a number"continuefiif [[ "$pick" -lt 1 || "$pick" -gt ${#arr[@]} ]]; thenprompt="Input error, please input a number between 1 and ${#arr[@]}: "continuefibreakdoneeval ${soft}=${arr[$pick-1]}vname="$(get_valid_valname ${arr[$pick-1]})"hint="$(get_hint $vname)"[[ "$hint" == "" ]] && hint="${arr[$pick-1]}"echo -e "\nyour selection: $hint\n"
}version_ge(){test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"
}get_latest_version() {latest_version=($(wget -qO- https://kernel.ubuntu.com/~kernel-ppa/mainline/ | awk -F'\"v' '/v[4-9]./{print $2}' | cut -d/ -f1 | grep -v - | sort -V))[ ${#latest_version[@]} -eq 0 ] && echo -e "${red}Error:${plain} Get latest kernel version failed." && exit 1kernel_arr=()for i in ${latest_version[@]}; doif version_ge $i 4.14; thenkernel_arr+=($i);fidonedisplay_menu kernel lastif [[ `getconf WORD_BIT` == "32" && `getconf LONG_BIT` == "64" ]]; thendeb_name=$(wget -qO- https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1)deb_kernel_url="https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/${deb_name}"deb_kernel_name="linux-image-${kernel}-amd64.deb"modules_deb_name=$(wget -qO- https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/ | grep "linux-modules" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1)deb_kernel_modules_url="https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/${modules_deb_name}"deb_kernel_modules_name="linux-modules-${kernel}-amd64.deb"elsedeb_name=$(wget -qO- https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1)deb_kernel_url="https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/${deb_name}"deb_kernel_name="linux-image-${kernel}-i386.deb"modules_deb_name=$(wget -qO- https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/ | grep "linux-modules" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1)deb_kernel_modules_url="https://kernel.ubuntu.com/~kernel-ppa/mainline/v${kernel}/${modules_deb_name}"deb_kernel_modules_name="linux-modules-${kernel}-i386.deb"fi[ -z ${deb_name} ] && echo -e "${red}Error:${plain} Getting Linux kernel binary package name failed, maybe kernel build failed. Please choose other one and try again." && exit 1
}get_opsy() {[ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return[ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return[ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return
}opsy=$( get_opsy )
arch=$( uname -m )
lbit=$( getconf LONG_BIT )
kern=$( uname -r )get_char() {SAVEDSTTY=`stty -g`stty -echostty cbreakdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty echostty $SAVEDSTTY
}getversion() {if [[ -s /etc/redhat-release ]]; thengrep -oE  "[0-9.]+" /etc/redhat-releaseelsegrep -oE  "[0-9.]+" /etc/issuefi
}centosversion() {if [ x"${release}" == x"centos" ]; thenlocal code=$1local version="$(getversion)"local main_ver=${version%%.*}if [ "$main_ver" == "$code" ]; thenreturn 0elsereturn 1fielsereturn 1fi
}check_bbr_status() {local param=$(sysctl net.ipv4.tcp_congestion_control | awk '{print $3}')if [[ x"${param}" == x"bbr" ]]; thenreturn 0elsereturn 1fi
}check_kernel_version() {local kernel_version=$(uname -r | cut -d- -f1)if version_ge ${kernel_version} 4.9; thenreturn 0elsereturn 1fi
}install_elrepo() {if centosversion 5; thenecho -e "${red}Error:${plain} not supported CentOS 5."exit 1firpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgif centosversion 6; thenrpm -Uvh https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpmelif centosversion 7; thenrpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmfiif [ ! -f /etc/yum.repos.d/elrepo.repo ]; thenecho -e "${red}Error:${plain} Install elrepo failed, please check it."exit 1fi
}sysctl_config() {sed -i '/net.core.default_qdisc/d' /etc/sysctl.confsed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.confecho "net.core.default_qdisc = fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.confsysctl -p >/dev/null 2>&1
}install_config() {if [[ x"${release}" == x"centos" ]]; thenif centosversion 6; thenif [ ! -f "/boot/grub/grub.conf" ]; thenecho -e "${red}Error:${plain} /boot/grub/grub.conf not found, please check it."exit 1fised -i 's/^default=.*/default=0/g' /boot/grub/grub.confelif centosversion 7; thenif [ ! -f "/boot/grub2/grub.cfg" ]; thenecho -e "${red}Error:${plain} /boot/grub2/grub.cfg not found, please check it."exit 1figrub2-set-default 0fielif [[ x"${release}" == x"debian" || x"${release}" == x"ubuntu" ]]; then/usr/sbin/update-grubfi
}reboot_os() {echoecho -e "${green}Info:${plain} The system needs to reboot."read -p "Do you want to restart system? [y/n]" is_rebootif [[ ${is_reboot} == "y" || ${is_reboot} == "Y" ]]; thenrebootelseecho -e "${green}Info:${plain} Reboot has been canceled..."exit 0fi
}install_bbr() {check_bbr_statusif [ $? -eq 0 ]; thenechoecho -e "${green}Info:${plain} TCP BBR has already been installed. nothing to do..."exit 0ficheck_kernel_versionif [ $? -eq 0 ]; thenechoecho -e "${green}Info:${plain} Your kernel version is greater than 4.9, directly setting TCP BBR..."sysctl_configecho -e "${green}Info:${plain} Setting TCP BBR completed..."exit 0fiif [[ x"${release}" == x"centos" ]]; theninstall_elrepo[ ! "$(command -v yum-config-manager)" ] && yum install -y yum-utils > /dev/null 2>&1[ x"$(yum-config-manager elrepo-kernel | grep -w enabled | awk '{print $3}')" != x"True" ] && yum-config-manager --enable elrepo-kernel > /dev/null 2>&1if centosversion 6; thenif is_64bit; thenrpm_kernel_name="kernel-ml-4.18.20-1.el6.elrepo.x86_64.rpm"rpm_kernel_devel_name="kernel-ml-devel-4.18.20-1.el6.elrepo.x86_64.rpm"rpm_kernel_url_1="http://repos.lax.quadranet.com/elrepo/archive/kernel/el6/x86_64/RPMS/"elserpm_kernel_name="kernel-ml-4.18.20-1.el6.elrepo.i686.rpm"rpm_kernel_devel_name="kernel-ml-devel-4.18.20-1.el6.elrepo.i686.rpm"rpm_kernel_url_1="http://repos.lax.quadranet.com/elrepo/archive/kernel/el6/i386/RPMS/"firpm_kernel_url_2="https://dl.lamp.sh/files/"wget -c -t3 -T60 -O ${rpm_kernel_name} ${rpm_kernel_url_1}${rpm_kernel_name}if [ $? -ne 0 ]; thenrm -rf ${rpm_kernel_name}wget -c -t3 -T60 -O ${rpm_kernel_name} ${rpm_kernel_url_2}${rpm_kernel_name}fiwget -c -t3 -T60 -O ${rpm_kernel_devel_name} ${rpm_kernel_url_1}${rpm_kernel_devel_name}if [ $? -ne 0 ]; thenrm -rf ${rpm_kernel_devel_name}wget -c -t3 -T60 -O ${rpm_kernel_devel_name} ${rpm_kernel_url_2}${rpm_kernel_devel_name}fiif [ -f "${rpm_kernel_name}" ]; thenrpm -ivh ${rpm_kernel_name}elseecho -e "${red}Error:${plain} Download ${rpm_kernel_name} failed, please check it."exit 1fiif [ -f "${rpm_kernel_devel_name}" ]; thenrpm -ivh ${rpm_kernel_devel_name}elseecho -e "${red}Error:${plain} Download ${rpm_kernel_devel_name} failed, please check it."exit 1firm -f ${rpm_kernel_name} ${rpm_kernel_devel_name}elif centosversion 7; thenyum -y install kernel-ml kernel-ml-develif [ $? -ne 0 ]; thenecho -e "${red}Error:${plain} Install latest kernel failed, please check it."exit 1fifielif [[ x"${release}" == x"debian" || x"${release}" == x"ubuntu" ]]; then[[ ! -e "/usr/bin/wget" ]] && apt-get -y update && apt-get -y install wgetecho -e "${green}Info:${plain} Getting latest kernel version..."get_latest_versionif [ -n ${modules_deb_name} ]; thenwget -c -t3 -T60 -O ${deb_kernel_modules_name} ${deb_kernel_modules_url}if [ $? -ne 0 ]; thenecho -e "${red}Error:${plain} Download ${deb_kernel_modules_name} failed, please check it."exit 1fifiwget -c -t3 -T60 -O ${deb_kernel_name} ${deb_kernel_url}if [ $? -ne 0 ]; thenecho -e "${red}Error:${plain} Download ${deb_kernel_name} failed, please check it."exit 1fi[ -f ${deb_kernel_modules_name} ] && dpkg -i ${deb_kernel_modules_name}dpkg -i ${deb_kernel_name}rm -f ${deb_kernel_name} ${deb_kernel_modules_name}elseecho -e "${red}Error:${plain} OS is not be supported, please change to CentOS/Debian/Ubuntu and try again."exit 1fiinstall_configsysctl_configreboot_os
}clear
echo "---------- System Information ----------"
echo " OS      : $opsy"
echo " Arch    : $arch ($lbit Bit)"
echo " Kernel  : $kern"
echo "----------------------------------------"
echo " Auto install latest kernel for TCP BBR"
echo
echo " URL: https://teddysun.com/489.html"
echo "----------------------------------------"
echo
echo "Press any key to start...or Press Ctrl+C to cancel"
char=`get_char`install_bbr 2>&1 | tee ${cur_dir}/install_bbr.log

重启后,验证是否成功安装,输入:

uname -r

查看内核版本,含有 4.10 就表示 OK 了

sysctl net.ipv4.tcp_available_congestion_control

返回值一般为:
net.ipv4.tcp_available_congestion_control = bbr cubic reno

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已启动。

服务器搭建bbr加速相关推荐

  1. 记录一下 KVM服务器的bbr加速

    大神的一键安装bbr含 自动升级内核. wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh ...

  2. Linux系统开启服务器BBR加速教程

    BBR是Google提出的一种拥塞控制算法,目的是在网络拥塞时提高TCP性能,可以有效提高网络速度.下面是在Linux系统上开启BBR加速的教程: 1. 检查当前的内核版本是否支持BBR: ```ba ...

  3. 什么是BBR加速,Centos7如何开启BBR加速,优化服务器的传输速度,避免堵塞

    Centos7开启BBR加速,优化你的传输速度,避免堵塞 了解BBR加速 什么是BBR加速? BBR是一种加速TCP的拥堵算法技术.BBR 利用瓶颈带宽和往返传播时间,被认为是迄今为止跨越不同路由发送 ...

  4. CSGO社区服务器搭建架设服务器配置以及环境准备

    CSGO社区服务器搭建架设服务器配置以及环境准备 CSGO作为一款射击动作游戏还原场景真实性广受大批玩家的热爱,很多小伙伴也有想过自己搭建的话需要知道那些东西. 我是艾西,今天跟大家聊聊搭建架设前我们 ...

  5. Gitea——私有git服务器搭建详细教程

    本文将从源代码和docker安装两种方式带大家从0-1通过Gitea搭建一个私有git服务器 Gitea--私有git服务器搭建教程 什么是Gitea 一.源代码安装方式 1. 前置环境要求 2. 下 ...

  6. NVIDIA英伟达:深度学习服务器搭建指南 | 交流会笔记

    主讲人:Ken(何琨)| NVIDIA开发者社区经理 张康 屈鑫 编辑整理 量子位 出品 | 公众号 QbitAI 7月21日,量子位联合NVIDIA英伟达举行了线下交流会,跟现场近百位开发者同学共同 ...

  7. CentOS7 开启 BBR 加速

    写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站,未来我们一起交流进步. CentOS7 开启 BBR 加速 BBR 是 Google 开 ...

  8. 2022版使用云服务器搭建公网k8s容器集群

    总体流程一览 主要流程如下: 1.准备云主机,升级CentOS系统到7.9 2.所有节点上安装Docker和Kubeadm,拉取相关镜像 3.在Master节点初始化集群,包括kubectl和部署CN ...

  9. Chevereto图床搭建 | 利用云服务器搭建免费图床完整教程

    前言: 手里有台香港阿里云机器,不知道干什么好,干脆拿来做些小实验,呆在家里防疫都已经快长毛了...博客上的图片本来是托管在阿里云OSS上的,但是感觉管理起来不是很方便.而且本来很好用的 SM.MS ...

  10. v2ray各种版本+一键搭建+bbr提速脚本

    普通v2ray,没域名就用TCP协议就好了 bash <(curl -s -L https://raw.githubusercontent.com/xyz690/v2ray/master/ins ...

最新文章

  1. dom4j ---最好的xml解决方案?
  2. 小鹏,该兑现PPT了
  3. java复制两个对象报异常_Java中复制两个不同类的对象的属性
  4. RabbitMQ 消息确认机制confirm代码编写
  5. sql时间格式转换yyyymm_XML和实体类之间的转换
  6. jsonobject修改key的值_JSON字符串操作移除空串更改key/value的介绍
  7. 连接sqlexpress
  8. CountDownLatch和CyclicBarrier的区别
  9. excel loc() python_python pandas df.loc[]的典型用法
  10. 坐标转换计算七参数matlab代码,坐标系转换:已知控制点计算七参数并对数据批量转换...
  11. matlab中求雅克比矩阵的方法及cov函数的用法,协方差矩阵—Hessian矩阵—正定矩阵
  12. 2021-09-14 if__name__ == ‘__main__‘的用法
  13. 《惢客创业日记》2020.10.23(周五)长出了一口气
  14. 树莓派Android Things物联网开发:已知Bug发行说明
  15. 内存泄露和LeakCanary的故事
  16. Amazon 亚马逊 AWS S3 跨源资源共享 (CORS)设置
  17. 消防应急疏散指示系统在某生物制药工厂项目的应用
  18. 深入理解什么是LSM-Tree
  19. java程序员具体是做什么的?我来分享一天的工作内容
  20. Excel如何快速合并相同内容单元格

热门文章

  1. James+Javamail构建邮箱服务
  2. C#简单银行管理系统含源码(.net C# web)
  3. uni-app使用阿里矢量图库导入 icon 彩色和黑白色
  4. Android——ViewHolder
  5. realtek高清晰音频管理器怎么关闭的方法
  6. c语言程序中不能表示数制的是,2017计算机c语言二级考试题库及答案
  7. 如何才能快速拥有一张高含金量的IE证书?
  8. 【单片机课程合集】摩尔吧魔鬼集训营,单片机尽情学!
  9. React 18 新特性
  10. n皇后问题-c语言实现