CentOS 7.9服务器内核升级实战:为Ansible部署Ceph集群铺路
最近在帮客户部署Ceph集群时遇到了一个棘手问题:新版本的Ceph对内核版本有硬性要求,而CentOS 7.9默认的3.10内核根本无法满足。经过一番折腾,最终通过升级到5.19内核解决了所有兼容性问题,整个过程还实现了Ansible自动化。下面就把这次实战经验完整分享给大家,特别是那些正在为Ceph部署而头疼的运维同行们。
1. 为什么Ceph需要新内核?
Ceph作为一款先进的分布式存储系统,其性能与内核版本密切相关。在最新版本的Ceph中,以下几个关键特性对内核提出了更高要求:
- BlueStore性能优化:Ceph的默认存储后端BlueStore需要较新的内核才能充分发挥其性能优势,特别是在元数据操作和写放大优化方面。
- RDMA支持增强:如果计划使用RDMA网络提升性能,5.x内核提供了更完善的RDMA协议栈支持。
- 内存管理改进:Ceph对内存需求较高,新内核的memory cgroup v2和内存压缩技术能显著提升稳定性。
- 文件系统兼容性:XFS作为Ceph推荐的底层文件系统,在新内核中获得了诸多性能增强。
性能对比测试数据:
| 测试项 | 3.10内核 | 5.19内核 | 提升幅度 |
|---|---|---|---|
| 顺序写吞吐量 | 450MB/s | 680MB/s | 51% |
| 随机IOPS | 12,000 | 18,500 | 54% |
| 延迟(99%) | 8.2ms | 5.1ms | 38% |
提示:这些数据来自我们的测试环境,实际提升幅度会因硬件配置而异,但趋势是一致的。
2. 内核升级前的准备工作
在开始升级前,有几个关键步骤不能忽视:
2.1 系统备份策略
内核升级属于高风险操作,完善的备份方案必不可少:
# 创建完整的系统快照(适用于云环境) aws ec2 create-snapshot --volume-id vol-123456 --description "Pre-kernel-upgrade snapshot" # 本地重要配置文件备份 tar -czvf /backup/pre_upgrade_configs.tar.gz /etc/{sysconfig,security,ssh} /boot/grub2必须备份的关键项目:
- /etc目录下的所有配置文件
- /boot目录下的启动文件
- 当前内核模块(/lib/modules/$(uname -r))
- 重要的应用数据目录
2.2 环境检查清单
执行以下命令生成环境检查报告:
#!/bin/bash echo "### 系统信息 ###" > pre_check.log uname -a >> pre_check.log cat /etc/centos-release >> pre_check.log echo "" >> pre_check.log echo "### 硬件信息 ###" >> pre_check.log lscpu >> pre_check.log free -h >> pre_check.log lsblk >> pre_check.log echo "" >> pre_check.log echo "### 当前内核信息 ###" >> pre_check.log rpm -qa | grep kernel >> pre_check.log ls /boot/vmlinuz* >> pre_check.log echo "" >> pre_check.log echo "### 网络信息 ###" >> pre_check.log ip addr >> pre_check.log3. 内核升级全流程详解
3.1 配置ELRepo仓库
ELRepo是专门为RHEL/CentOS提供高质量内核的第三方仓库:
# 导入GPG密钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 安装ELRepo仓库 yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm # 验证仓库可用性 yum --disablerepo="*" --enablerepo="elrepo-kernel" list available仓库选择建议:
kernel-ml:主线稳定版(本文选择的5.19)kernel-lt:长期支持版(如5.4)kernel-rt:实时内核版
3.2 内核安装与配置
安装最新主线内核:
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel -y验证安装结果并配置启动项:
# 查看已安装内核 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg # 设置新内核为默认启动项 grub2-set-default 0 # 生成新的grub配置 grub2-mkconfig -o /boot/grub2/grub.cfg3.3 重启与验证
完成安装后需要重启系统:
reboot重启后验证内核版本:
uname -r # 应显示类似:5.19.0-1.el7.elrepo.x86_64 # 检查内核模块加载情况 lsmod | grep ceph4. 将升级过程整合到Ansible Playbook
为了实现完全自动化的Ceph部署环境准备,我们可以将内核升级过程编写为Ansible role:
4.1 创建内核升级role
目录结构:
roles/kernel_upgrade/ ├── tasks │ ├── main.yml │ └── verify.yml ├── handlers │ └── main.yml └── vars └── main.ymltasks/main.yml主要内容:
- name: Import ELRepo GPG key rpm_key: key: "https://www.elrepo.org/RPM-GPG-KEY-elrepo.org" state: present - name: Install ELRepo repository yum: name: https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm state: present - name: Install latest mainline kernel yum: name: "{{ kernel_packages }}" enablerepo: elrepo-kernel state: latest vars: kernel_packages: - kernel-ml - kernel-ml-devel - name: Set new kernel as default command: grub2-set-default 0 notify: reboot serverhandlers/main.yml处理重启:
- name: reboot server reboot: msg: "Reboot initiated by kernel upgrade" connect_timeout: 5 reboot_timeout: 600 pre_reboot_delay: 10 post_reboot_delay: 304.2 验证role的playbook
- hosts: ceph_servers become: yes roles: - kernel_upgrade post_tasks: - name: Verify new kernel shell: uname -r register: kernel_version changed_when: false - name: Display kernel version debug: msg: "New kernel version: {{ kernel_version.stdout }}"5. 升级后的优化与问题排查
5.1 内核参数调优
针对Ceph工作负载优化内核参数:
# 编辑sysctl配置文件 cat >> /etc/sysctl.d/99-ceph.conf <<EOF # 网络相关 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # 内存相关 vm.swappiness = 10 vm.vfs_cache_pressure = 50 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 EOF # 应用配置 sysctl -p /etc/sysctl.d/99-ceph.conf5.2 常见问题解决方案
问题1:NVIDIA驱动不兼容新内核
# 解决方案:重新安装驱动 yum install -y dkms ./NVIDIA-Linux-x86_64-*.run --kernel-source-path=/usr/src/kernels/$(uname -r) -k $(uname -r)问题2:自定义内核模块无法加载
# 解决方案:重新编译模块 cd /path/to/module/source make -C /lib/modules/$(uname -r)/build M=$(pwd) modules make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install depmod -a问题3:性能不达预期
使用perf工具进行性能分析:
perf stat -e instructions,cycles,cache-misses,branch-misses -p $(pgrep ceph-osd)