Redis主要有三种集群模式,分别是:主从复制(Master-Slave Replication)、哨兵模式(Sentinel)和Redis Cluster模式。
主从复制:主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点复制主节点的数据,并且只能处理读操作。当主节点发生故障时,可以将一个从节点升级为主节点,需要手动实现故障转移。
优点:简单易用,适用于读多写少的场景。
缺点:master挂了,需要人工介入让节点恢复或者手动切换一台从节点服务器变成主节点服务器才可以。并且在master宕机时,如果数据没有及时复制到从节点,也会导致数据不一致。
哨兵模式:哨兵模式是在主从复制的基础上加入了哨兵节点,哨兵节点是一种特殊的Redis节点,用于监控主从节点的状态。哨兵节点定期向所有主从节点发送PING命令,如果在指定的时间内未收到响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。当主节点被标记为客观下线时,它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
Cluster模式:它将数据自动分片到多个节点上,每个节点负责一部分数据,每个节点都可以单独对外提供读写服务。Redis Cluster能够自动检测节点的故障,当一个节点失去连接或不可达时,Redis Cluster会从可用的从节点中提升一个新的主节点。
Redis的数据分片是将一个Redis数据集分割成多个部分,分别存储在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上,从而提高Redis集群的性能和可扩展性。
在Redis的Cluster 集群模式中,使用哈希槽(hash slot)的方式来进行数据分片,将整个数据集划分为多个槽,每个槽分配给一个节点。客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作。Redis Cluster还提供了自动故障转移、数据迁移和扩缩容等功能,能够比较方便地管理一个大规模的Redis集群。