Redis集群模式主要有 主从复制、哨兵模式 和 集群(Cluster)模式,以下是它们的大致原理介绍:
一、主从复制
1、数据同步:主节点负责处理写操作,将数据更新记录在内存中,并通过复制命令将写操作同步到从节点。从节点则定期向主节点发送请求,获取最新的数据更新。
2、读负载均衡:多个从节点可以分担读请求,提高系统的读性能。应用程序可以根据负载情况,将读请求分发到不同的从节点上。
二、哨兵模式
1、监控:哨兵节点会定期向主节点和从节点发送心跳包,以检测它们的运行状态。
2、自动故障转移:当主节点出现故障时,哨兵会选举一个从节点晋升为主节点,并让其他从节点指向新的主节点。同时,哨兵会通知应用程序更新主节点的地址。
三、集群(Cluster)模式
1、数据分片:将数据按照一定的规则分布在多个节点上,每个节点负责存储一部分数据。Redis集群使用哈希槽(Hash Slot)来分配数据,集群中共有16384个哈希槽,通过算法对客户端请求的key计算出哈希值,再根据哈希值对16384取模,得到该键所属的哈希槽从而落到对应的节点上。
2、故障转移:当某个主节点出现故障时,集群会自动检测并通过选举机制从其他正常的从节点中选择一个晋升为主节点,以保证集群的高可用性。
3、节点通信:节点之间通过 gossip 协议进行通信,互相交换集群的状态信息,包括节点的存活状态、哈希槽的分配情况等。
4、动态扩展:可以方便地向集群中添加新的节点,通过重新分配哈希槽,将数据从现有节点迁移到新节点上,实现集群的水平扩展,提高集群的存储和处理能力。
注意和说明:
【1】redis cluster集群模式不支持多数据库(只能使用db0)
【2】发布/订阅功能跨节点工作但不保证可靠性
【3】虽然失去多数据库支持,但集群提供:
高并发:提升吞吐量,可支撑百万级QPS
高用性:自动故障转移