1. 课程导入与故障诊断工程化思维

RHEL 生产环境的故障诊断,本质上不是“凭经验猜问题”,而是一项可重复、可验证、可交付的工程活动。很多工程师在遇到服务不可用、系统卡顿、磁盘写满或网络中断时,第一反应是登录机器敲几条命令,看到什么异常就改什么。这种做法在单机测试环境里可能侥幸奏效,但在承载业务的生产环境中,随意变更会放大故障范围,甚至把一次局部故障演变成全局事故。本课程要建立的,正是把“救火”转化为“诊断—定位—恢复—验证”的工程化思维。

一、RHEL 生产故障的分类

要工程化地处理故障,先要能对故障分层归类。RHEL 生产故障通常可以按资源域和表现形态划分为几大类,每一类对应的排查入口和工具链差异很大。

  • 计算与进程类:CPU 饱和、负载异常升高、进程僵死、OOM Killer 触发、systemd 服务反复重启。典型入口是 top、ps、systemctl status、dmesg。
  • 内存类:物理内存耗尽、swap 频繁换入换出、内存泄漏、大页配置不当。入口是 free、vmstat、/proc/meminfo。
  • 存储与文件系统类:磁盘写满、inode 耗尽、文件系统只读、LVM 扩容失败、多路径链路抖动。入口是 df -h、df -i、lsblk、dmesg。
  • 网络类:链路不通、丢包、DNS 解析失败、防火墙规则误拦截、bond/team 切换异常。入口是 ip、ss、ping、traceroute、firewall-cmd。
  • 服务与应用类:服务启动失败、端口未监听、依赖服务不可达、配置语法错误、SELinux 拒绝。入口是 journalctl、systemctl、ausearch。
  • 内核与硬件类:内核 panic、驱动异常、磁盘坏道、网卡故障。入口是 dmesg、kdump、smartctl、ipmitool。

分类的意义在于:它决定了你第一时间应该看什么、不该动什么。例如磁盘写满时,盲目重启服务往往无效,因为根因在存储层;而服务反复重启时,如果只盯着磁盘,就会错过 systemd 的启动依赖问题。

二、故障诊断的四条核心原则

原则一:先止损,后定位。 生产环境的首要目标是恢复业务,而不是当场把根因查个水落石出。如果可以通过切换、限流、回滚快速恢复,应优先执行,再在可控窗口内做根因分析。止损与定位并不矛盾,但顺序不能颠倒。

原则二:先观察,后变更。 在动手修改任何配置之前,先采集现场证据:当前时间、负载、进程、日志、网络连接、挂载状态。很多故障的“现场”一旦被重启或清理就永久丢失。建议在变更前执行一次快照式采集,例如记录 uptime、free -m、df -h、ss -s 的输出。

原则三:从底层向上排查。 遵循“硬件—内核—系统—服务—应用”的顺序。网络不通时,先确认网卡链路和 IP 配置,再看路由和防火墙,最后才怀疑应用。自底向上可以避免在错误的层级浪费时间。

原则四:单一变量验证。 每次只改一个因素,改完立即验证。同时修改多个参数,即使问题解决了,也无法知道是哪一个改动起了作用,更无法沉淀为可复用的经验。

诊断过程中,时间线是极其重要的证据。建议在排查开始时记录当前时间,并在每条关键命令输出旁标注执行时刻,便于后续把日志时间戳与操作时间对齐。

三、恢复目标:RTO 与 RPO

恢复不是“让机器能登录”就算完成,而是要让业务恢复到可接受的状态。这里有两个关键指标:RTO(恢复时间目标) 和 RPO(恢复点目标)。RTO 描述业务能容忍多长的中断时间,RPO 描述能容忍丢失多少数据。例如某订单系统要求 RTO 为 30 分钟、RPO 为 5 分钟,那么故障恢复方案必须保证半小时内业务可用,且数据丢失不超过最近 5 分钟。

这两个指标直接决定了恢复策略的选择:RTO 很短时,可能需要主备切换或集群自动故障转移;RPO 很小时,必须依赖持续的数据复制或频繁的增量备份。诊断工程师必须清楚当前系统的 RTO/RPO 约束,否则“恢复”可能只是表面可用,实际已造成不可接受的数据损失。

四、课程整体路线图

本课程共 30 章,整体遵循“思维—工具—分层诊断—恢复—复盘”的工程路径。前几章建立故障分类、诊断原则与恢复目标;随后进入日志、性能、存储、网络、服务等分层诊断方法;再深入到具体故障场景的恢复操作与验证;最后落到故障复盘与预防机制建设。每一章都会围绕真实生产对象展开,强调可观察、可操作、可验证。

RHEL 生产故障诊断工程化路线 故障分类 计算与进程 内存 存储与文件系统 网络 服务与应用 内核与硬件 分类决定 排查入口与工具链 诊断原则 先止损,后定位 恢复业务优先于根因分析 先观察,后变更 采集现场证据再动手 自底向上排查 硬件→内核→系统→服务 单一变量验证 每次只改一个因素 原则约束操作顺序 避免变更放大故障 保证过程可复现 恢复目标 RTO 恢复时间目标 业务可容忍中断时长 RPO 恢复点目标 可容忍数据丢失量 策略选择依据 RTO短→主备切换 RPO小→持续复制 恢复≠能登录 业务可用且数据 损失在可接受范围 课程路线 思维与分类 第1-3章 工具与日志 第4-8章 分层诊断 第9-20章 恢复与验证 第21-27章 复盘与预防 第28-30章 可观察·可操作 可验证·可复用

五、从“救火”到“工程化”的关键转变

工程化思维的核心,是把每一次故障处理都当作一次可复用的工程实践。具体体现在三个方面:第一,有预案。对高频故障场景提前准备检查清单和恢复步骤,而不是临场发挥。第二,有记录。故障时间、现象、采集数据、变更动作、恢复结果都要留痕,形成可追溯的时间线。第三,有验证。恢复后必须验证业务指标,而不仅是服务进程存在。例如 Web 服务恢复后,应实际发起一次请求并检查返回码与响应时间,而不是只看 systemctl status 显示 active。

下面给出一份可直接使用的故障现场采集清单,用于在变更前快速固定证据。字段可根据实际环境增删,但建议保留时间戳与命令输出对应关系。

采集项命令示例观察重点
系统时间与运行时长date; uptime负载值、是否刚重启
内存与 swapfree -m; vmstat 1 5可用内存、si/so 是否非零
磁盘与 inodedf -h; df -i使用率是否接近 100%
进程与资源占用ps aux --sort=-%cpu | head异常高占用进程
网络连接ss -s; ss -tlnp监听端口、连接数异常
内核与硬件日志dmesg -T | tail -50OOM、I/O 错误、链路抖动
服务状态systemctl --failed失败单元及最近日志
采集命令本身应尽量只读,避免执行会改变系统状态的命令。例如不要在生产故障现场随意执行 reboot、systemctl restart 或清理日志文件,除非已确认这是止损方案的一部分。

本课程后续所有章节,都会围绕上述分类、原则与恢复目标展开。你需要在学习过程中逐步建立自己的诊断决策路径:看到现象,能快速判断属于哪一类故障;动手之前,能明确当前 RTO/RPO 约束;处理之后,能用业务指标验证恢复是否真正达成。这才是 RHEL 生产故障诊断与恢复工程化的起点。