场景 您负责的微服务集群依赖 Redis 缓存、RabbitMQ 消息队列和 Kafka 事件流。某日,部分服务响应变慢,订单处理延迟增加。
症状
- Redis: redis-cli --latency 显示延迟大于 10ms;INFO 输出中 total_connections_received 突增;部分 key 的 TTL 未按预期过期。
- RabbitMQ: Management UI 中队列深度飙升,消费者确认超时;rabbitmqctl list_queues 显示未确认消息数大于 1000。
- Kafka: 消费者组滞后 (consumer lag) 显著增加;kafka-consumer-groups --describe 显示 LAG 持续增长;Broker 磁盘使用率接近 85%。
诊断
1. Redis – 检查慢查询日志:SLOWLOG GET 100。若发现大量 SET/GET 操作耗时 > 100μs,可能因内存碎片或持久化策略不当。使用 MEMORY DOCTOR 获取建议。检查 maxmemory-policy 是否为 allkeys-lru,避免逐出风暴。
2. RabbitMQ – 查看节点间网络延迟:rabbitmq-diagnostics check_port_connectivity。检查连接数:rabbitmqctl list_connections。若存在大量短连接,调整客户端连接池。确认镜像队列是否启用:rabbitmqctl list_policies。落盘消息过长时,增加 vm_memory_high_watermark 并开启惰性队列。
3. Kafka – 检查分区 ISR:kafka-topics --describe --topic your-topic。若 ISR 少于副本数,需检查网络和磁盘 I/O。执行 kafka-run-class kafka.tools.DumpLogSegments --files 分析日志段。监控请求处理时间:bin/kafka-broker-api-versions.sh 辅助定位。
命令示例
- Redis 动态限制连接:CLIENT SETNAME monitor; CONFIG SET maxclients 5000(谨慎,需评估资源)。
- RabbitMQ 重置未确认消息:rabbitmqctl eval 'rabbit_amqqueue:set_max_age(rabbit_misc:r(<<"queue-name">>, queue), 60000).' 或清空队列(高风险)。
- Kafka 增加分区数:kafka-topics --alter --topic your-topic --partitions 6(确保 key 分布合理)。
风险控制
- 始终在非生产环境测试参数变更。
- 修改 Redis 逐出策略前,预估最大内存使用量。
- RabbitMQ 镜像队列变更需逐步执行,避免脑裂。
- Kafka 分区重分配使用 kafka-reassign-partitions.sh 并设置 --throttle 限制流量。
回滚
- Redis: 恢复配置:备份 /etc/redis/redis.conf 后执行 CONFIG SET 原值。
- RabbitMQ: 删除策略:rabbitmqctl clear_policy;恢复队列属性需重启节点。
- Kafka: 手动移动分区:使用 kafka-reassign-partitions --generate 生成原方案并执行。
验证
- Redis: 运行 redis-benchmark -q -n 1000 比对延迟基线。
- RabbitMQ: 生产一条消息并确认消费端及时 ack。
- Kafka: 使用 kafka-producer-perf-test 和 kafka-consumer-perf-test 验证吞吐量。
何时提交 OpsGlobal 工单
- 执行上述操作后问题依旧。
- 需要集群级优化(如 Kafka 调整 num.io.threads 或 Redis 集群缩容)。
- 出现数据丢失或持久化异常。
适用场景
适合正在处理 NoSQL、Kubernetes, SRE, Redis, RabbitMQ 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文深入探讨在生产 Kubernetes 集群中,Redis、RabbitMQ 和 Kafka 常见的可靠性问题,提供从症状、诊断到修复的完整流程,并附上关键命令和安全回滚策略。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。