共计 5610 个字符,预计需要花费 15 分钟才能阅读完成。
“CentOS 8.X (AlmaLinux 8.X) update and switch Linux kernel +enable BBR on CloudCone Scalable Cloud Server”
前言
最近为了将个站切换为 Cyberpanel + OpenLiteSpeed 架构,新装了 Debian 操作系统,想的是内核要更新一些,且稳定。结果 Cyberpanel 的安装脚本无法识别。
Unable to detect your OS...
CyberPanel is supported on Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, CentOS 7.x, CentOS 8.x, CloudLinux 7.x, CloudLinux 8.x and AlmaLinux 8.x...
无奈只能换回一直使用的 CentOS 系列。CentOS 系列大家都懂的,内核比较老。所以就有了更新内核的需求。CloudCone 的官方帮助文档上面没有 8 系列相关的文档。所以在此记录一下。
更新内核
查看当前系统的内核版本
方法 1
$ uname -sr
Linux 4.18.0-348.2.1.el8_5.x86_64
方法 2查看 /boot 目录中可用的初始化启动列表
$ ls -l /boot/vmlinuz-*
方法 3
awk -F\''$1=="menuentry "{print $2}' /etc/grub2.cfg
方法 4
$ grubby --default-kernel
/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64
因为 RHEL 中 GRUB2 配置参数再次更改,现在我们需要使用 grubby 设置默认内核或更改系统中内核的默认引导项。
Grubby 是一个命令行工具,用于更新和显示有关各种架构特定引导加载程序的配置文件的信息。它主要设计用于安装新内核并需要查找有关当前引导环境的信息的脚本。在新版本的 AlmaLinux8.X 中,Grubby是默认安装的。
关于 Grubby 管理的 GRUB 配置文件
默认引导加载程序目标主要由构建 grubby 的架构决定。每个架构都有一个首选的引导加载程序,每个引导加载程序都有自己的配置文件。如果在命令行上没有选择引导加载程序,grubby 将使用这些默认设置来搜索现有配置。如果没有找到引导加载程序配置文件,grubby 将使用该架构的默认值。这些默认值列在下表中。
Arch | Bootloader | Configuration File |
---|---|---|
x86_64 [BIOS] | grub2 | /boot/grub2/grub.cfg |
x86_64 [UEFI] | grub2 | /boot/efi/EFI/redhat/grub.cfg |
i386 | grub2 | /boot/grub2/grub.cfg |
ia64 | grub2 | /boot/efi/EFI/redhat/elilo.conf |
查看更详细的内容
$ grubby --info=/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64
index=0
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap rhgb quiet $tuned_params"
root="/dev/mapper/almalinux-root"
initrd="/boot/initramfs-4.18.0-348.2.1.el8_5.x86_64.img $tuned_initrd"
title="AlmaLinux (4.18.0-348.2.1.el8_5.x86_64) 8.5 (Arctic Sphynx)"
id="534ab36635e14f6eaf92f3995c8b32a0-4.18.0-348.2.1.el8_5.x86_64"
升级内核
Linux 内核最新稳定版可以从 https://www.kernel.org 和 https://elrepo.org/linux/kernel/el8/x86_64/ 查看。
安装 ELRepo 源
ELRepo 是企业 Linux 软件包的 RPM 存储库。ELRepo 支持 Red Hat Enterprise Linux (RHEL) 及其衍生产品,如 Scientific Linux、CentOS Linux、Alma Linux 和 Rocky Linux。ELRepo 项目专注于与硬件相关的软件包,以增强您对 Enterprise Linux 的体验。这包括文件系统驱动程序、图形驱动程序、网络驱动程序、声音驱动程序、网络摄像头和视频驱动程序。
切换至 root 用户
安装源秘钥
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装 ELRepo 仓库源
$ dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Last metadata expiration check: 6:08:09 ago on Tue 14 Dec 2021 07:12:38 AM CST.
elrepo-release-8.el8.elrepo.noarch.rpm 15 kB/s | 13 kB 00:01
Dependencies resolved.
Package Arch Version Repository Size
$ dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Last metadata expiration check: 6:08:09 ago on Tue 14 Dec 2021 07:12:38 AM CST.
elrepo-release-8.el8.elrepo.noarch.rpm 15 kB/s | 13 kB 00:01
Dependencies resolved.
Package Arch Version Repository Size
Installing:
elrepo-release noarch 8.2-1.el8.elrepo @commandline 13 k
Transaction Summary
Install 1 Package
… …
Verifying : elrepo-release-8.2-1.el8.elrepo.noarch 1/1
Installed:
elrepo-release-8.2-1.el8.elrepo.noarch
Complete!
查看可用的内核
$ dnf --disablerepo="*" --enablerepo="elrepo-kernel" list available
ELRepo.org Community Enterprise Linux Kernel Re 40 kB/s | 2.0 MB 00:51
Available Packages
bpftool.x86_64 5.15.7-1.el8.elrepo elrepo-kernel
......
python3-perf.x86_64 5.15.7-1.el8.elrepo elrepo-kernel
安装新的内核
$ dnf -y install --enablerepo=elrepo-kernel kernel-lt kernel-lt-devel
ELRepo.org Community Enterprise Linux Repositor 350 kB/s | 336 kB 00:01
... ...
Downloading Packages:
(1/4): kernel-lt-5.4.164-1.el8.elrepo.x86_64.rp 60 kB/s | 66 kB 00:01
(2/4): kernel-lt-devel-5.4.164-1.el8.elrepo.x86 13 mB/s | 13 MB 00:01
(3/4): kernel-lt-modules-5.4.164-1.el8.elrepo.x 25 mB/s | 25 MB 00:01
(4/4): kernel-lt-core-5.4.164-1.el8.elrepo.x86_ 28 mB/s | 28 MB 00:01
--------------------------------------------------------------------------------
Total 21 mB/s | 66 MB 00:04
Running transaction check
... ...
Complete!
安装完成后查看新的内核
$ grubby --default-kernel
/boot/vmlinuz-5.4.164-1.el8.elrepo.x86_64
查看所有内核
$ grubby --info=ALL
安装后不出意外一般都已经设置好默认启动了,但是不知道 CloudCone 是怎么回事,默认没有生效。所以我们手动指定一下。
$ grubby --set-default=/boot/vmlinuz-5.4.164-1.el8.elrepo.x86_64
因为日志丢失,找不到详细的记录,后来再试了一次,研究了一下,真正能够使生效的是用配置工具。是因为 CentOS 8.X 系列的启动配置文件是由工具生成的,手动配置都不好。
设置以新的内核启动,0 表示最新安装的内核,设置为 0 表示以新版本内核启动:
grub2-set-default 0
使用 grub2-mkconfig 自动生成启动项文件。(这条命令是关键,是灵魂啊)
grub2-mkconfig -o /boot/grub2/grub.cfg
重启生效
$ reboot
再次查看
$ grubby --default-kernel
/boot/vmlinuz-5.4.164-1.el8.elrepo.x86_64
更新成功
删除旧的内核(可选操作步骤)
删除旧的内核请谨慎操作,不建议在生产环境操作。查看旧的内核列表, 用这个命令看可阅读性比较高。
$ rpm -qa | grep kernel | sort -V
kernel-lt-devel-5.4.164-1.el8.elrepo.x86_64
... ...
kernel-modules-4.18.0-348.2.1.el8_5.x86_64
删除旧的内核
$ dnf remove kernel-core-4.18.0 kernel-devel-4.18.0 kernel-tools-libs-4.18.0 kernel-headers-4.18.0
No match for argument: kernel-devel-4.18.0
No match for argument: kernel-headers-4.18.0
Dependencies resolved.
... ...
kmod-kvdo-6.2.5.72-81.el8.x86_64
vdo-6.2.5.74-14.el8.x86_64
Complete!
查看是否删除完成
$ rpm -qa | grep kernel | sort -V
kernel-lt-5.4.164-1.el8.elrepo.x86_64
kernel-lt-core-5.4.164-1.el8.elrepo.x86_64
kernel-lt-devel-5.4.164-1.el8.elrepo.x86_64
kernel-lt-modules-5.4.164-1.el8.elrepo.x86_64
方法 2 安装 yum-utils 工具,当系统安装的内核大于 3 个时,会自动删除旧的内核版本。
yum install yum-utils
保留两个内核,其它自动清除
$ package-cleanup --oldkernels --count=2
package-cleanup has to be executed with one of the options: --dupes, --leaves, --orphans, --problems or --cleandupes
开启 BBR
什么是 BBR,为什么要开启 BBR
TCP BBR 是由来自 Google 的 Neal Cardwell 和 Yuchung Cheng 发表的新的 TCP 拥塞控制算法,其目的就是要尽量跑满带宽,并且尽量不要有排队的情况。目前已经在 Google 内部大范围使用并且随着 linux 4.9 版本正式发布。检查是否安装 BBR
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq_codel
返回结果中没有 BBR 安装 BBR,Linux 内核 4.9 版本以后自带 BBR,之前我们已经更新了内核,所以,现在只需要开去 BBR 功能即可。
echo "net.ipv4.tcp_congestion_control= bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
sysctl -p
reboot
重启后执行检查命令,看是否有输出 BBR。
$ sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic bbr
现在内核中已经 BBR 功能。下面检测是否正在运行。
$ lsmod | grep bbr
tcp_bbr 20480 8
看到 tcp_bbr 说明 BBR 已经成功在运行了。