Redis集群是Redis 3.0引入的集群方案,它采用P2P模型,无中心节点,支持自动故障转移和数据分片。集群中的每个节点可以是主节点或从节点,主节点负责读写,从节点提供高可用。在故障发生时,从节点会选举新的主节点接管服务。搭建Redis集群需要至少3个主节点,每个主节点至少1个从节点,共6个节点。使用redis-cli --cluster create命令初始化集群,指定所有节点IP:端口和权重。
集群搭建步骤
1. 准备6台服务器,安装Redis 5.0+版本。2. 修改redis.conf,启用cluster-enabled yes,cluster-config-file nodes.conf,cluster-node-timeout 15000。3. 启动所有节点。4. 执行redis-cli --cluster create 192.168.1.101:6379 192.168.1.102:6379 ... --cluster-replicas 1。5. 使用redis-cli -c -h 主节点IP -p 6379 -a 密码测试集群状态,cluster info和cluster nodes命令查看信息。
故障切换机制
Redis集群故障切换基于Raft-like算法。当主节点故障,从节点检测到后发起选举,需要超过半数主节点同意才能成为新主。故障检测通过ping/pong心跳,timeout时间由cluster-node-timeout决定。手动故障转移使用cluster failover命令,从节点可强制接管主节点。Sentinel是Redis 2.8引入的高可用方案,支持自动故障转移,但不支持分片存储,仅适用于单机主从复制。
高可用实践
为确保高可用,建议部署3主6从架构,奇数主节点避免脑裂。使用Twemproxy或Codis作为代理分发请求。监控节点使用Prometheus+Grafana,警报cluster_state:fail。数据持久化开启AOF+RDB混合模式。网络隔离主从节点,避免单点故障。定期执行cluster rebalance平衡槽位。
分布式缓存系统搭建
搭建分布式缓存:1. 部署Redis集群。2. 客户端使用JedisCluster或Lettuce连接,自动slot重定向。3. 热点key使用本地缓存如Caffeine降级。4. 实现一致性Hash分片,避免单key过大超过slot限制。5. 运维脚本监控节点健康,自动扩缩容使用cluster meet/addslots。
常见问题处理
集群split-brain:增加cluster-require-full-coverage no。节点下线:cluster forget手动移除。槽位迁移:cluster setslot/importing/migrating。密码认证:CLUSTER SET-CONFIG-EPOCH和CLUSTER MYID设置。
FAQ
Q: Redis集群需要多少节点?
A: 至少3主3从,共6节点。
Q: 如何手动故障转移?
A: 从节点执行redis-cli -c -h 从节点 --cluster failover。
Q: Sentinel和Cluster区别?
A: Sentinel用于单实例HA,Cluster支持分片和自动sharding。
Q: 如何扩容集群?
A: cluster meet添加新节点,然后cluster rebalance重新分配槽。