2023-12-03 00:00:04
Redis的集群模式主要有以下五种:
主从复制(Master-Slave Replication)
主从复制通过Slave节点主动发送SYNC命令实现数据同步。Master收到命令后,后台执行持久化并收集所有修改命令,完成后将完整数据库文件发送至Slave。Slave存盘加载后,Master持续推送新命令以保持同步。若连接中断,重连后会自动触发全量同步。配置时需在Slave节点设置slaveof masterip masterport,若启用密码验证还需配置masterauth master-password。该模式无法水平扩容,且高可用性受Master内存限制。
哨兵模式(Sentinel)
哨兵模式自Redis 2.8版本稳定后,通过独立进程监控集群状态。其核心功能包括:
Redis Cluster集群模式
Redis Cluster是官方提供的服务端分片技术(3.0版本正式支持),采用无中心架构,所有节点互联。数据分片基于哈希槽(slot),共16384个槽位。客户端访问时,Redis通过CRC16算法计算key的哈希值,并对16384取模,定位到对应槽位所在的节点。该模式支持自动故障转移和水平扩容,但需客户端兼容集群协议。
Jedis Sharding集群(客户端分片)
Jedis Sharding通过客户端实现分片,采用一致性哈希算法(MURMUR_HASH)将key映射到节点。为减少节点增减时的数据迁移,每个物理节点虚拟化为160个虚拟节点(可按权重调整)。此外,支持keyTagPattern模式,允许通过key的部分字段(如用户ID)将关联数据分配到同一节点,避免跨节点访问。该模式在Redis Cluster出现前广泛使用,但扩容仍需重启客户端。
中间件代理模式
通过代理层(如Twemproxy、Codis、Nginx)实现分片。代理接收客户端请求后,根据key计算哈希值并路由至对应Redis节点。例如,Codis将数据分散到多个Redis组,每组包含Master和Slave,支持动态扩容和故障转移。该模式解耦了客户端与集群,但代理可能成为性能瓶颈。