redis高可用方案

文章介绍了Redis的三种高可用方案:1)主从模式配合哨兵系统实现故障转移和监控;2)RedisCluster通过槽分区实现分布式数据存储和高可用;3)RedisSharding是早期的客户端分片策略,简单但不支持动态扩展。哨兵模式确保集群稳定性,但不保证数据零丢失,RedisCluster则提供无中心架构和动态扩容,但运维复杂。RedisSharding易于扩展但客户端需管理分片。
摘要由CSDN通过智能技术生成

redis高可用方案

1. 主从模式

数据从一个主节点复制到一个或多个从节点。主节点处理数据的写入和查询操作,而从节点则复制主节点的数据,并可以处理读查询操作,以此来分担主节点的读负载。

2. 哨兵模式

sentinel ,哨兵是 redis 集群中非常重要的一个组件,主要有以下功能:
  • 集群监控:负责监控 redis master slave 进程是否正常工作。
  • 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
  • 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
  • 配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
  • 故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举,即主观下线的判断。
  • 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的。
  • 哨兵通常需要 3 个实例,来保证自己的健壮性。
  • 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。
  • 对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。

3. Redis Cluster

Redis Cluster 是一种服务端 Sharding 技术 3.0 版本开始正式提供。
采用slot()的概念,一共分成16384 个槽将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行。

特点

  1. 数据分片:Redis Cluster将数据自动分片到多个节点上,每个节点负责一部分数据,从而实现了数据的分布式存储。
  2. 高可用性:Redis Cluster采用主从复制模式,每个分片都有一个主节点和多个从节点。当主节点故障时,Redis Cluster会自动从从节点中提升一个新的主节点,确保服务的高可用性。
  3. 负载均衡:客户端可以通过任意节点访问Redis Cluster,Redis Cluster会自动将请求转发到正确的节点上,实现了负载均衡。
  4. 自动故障转移:Redis Cluster能够自动检测节点的故障,并进行故障转移,减少了运维的负担。
方案说明
  • 根据数据的key进行哈希运算,并将哈希结果对16383取余,以确定数据应该存储在哪个槽中,默认分配了16384 个槽位。
  • 每份数据分片会存储在多个互为主从的多节点上
  • 数据写入先写主节点,再同步到从节点(支持配置为阻塞同步)
  • 同一分片多个节点间的数据不保持强一致性
  • 读取数据时,当客户端操作的key没有分配在该节点上时,redis会返回转向指令,指向正确的节点。
  • 扩容时需要需要把旧节点的数据迁移一部分到新节点。
redis cluster 架构下,每个 redis 要放开两个端口号,比如一个是 6379 ,另外一个就是 加 1w 的端 口号,比如 16379
16379 端口号是用来进行节点间通信的,也就是 cluster bus 的通信,用来进行故障检测、配置更新、 故障转移授权。 cluster bus 用了另外一种二进制的协议, gossip 协议,用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。
优点
  • 无中心架构,支持动态扩容,对业务透明
  • 具备Sentinel的监控和自动Failover(故障转移)能力
  • 客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  • 高性能,客户端直连redis服务,免去了proxy代理的损耗
缺点
  • 运维也很复杂,数据迁移需要人工干预
  • 只能使用0号数据库
  • 不支持批量操作(pipeline管道操作)
  • 分布式逻辑和存储模块耦合等

4. Redis Sharding

Redis ShardingRedis Cluster出来之前,业界普遍使用的多Redis实例集群方法。

其主要思想是采用哈希算法将Redis数据的key进行散列,通过hash函数,特定的key会映射到特定的Redis节点上。

Java redis客户端驱动jedis,支持Redis Sharding功能,即ShardedJedis以及结合缓存池的 ShardedJedisPool。

优点
优势在于非常简单,服务端的Redis 实例彼此独立,相互无关联,每个 Redis实例像单服务器一样运行,非常容易线性扩展,系统的灵活性很强。
缺点
由于 sharding 处理放到客户端,规模进一步扩大时给运维带来挑战。
客户端 sharding 不支持动态增删节点。服务端 Redis实例群拓扑结构有变化时,每个客户端都需要更新调整。连接不能共享,当应用规模增大时,资源浪费制约优化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值