Redis集群性能调优与监控
Redis集群性能调优需要从内存、网络、CPU多维度入手,配合完善的监控体系保障集群稳定运行。
内存优化
内存分配策略
Bash
# 设置内存上限
maxmemory 4gb
# 内存回收策略
maxmemory-policy allkeys-lru
# 禁用THP(Transparent Huge Pages)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
对象编码优化
Bash
# hash对象压缩阈值
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# list压缩
list-max-ziplist-size -2
list-compress-depth 0
# set优化
set-max-intset-entries 512
# zset优化
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
内存碎片率
mem_fragmentation_ratio应控制在 1.0-1.5 之间。
网络调优
连接参数优化
Bash
# 最大连接数
maxclients 10000
# 连接超时
timeout 300
# TCP backlog
tcp-backlog 511
# TCP keepalive
tcp-keepalive 300
内核网络参数
Bash
# 增加系统文件描述符限制
ulimit -n 65535
# 内核网络参数调优
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
集群参数调优
集群通信优化
Bash
# 集群节点超时时间(毫秒)
cluster-node-timeout 15000
# 集群节点连接超时
cluster-announce-timeout 3000
# 集群总线带宽限制
cluster-announce-bus-port 0
# 集群从节点有效因子
cluster-replica-validity-factor 10
迁移性能优化
Bash
# 迁移超时
cluster-migration-barrier 1
# 迁移批量大小
cluster-allow-reads-when-down no
延迟监控
延迟监测命令
Bash
# 开启延迟监控
CONFIG SET latency-monitor-threshold 100
# 查看延迟事件
LATENCY LATEST
# 查看延迟历史
LATENCY HISTORY command
# 查看延迟图
LATENCY GRAPH command
关键延迟指标
| 指标 | 说明 | 警戒值 |
|---|---|---|
| latency_percentiles_usec | 命令延迟百分位 | P99 > 10ms |
| instantaneous_ops_per_sec | 即时OPS | 突降注意 |
| total_commands_processed | 总命令数 | 监控趋势 |
| expired_keys | 过期key数量 | 大量过期 |
慢查询分析
慢查询配置
Bash
# 慢查询阈值(微秒)
slowlog-log-slower-than 10000
# 慢查询记录条数
slowlog-max-len 128
慢查询查看
Bash
# 获取慢查询日志
SLOWLOG GET 10
# 慢查询长度
SLOWLOG LEN
# 重置慢查询
SLOWLOG RESET
INFO命令关键指标
内存相关
YAML
used_memory: 已使用内存
used_memory_rss: 系统分配内存
used_memory_peak: 内存峰值
mem_fragmentation_ratio: 内存碎片率
性能相关
YAML
instantaneous_ops_per_sec: 每秒操作数
total_commands_processed: 总处理命令数
rejected_connections: 拒绝连接数
expired_keys: 过期key数量
evicted_keys: 驱逐key数量
集群相关
Bash
cluster_state: 集群状态(ok/fail)
cluster_slots_assigned: 已分配槽位
cluster_slots_ok: 正常槽位
cluster_slots_pfail: 可能故障槽位
cluster_slots_fail: 故障槽位
cluster_known_nodes: 已知节点数
cluster_size: 集群规模
监控工具
Redis Exporter + Prometheus
text
# prometheus.yml
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['redis-exporter:9121']
关键告警规则
text
groups:
- name: redis_alerts
rules:
- alert: RedisMemoryHigh
expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Redis内存使用超过80%"
- alert: RedisClusterDown
expr: redis_cluster_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Redis集群故障"
性能基准测试
使用redis-benchmark
text
# 基准测试
redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000
# 测试特定命令
redis-benchmark -t set,get -n 100000 -c 50
# 测试集群
redis-benchmark -h 127.0.0.1 -p 7000 --cluster -n 100000
生产环境应定期进行基准测试,建立性能基线。
要点总结
- 内存碎片率控制在1.0-1.5,合理设置maxmemory-policy
- 调整内核网络参数,增大连接队列和文件描述符限制
- cluster-node-timeout影响故障检测灵敏度,根据网络环境调整
- 开启latency-monitor监控延迟异常
- 使用Redis Exporter + Prometheus构建完整监控体系
- 定期运行redis-benchmark建立性能基线
📝 发现内容有误?点击此处直接编辑