主从复制模式:
主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题,所以将数据复制多个副本中,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。数据会在一个主节点(master)上进行读写操作,同时会被自动同步到一个或多个从节点(slave)上。从节点通常是只读的,用于提高读取的吞吐量和数据冗余以增强系统的可用性。如果主节点发生故障,需要手动将一个从节点晋升为主节点。主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,可以将一个从节点升级为主节点,实现故障转移(需要手动实现)。
缺点 : 就是不具备故障自动转移的能力,没有办法做容错和恢复。
Sentinel(哨兵)模式:
Sentinel是Redis的高可用性解决方案,它由一个或多个Sentinel实例组成,这些实例可以监视Redis主从集群的健康状况。当Sentinel检测到主节点故障时,它可以自动进行故障转移,将一个从节点提升为主节点,从而实现自动的故障恢复,保证系统的高可用性。
哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的Redis节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。原来的主从架构中,引入哨兵节点,其作用是监控Redis主节点和从节点的状态。每个Redis实例都可以作为哨兵节点,通常需要部署多个哨兵节点,以确保故障转移的可靠性。
哨兵节点定期向所有主节点和从节点发送PING命令,如果在指定的时间内未收到PONG响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
Cluster模式(Redis Cluster):
Redis Cluster是Redis官方提供的分布式集群解决方案,它引入了数据分片(sharding)的概念,能够将数据自动分割并分布到多个节点上,实现了数据的分布式存储和访问。每个节点都是平等的,可以处理读写请求,且具有自动故障转移和重新平衡分区的能力,提高了系统的扩展性和容错性。适用于大规模应用的解决方案,它提供了更好的横向扩展和容错能力。它自动管理数据分片和故障转移,减少了运维的负担。
Redis的数据分片(sharding)是一种将一个Redis数据集分割成多个部分,分别存储在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上,从而提高Redis集群的性能和可扩展性。Redis数据分片的实现方式通常是将数据按照某种规则(例如,key的hash值)分配到不同的节点上。当客户端想要访问某个key时,它会先计算出这个key应该存储在哪个节点上,然后直接连接到该节点进行操作。因此,对于客户端而言,Redis集群就像是一个大型的、统一的数据库,而不需要关心数据的实际分布情况。