CentOS 7.9服务器升级内核到5.19,只为搞定Ansible部署Ceph集群

张开发
2026/4/20 1:11:37 15 分钟阅读

分享文章

CentOS 7.9服务器升级内核到5.19,只为搞定Ansible部署Ceph集群
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/s680MB/s51%随机IOPS12,00018,50054%延迟(99%)8.2ms5.1ms38%提示这些数据来自我们的测试环境实际提升幅度会因硬件配置而异但趋势是一致的。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* --enablerepoelrepo-kernel list available仓库选择建议kernel-ml主线稳定版(本文选择的5.19)kernel-lt长期支持版(如5.4)kernel-rt实时内核版3.2 内核安装与配置安装最新主线内核yum --enablerepoelrepo-kernel install kernel-ml kernel-ml-devel -y验证安装结果并配置启动项# 查看已安装内核 awk -F\ $1menuentry {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 role4.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 常见问题解决方案问题1NVIDIA驱动不兼容新内核# 解决方案重新安装驱动 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)

更多文章