Redis Cluster集群应用与原理(上)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis Cluster集群应用与原理(上)

与memcached客户端支持分布式方案不同,Redis更倾向于在服务端构建分布式存储

  • Redis分布式集群图1

image.png

  • Redis分布式集群

image.png

Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,没有中心节点,具有线性可伸缩的功能。节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。

在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个hash槽,每个节点上可以存储一个或多个hash槽,也就是说当前Redis Cluster支持的最大节点数就是4096。


Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER

整体设计可总结为:

  • 数据hash分布在不同的Redis节点实例上
  • M/S的切换采用Sentinel
  • 写:只会写master Instance,从sentinel获取当前的master Instance
  • 读:从Redis Node中基于权重选取一个Redis Instance读取,失败/超时则轮询其他Instance;Redis本身就很好的支持读写分离,在单进程的I/O场景下,可以有效的避免主库的阻塞风险
  • 通过RPC服务访问,RPC server端封装了Redis客户端,客户端基于Jedis开发


在数据一致性问题上,Redis没有提供CAS操作命令来保障高并发场景下的数据一致性问题,不过它却提供了事务的功能

Redis的Transactions提供的并不是严格的ACID的事务(比如一串用EXEC提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行)。

但是这个Transactions还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)

Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行


1 数据分布算法

决定了在多master节点时,数据如何分布到这些节点。

  • 自动将数据分片,每个master放部分数据
  • 提供内置的高可用,部分master不可用时,还可继续工作


Redis cluster下,每个Redis要开放两个端口,比如:

  • 一个是6379
  • 另一个就是加10000的端口号16379
    16379端口用于节点间通信,即cluster bus集群总线。


cluster bus的通信,用来故障检测,配置更新,故障转移授权。cluster bus用另一种二进制协议 - gossip,用于节点间高效数据交换,占用更少网络带宽和处理时间。


1.1 hash

计算指定 key 的 hash值,然后对节点数量(3)取模。0、1、2三个结果打到对应mater node。

一个mater宕机,所有请求过来,会发现都基于最新的2个master取模,尝试去取数据。导致大部分请求无法拿到有效缓存,流量涌入DB。


高井发场景 下不可接受。并发下对节点3的流量无法走缓存,导致全部走DB,DB就会被压垮。

任一master宕机,大量数据就需重新计算再写入缓存。

某mater宕机,就导致数据全部失效。全部要重新对剩下2台master取模,再分布到其它节点。


1.2 一致性hash

自动缓存迁移、自动负载均衡。


可能集中在某个hash区间值多,导致大量数据涌入同个master,造成master热点问题,导致性能瓶颈。


同样是计算指定 key 的 hash值,然后用hash值在圆环对应各点(每点都有个hash值)对比,看hash值该落在这圆环的哪个部位。

key落在圆环后,顺时针寻找距离自己最近节点。


一致性hash算法保证任一master宕机,只有之前在那master上的数据会受影响,因为顺时针走,全部在之前master上找不到了。会顺时走到下个master,也找不到。


1/3的流量瞬间涌入DB,重新查询。几乎接近100%流量全部失效。


虚拟节点

给每个master做均匀分布的虚拟节点。

这样在每个区间内,大量数据均匀分布到不同节点内,而非按顺时针顺序,全部涌入同一master。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
61 4
|
4月前
|
NoSQL Redis
Redis 执行 Lua保证原子性原理
Redis 执行 Lua 保证原子性原理
451 1
|
4月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
91 0
|
26天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
40 5
|
1月前
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
44 5
|
3月前
|
缓存 NoSQL Linux
redis的原理(三)
redis的原理(三)
redis的原理(三)
|
2月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
44 2
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
74 1
|
2月前
|
存储 消息中间件 NoSQL
【redis】redis的特性和主要应用场景
【redis】redis的特性和主要应用场景
173 1