详解Redis集群的三种实现方案

admin 2023-11-05 195 阅读 0评论

Redis分布式存储的常见方案有:

1.「主从 (Master-Slave) 模式主从复制,读写分离,数据备份。
2.「哨兵 (Sentinel) 模式一主多从,哨兵监控,自动处理故障,容错和恢复。
3.「 集群 (Cluster) 模式多主多从,数据分片,在线扩容。

Redis集群切片的方式有:
1.「客户端分片」分片逻辑在Redis客户端实现,采用一致性哈希来决定Redis节点。
2.「中间件分片」借助中间件实现Redis节点的路由分派,根据路由规则将请求发送到正确的Redis节点上。

3. 「客户端服务端分片」Redis Cluster模式,客户端采用一致性哈希,服务端提供错误节点的重定向服务。


本文将详细介绍「Redis分布式存储的3种方案和「Redis集群切片的3种常见方式。


么是Redis集群

Redis集群是由多个redis实例组成的集合,将缓存的数据分散到多个redis节点上存储,减轻单个缓存节点的访问压力,达到分流效果,提高了存储容量和吞吐量,提供高可用性和容错恢复能力,实现了水平扩容。

Redis集群的作用和优势

1. 处理大规模数据将数据分散在多个节点上,从而突破单节点内存限制,有效应对数据量的增长和高并发的访问请求。

2. 高可用性当主节点发生故障时,集群会自动选举新的主节点,从而实现故障转移,保证高可用性。

3. 可扩展性:Redis集群可以根据业务需求和系统负载,动态添加或删除节点,实现水平扩展,以适应数据规模的变化。

4. 高性能:Redis集群中的各个节点可以并行处理不同的请求,从而提高系统整体吞吐量和响应速度,适合于高并发访问的场景。

5. 自动故障转移:Redis集群通过哨兵节点监控主节点的健康状态,在主节点故障时,自动选举新的主节点,减少服务中断和数据丢失的风险。


从(Master - Slave)模式

「主从模式的原理」

主从模式是指在Redis集群中有一个主节点(Master)和多个从节点(Slave)。

Master节点负责数据的写操作,Slave节点负责数据的读操作。

通过主从复制,将Master节点的数据变更同步到Slave节点。

「主从模式的优点」

1. 数据备份:通过主从复制,从节点备份主节点的数据,提高数据可靠性。

2. 读写分离:将读操作和写操作分配给不同的节点处理,提高系统稳定性。

3. 提升读取性能:通过多个从节点来分担读操作的压力,提高数据的查询效率。

「主从模式的缺点」

1. 没有容错和恢复的能力存在单点故障:一旦Master节点故障,不会自动选出新的主节点,导致后续所有的写操作直接失败。

2. 可用性低:主节点故障时不能自动实现故障转移,需要人工干预手动切换,故障恢复时间长。

3. 没有实现数据分片无法在线扩容,并发压力受限于单节点服务器的资源配置。

4. 集群中所有节点保存的都是全量数据,浪费内存空间,且数据量过大时严重影响主从同步的速度。

5. 单个主节点承担所有写操作,写操作受单节点性能瓶颈影响。

「主从模式的应用场景」

适用于数据备份、读写分离、对可用性要求不高,小规模数据处理的场景。


兵(Sentinel)模式

「哨兵模式的原理」
哨兵模式是在Redis主从集群的基础上加入了哨兵节点,监控主节点和从节点的状态。当Master节点出现故障时,哨兵节点会自动从剩余的Slave节点中选举出一个新的Master节点,并通知其他Slave节点和客户端。

「哨兵模式的优点」

1. 高可用性:提供故障的自动处理能力。

2. 容灾恢复:在主从模式数据备份的基础上,提供容错和自动恢复机制。

3. 读写分离:通过多个从节点来分担读操作的压力,提升读取性能。

4. 解决了单点故障:监测到master节点故障,会自动从slave节点中选出一个节点将其切换成master节点,在选举结束之前,redis会开启保护机制,禁止写操作,直到新的master节点产生。每个哨兵节点都是一个独立的进程,哨兵节点之间也会互相监控

「哨兵模式的缺点」

1. 依然没有实现数据分片,无法在线扩容,并发压力受限于单节点服务器的资源配置。

