Redis Cluster模式与优化
Redis Cluster机制
Redis Cluster模式通过分布式架构解决高可用性和性能扩展问题。集群至少需要6台服务器,自动分配master和slave角色。数据存储基于16384个hash槽,每个槽约512KB(可调整)。master节点负责写入数据,slave节点同步数据并提供读服务。master节点间进行健康检查,当master故障时,其slave中数据最接近的节点会晋升为新master。
Hash槽分配
集群创建时,hash槽由master节点均分。例如3个master节点时:
- master01:0~5460
- master02:5461~10922
- master03:10923~16383
面试常见问题
- 集群原理:分布式hash槽与故障转移机制
- 服务器数量:master节点需为奇数,至少3台(总节点建议6台)
- 部署方式:通过
redis-cli指定集群IP和副本数量 - 与哨兵模式区别:Cluster同时扩展读写性能,哨兵仅保证高可用
Redis优化策略
内存管理
- 定期执行
MEMORY PURGE回收内存碎片 - 调整
maxmemory-policy选择合适淘汰策略(如volatile-lru)
持久化优化
- RDB:调整
save阈值(如save 900 1)并启用rdbcompression - AOF:使用
auto-aof-rewrite-percentage减少重写频率
故障预防
- 缓存穿透:布隆过滤器拦截无效请求
- 缓存击穿:互斥锁重建热点数据
- 缓存雪崩:随机过期时间+多级缓存
ELK日志分析系统
核心组件
- Elasticsearch:分布式搜索与存储
- Logstash:日志收集与处理管道
- Kibana:数据可视化平台
部署流程
- Elasticsearch集群:配置至少2节点(如es01、es02),确保
cluster.name一致 - Logstash:配置输入(如文件路径)、过滤器(如grok解析)、输出(到ES)
input { file { path => "/var/log/nginx/access.log" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["es01:9200"] } } - Kibana:配置
elasticsearch.hosts指向ES集群,通过5601端口访问
服务器规划示例
- 192.168.110.129:ES01 + Nginx + Logstash(≥5GB内存)
- 192.168.110.130:ES02
- 192.168.110.131:Kibana
日志类型支持
- 系统日志(/var/log/messages)
- Nginx访问/错误日志
- 自定义日志(如Log4j、慢查询日志)需通过grok或正则解析
