Redis 集群原理解析

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
全局流量管理 GTM,标准版 1个月
简介: Redis 集群原理解析

概述

Redis集群是redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能

一 节点

一个Redis集群由多个节点组成,最初他们都是相互独立的,他们都处于一个只包含自己的集群当中,但是要形成一个真正可用的集群,就必须将各个节点联系起来,构成一个包含多个节点的集群

连接各个节点通过 CLUSTER MEET 命令

连接成功后就可以将对方节点拉到自己所在的集群中,连接页可以称之为握手。节点的状态在redis中是通过clusterNode对象进行保存的

二 槽指派

Redis集群通过分片的方式来保存数据库中的键值对:集群中的整个数据库被分为16384个槽,数据库中的每个键都属于16384个槽中的其中一个,集群中的每个节点都可以处理0个或者最多16384个槽

当数据库中的16384个槽都有节点在处理时,集群处于上线状态,否则处于下线状态

通过 CLUSTER ADDSLOTS 命令,可以进行节点的槽指派

槽指排信息会记录在clusterNode对象的slots和numslot属性上。

当设置已经存在的数据,如 set msg "hello world"时,集群会先计算出msg属于哪个槽,然后判断槽属于哪一个节点,如果当前节点不是槽所在的节点,那么会返回moved错误,指引节点转向正在负责这个槽的节点进行数据的处理

三 重新分片

Redis的重新分片可以将任意数量已经指派给某个节点的槽改为指派给另一个节点,并且相关节点的键值对也移动到另一个节点

重新分片可以在线上进行,集群不用下线,并且源节点和目标节点都可以继续执行命令请求

四 ASK错误

当迁移过程中可能会发生错误,访问源节点时数据其实已经迁移到了目标节点,这时候会发出ask错误,并将请求指向目标节点

五 复制和故障转移

集群中的节点分为主节点和从节点,其中主节点复杂处理槽,从节点用于复制某个主节点,例如 7000,7001,7002为3个主节点,将7004,7005设置到集群里,添加为从节点。

集群各个节点会互相发送ping命令,来互相发现对方是不是存于下线状态,clusterNode中的flags记录了节点的状态,分为三个在线状态,疑似下线状态,下线状态,当半数以上负责处理槽的主节点报告某一主节点为疑似下线状态,那么这个主节点就会被标记为已下线。

六 选取新的主节点

当一个主节点下线了,那么剩下的主节点会进行投票给从节点,从从节点中选择一个新的主节点,当一个从节点获取到的票数大于N/2+1时,这个从节点就会晋升为主节点。这里要说一下,部署4个主节点和部署5个主节点在投票时其实是一样的,因为他们都是需要3张选票才能推选谁是主节点。

相关实践学习
基于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
相关文章
|
7天前
|
存储 NoSQL Java
深入理解Redis数据类型Hashes原理
本文深入分析了Redis中的hashes数据类型,这是一种用于存储行记录的数据结构,允许一个key下存储多条记录。
深入理解Redis数据类型Hashes原理
|
7天前
|
存储 NoSQL 算法
深入理解Redis分片Cluster原理
本文深入探讨了Redis Cluster的分片原理,作为Redis官方提供的高可用性和高性能解决方案,Redis Cluster通过数据分片和横向扩展能力,有效降低单个主节点的压力。
深入理解Redis分片Cluster原理
|
7天前
|
存储 NoSQL 算法
深入理解Redis数据类型Zset原理
本文深入探讨了Redis中的Zset(有序集合)数据类型,它是一种可以存储排序功能的集合,其中每个元素都具有一个浮点型的score属性,用于根据score进行排序。
深入理解Redis数据类型Zset原理
|
3天前
|
域名解析 缓存 网络协议
DNS解析过程原理!
DNS解析过程原理!
|
4天前
|
存储 缓存 NoSQL
Redis底层原理剖析
Redis是一个开源的使用ANSIC语言编码的、支持网络、可以基于内存的可持久化的日志型、Key-Value数据库,并且提供多种语言的API。
15 1
|
7天前
|
监控 NoSQL 算法
深入理解Redis哨兵模式原理
该文章讨论了Redis Sentinel模式的原理及其在Redis高可用性中的角色。
深入理解Redis哨兵模式原理
|
7天前
|
消息中间件 存储 缓存
深入理解Redis集群主从复制原理
该文章主要探讨了Redis集群中的主从复制原理,包括为何需要主从复制、配置方法、复制流程以及一些高级特性。
深入理解Redis集群主从复制原理
|
7天前
|
存储 缓存 NoSQL
深入理解Redis数据类型String原理
本文深入探讨了Redis中String数据类型的实现原理和使用场景,基于Redis 5.0版本进行分析。
深入理解Redis数据类型String原理
|
12天前
|
域名解析 负载均衡 网络协议
【域名解析DNS专栏】DNS解析中的Anycast技术:原理与优势
在互联网中,DNS将域名转换为IP地址至关重要。Anycast技术通过将同一IP地址分配给多台地理上分散的服务器,确保客户端总能连接到最近且最轻载的服务器,从而加速DNS解析、实现负载均衡、提升抵御DDoS攻击的能力及服务高可用性。通过动态路由协议如BGP实现,Anycast极大地增强了DNS系统的性能和稳定性。
34 2
|
3天前
|
存储 缓存 NoSQL
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决

热门文章

最新文章

推荐镜像

更多