2. 每个从节点和主节点的耦合度高,在主节点宕机到重新选举Master的期间,服务不可用。

3. 集群中所有节点保存的都是全量数据,浪费内存空间,且数据量过大时严重影响主从同步的速度。

4. 单个主节点承担所有写操作,写操作受单节点性能瓶颈影响。

「哨兵模式的应用场景」

适用于数据备份、容灾恢复,高可用性、小规模数据处理的场景。



群(Cluster)模式

「Cluster的原理」
在Redis Cluster中,引入slot槽来实现数据分片,slot的整体取值范围是0~16383,每个节点会分配一个slot区间,数据分散在多个节点上。每个分片都是由一个Redis主机和多个从机组成分片和分片之间是相互平行的每个master节点负责维护一部分槽以及槽所映射的键值数据

在Redis Cluster中,数据被分为16384个槽,每个槽存储一部分数据。

数据分片是用CRC16算法对key进行hash操作,哈希计算的结果是16位的哈希值,将哈希值对16384取模,得到槽位编号。当存取Key的时候,根据槽位编号,找到对应的节点进行数据的读写。


「Cluster的优点」

1. 数据分片基于slot槽的数据分片,突破单节点的内存限制,实现更大规模的数据分布式存储。

2. 横向扩展:实现在线动态横向扩缩容。

3. 高可用性:每个分片都是一个主节点对应多个从节点,主从复制,当Master出现故障,会从Slave节点中选举一个新的Master继续提供服务,实现自动故障转移。


「Cluster的缺点」

1. slave节点只是一个冷备节点,用于在主节点故障时接替其角色,不提供分担读操作的压力。

2. 对Redis里面的批量操作指令会有限制。

3. 客户端的实现会更加复杂。


「Cluster的应用场景」

适用于海量数据+高并发+高可用的场景。



 总结

1.主从(Master-Slave)模式适用于数据备份、读写分离、对可用性要求不高,小规模数据处理的场景。不提供容错和恢复功能,主节点故障时需要手动切换。
2.哨兵(Sentinel)模式在主从复制的基础上,提供了故障自动处理的能力,适用于数据备份、容灾恢复、高可用性的场景。没有实现数据分片,无法在线扩容,并发压力受限于单节点服务器的资源配置。
3.集群(Cluster)模式基于slot槽的数据分片,突破单节点的内存限制,实现更大规模的数据分布式存储,提供了高可用性和在线动态横向扩容的能力,提升数据的读写性能,主要针对于海量数据+高并发+高可用的场景。

从集群架构上来说:
哨兵(Sentinel)模式中心化的集群实现方案,一主多从
集群(Cluster)模式去中心化的集群实现方案,多主多从

主从模式和哨兵模式每个节点存储的都是全量的数据,当存储的数据量过大时,就需要对数据进行分片后存储到多个redis实例上。此时就要用到Redis Sharding技术。
如果数据量很大,那么建议就用cluster。数据量不是很大时,使用sentinel就够了。


 Redis集群分片的方式

1.「客户端分片分片逻辑在Redis客户端实现,采用一致性哈希来决定Redis节点。

优点:不依赖于第三方中间件,服务端的Redis实例彼此独立,相互无关联,分片逻辑和路由规则可控。

缺点:这是一种静态的分片方案,增删Redis节点时需要手工调整分片程序,服务端Redis集群拓扑结构有变化时,每个客户端都需要更新调整,运维成本较高。

2.「中间件分片Redis客户端把请求发送到中间件(例如Twemproxy、Codis),借助中间件实现Redis节点的路由分派,根据路由规则将请求发送到正确的Redis节点上。

优点:支持平滑增减Redis实例而无需修改任何的代码。

缺点:每个请求都经过代理才能到达Redis服务器,过程中产生性能损失。

3. 「客户端服务端分片Redis Cluster模式,客户端采用一致性哈希,服务端提供错误节点的重定向服务。

发表评论

快捷回复: 表情:
Addoil Applause Badlaugh Bomb Coffee Fabulous Facepalm Feces Frown Heyha Insidious KeepFighting NoProb PigHead Shocked Sinistersmile Slap Social Sweat Tolaugh Watermelon Witty Wow Yeah Yellowdog
提交
评论列表 (有 0 条评论, 195人围观)