RedisRabbitMQKafka中间件生产运维
场景
假设一个微服务平台依赖 Redis 进行缓存、RabbitMQ 处理异步消息、Kafka 处理事件流。突然,平台出现延迟飙升、消息处理失败和数据不一致。
Redis 可靠性
症状
- 缓存命中率下降(低于 80%)
- 命令超时(如
GET操作延迟 > 10ms) - 内存使用率超过 80%(
INFO memory显示 used_memory_rss 高)
诊断
- 检查慢查询:
SLOWLOG GET 10 - 检查内存碎片:
INFO memory中的 mem_fragmentation_ratio( > 1.5 表示碎片严重) - 检查持久化问题:
INFO persistence显示 rdb_last_bgsave_time_sec 过长
命令与风险控制
# 查看慢查询
redis-cli -h localhost -p 6379 SLOWLOG GET 10
# 分析内存碎片
redis-cli MEMORY PURGE
# 注意:MEMORY PURGE 可能阻塞,建议低峰期执行
回滚
- 如果因配置更改导致问题,恢复原配置并重启:
redis-cli CONFIG SET save ""回滚持久化策略。 - 使用
REPLICAOF NO ONE停止复制,重新同步。
验证
- 再次检查慢查询:
SLOWLOG RESET后测试基准操作。 - 验证内存:
redis-cli INFO memory | grep used_memory应稳定。
何时提交 OpsGlobal 工单
- 当慢查询或内存问题持续,内部无法优化时。
- 当需要进行集群重新分片或升级时。
RabbitMQ 可靠性
症状
- 消息积压:队列消费者延迟高,
rabbitmqctl list_queues显示 message count 持续增长。 - 连接被断开:
rabbitmqctl list_connections显示大量非预期断开。 - 高内存报警:
rabbitmqctl status中 vm_memory_high_watermark_paging_ratio > 0.5。
诊断
- 检查队列状态:
rabbitmqctl list_queues name messages consumers memory - 检查日志:
/var/log/rabbitmq/rabbit@host.log中搜索 "alarm" - 检查网络:
netstat -an | grep 5672确认连接状态
命令与风险控制
# 查看所有队列详情
rabbitmqctl list_queues --silent name messages consumers memory
# 强制清除积压消息(风险操作)
rabbitmqctl purge_queue <queue_name>
# 注意:purge 会丢失所有消息,仅在确认无影响时使用
回滚
- 如果扩展了磁盘或内存阈值,恢复原值:
rabbitmqctl set_vm_memory_high_watermark 0.4 - 如果添加了队列镜像,移除镜像:
rabbitmqctl set_policy ha-all "" ".*" '{"ha-mode":"exactly","ha-params":1}'
验证
- 确认消息消费速率恢复:使用
rabbitmqctl list_queues观察 message count 下降。 - 测试发布和消费:使用 Python 示例代码验证。
何时提交 OpsGlobal 工单
- 当消息积压导致业务延迟,内部调优无效。
- 当需要迁移或升级 RabbitMQ 集群时。
Kafka 可靠性
症状
- 消费者 lag 不断增加:
kafka-consumer-groups --bootstrap-server localhost:9092 --group <group> --describe显示 LAG 持续增长。 - 副本不同步:
kafka-topics --describe --topic <topic>显示 ISR 为空或小于副本数。 - 磁盘使用率高:Broker 日志报错 "Disk usage exceeds threshold"。
诊断
- 查看消费者组 lag:
kafka-consumer-groups --bootstrap-server localhost:9092 --all-groups --describe - 检查副本同步:
kafka-topics --describe --topic <topic> - 检查磁盘:
df -h和 Kafka 日志中的磁盘警告。
命令与风险控制
# 查看特定消费者组
kafka-consumer-groups --bootstrap-server localhost:9092 --group my-group --describe
# 修改保留时间清理旧数据(风险操作)
kafka-configs --bootstrap-server localhost:9092 --entity-type topics --entity-name <topic> --alter --add-config retention.ms=604800000
# 注意:缩短保留时间会丢失数据,确保必要时执行
回滚
- 如果修改了保留时间,恢复原值:
retention.ms=original_value - 如果进行了分区重分配,停止并回滚到原始分区分配。
验证
- 检查消费者 lag 是否下降:再次执行
--describe。 - 检查 ISR 是否恢复:
kafka-topics --describe显示 ISR 正常。
何时提交 OpsGlobal 工单
- 当 lag 持续增大且消费者优化无效时。
- 当需要扩展 Kafka 集群或解决磁盘 I/O 瓶颈时。
适用场景
适合正在处理 NoSQL、Redis, RabbitMQ, Kafka, 中间件 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
学习如何诊断和解决生产环境中 Redis、RabbitMQ 和 Kafka 的常见可靠性问题。本指南涵盖真实场景、症状、诊断命令、风险控制、回滚流程和验证步骤。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。