场景
中间件如 Redis、RabbitMQ 和 Kafka 是现代分布式系统的核心。常见的故障场景包括: - Redis:内存溢出(OOM)、复制延迟、集群故障切换问题。 - RabbitMQ:队列积压、磁盘满、内存告警。 - Kafka:Broker 宕机、分区未充分复制、ISR 收缩。
症状
- 延迟飙升、错误率上升、服务降级。
- Redis 客户端连接失败或超时。
- RabbitMQ 发布者确认失败,消费者停止消费。
- Kafka 生产者报错,消费者滞后增加。
诊断
使用内置工具:
- Redis: redis-cli ping, INFO memory, SLOWLOG GET
- RabbitMQ: rabbitmq-diagnostics check_alarms, rabbitmqctl list_queues
- Kafka: kafka-broker-api-versions.sh, kafka-topics --describe
检查日志:
- Redis: /var/log/redis/redis-server.log
- RabbitMQ: /var/log/rabbitmq/
- Kafka: logs/server.log
命令示例
Redis 内存使用:
redis-cli -h host -p 6379 INFO memory | grep used_memory_human
RabbitMQ 队列积压:
rabbitmqctl list_queues name messages_ready messages_unacknowledged
Kafka 分区状态:
kafka-topics --bootstrap-server localhost:9092 --describe --topic test
风险控制
- 设置资源限制(内存、磁盘)。
- 配置告警(Prometheus + Alertmanager)。
- 使用副本和冗余。
- 实施优雅关闭和健康检查。
回滚
- Redis:如果节点故障,提升从节点为主节点;或使用哨兵进行自动故障转移。
- RabbitMQ:重置内存水位线,删除阻塞的队列,或重建镜像队列。
- Kafka:重启失败的 Broker,重新分配分区,或手动设置 ISR。
验证
- Redis:
SET key value并GET验证。 - RabbitMQ: 发送并消费一条消息。
- Kafka: 生产并消费一条消息,检查消费者滞后。
何时提交 OpsGlobal 工单
当问题超出团队能力或需要紧急支持时: - 无法自行恢复的关键数据丢失。 - 集群脑裂或数据不一致。 - 需要架构审查或性能调优。
适用场景
适合正在处理 NoSQL、Redis, RabbitMQ, Kafka, 可靠性 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
讨论每种中间件的常见故障场景、诊断步骤、健康检查命令、风险控制、回滚程序和验证方法,帮助 DevOps/SRE 团队保持高可用性。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。