各位与Redis故障斗智斗勇的消防员们!今天我们要把"事后浇油"的救火模式,升级为"未雨绸缪"的防火战略——从天天熬夜处理OOM的焦头烂额,到喝着咖啡看监控曲线的气定神闲!准备好迎接运维の哲学蜕变了吗? 🧯→🛡️
第一章:救火队员の应急宝典
1. 内存爆炸紧急制动
# 三步急救法:
1. redis-cli -a your_pass info memory | grep used_memory_human # 确认内存用量
2. redis-cli -a your_pass --bigkeys # 揪出内存杀手
3. redis-cli -a your_pass MEMORY PURGE # 碎片整理(4.0+版本)
# 终极杀招(慎用!):
redis-cli -a your_pass FLUSHDB # 删库跑路快捷键
2. 主从断裂の缝合术
# 从节点重同步指南:
1. 主节点执行:redis-cli -a your_pass CLIENT PAUSE 5000 # 暂停写入5秒
2. 从节点执行:redis-cli -a your_pass SLAVEOF NO ONE # 自立为王
3. 重新认主:SLAVEOF master_ip master_port
3. 连接池泄漏の止血方案
# 查看客户端列表:
redis-cli -a your_pass CLIENT LIST
# 按IP封杀异常连接:
redis-cli -a your_pass CLIENT KILL addr 1.2.3.4:56789
# 限制新连接:
redis-cli -a your_pass CONFIG SET maxclients 500
第二章:防火专家の防御矩阵
1. 监控预警体系
# Prometheus告警规则示例:
- alert: Redis内存核爆预警
expr: redis_memory_used_bytes / redis_maxmemory > 0.8
for: 5m
labels:
severity: critical
annotations:
summary: "Redis内存使用超过80%,立即检查!"
- alert: 主从同步延迟
expr: redis_slave_repl_offset - redis_master_repl_offset > 1000000
for: 10m
2. 自动化运维机器人
# 自动清理过期Key脚本:
import redis
r = redis.Redis(...)
while True:
# 随机扫描1000个Key,清理已过期的
r.execute_command("SCAN", "0", "COUNT", 1000, "TYPE", "string")
expired = [key for key in keys if r.ttl(key) == -1]
if expired:
r.delete(*expired)
time.sleep(3600) # 每小时运行一次
3. 混沌工程防火演习
# 使用redis-causal工具模拟故障:
# 网络延迟
redis-causal latency add --node redis-node1 --latency 500ms
# 数据包丢失
redis-causal loss add --node redis-node2 --percent 30
# 自动验证集群容错能力
第三章:高可用架构の铜墙铁壁
1. 哨兵模式部署模板
# sentinel.conf核心配置:
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 至少部署3个哨兵形成投票机制
2. Cluster集群运维心法
# 节点管理三连:
1. 添加新节点:redis-cli --cluster add-node new_ip:port existing_ip:port
2. 数据迁移:redis-cli --cluster reshard existing_ip:port
3. 故障替换:redis-cli --cluster replace-node dead_node_id new_node_ip:port
3. 云原生防护罩(K8s版)
# Redis StatefulSet配置要点:
livenessProbe:
exec:
command: ["redis-cli", "ping"]
initialDelaySeconds: 30
readinessProbe:
exec:
command: ["redis-cli", "--cluster", "check", "${CLUSTER_IP}:6379"]
# 使用Local PV持久化数据
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
storageClassName: local-storage
第四章:运维文化の终极进化
1. 变更管理三板斧
- 预发布环境:所有配置变更先在沙箱测试
- 灰度发布:逐个节点滚动更新配置
- 回滚方案:准备秒级回滚脚本,例如:
#!/bin/bash
# 回滚Redis配置
scp redis.conf.bak redis@production:/etc/redis/redis.conf
systemctl restart redis
2. 知识库建设模板
## 事故复盘报告模板
**故障现象**:
- 时间:2023-08-15 02:00
- 影响:Redis集群主节点OOM
**根本原因**:
- 未设置maxmemory导致内存无限增长
- 大Key未拆分(某个Hash Key达到500MB)
**改进措施**:
- [x] 所有环境配置maxmemory
- [x] 增加每日大Key扫描任务
3. 定期维护日历
任务 | 频率 | 执行方式 |
---|---|---|
内存碎片整理 | 每周 | 自动脚本 + 人工确认 |
备份文件校验 | 每天 | 定时任务 + 报警 |
安全漏洞扫描 | 每月 | 漏洞扫描工具 |
故障演练 | 每季度 | Chaos Engineering工具 |
终极奥义:
最好的故障处理,是让故障根本没有机会发生!
(但永远要准备好最坏的打算——定期备份!)