Redis集群建立过程

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

CLUSTER info:查看集群的状态

CLUSTER NODES:查看所有节点信息

A.节点之间建立连接

CLUSTER MEET [node_ip] [node_port]
复制代码

节点A:127.0.0.1 7000

节点B:127.0.0.1 7001

1.客户端连接上节点A,并在节点A上执行命令CLUSTER MEET 127.0.0.1 7001,节点A先存储该节点数据。

2.根据该命令,节点A根据命令向节点B发送meet消息。

3.节点B接收到节点A的meet消息后,存储节点A的信息,并回复pong消息证明自己的存在

4.节点A接收到pong的回复消息后,回复ping消息告知节点B已经接收到节点B的回复消息

B.设置槽位

CLUSTER ADDSLOTS [slot1]...
复制代码

当16384个槽位全部分配完毕后,CLUSTER info查看集群状态为ok,各节点信息可通过CLUSTER NODES查看

至此,节点A会将自己所分配的槽位信息通过消息通知其他节点,其他节点同样也会通过消息把自己所分配的槽位通知集群内的节点

C.重新分片

# 把指定的槽位迁移往目标节点
CLUSTER SETSLOT [slot] MIGRATING [node_ip] [node_port]
# 把指定的槽位从目标节点导出
CLUSTER SETSLOT [slot] IMPORTING [node_ip] [node_port]
复制代码

无论是新增节点还是删除节点,集群的槽位分配由以上两个命令控制。

在槽位分片的过程中,如果客户端请求通过CRC16(key)到槽位所在的节点,如果这个槽位正好处于迁移过程中,那么当前节点会检查对应的key是否已经被迁移出去。

如果key没有被迁移出去,那么直接处理;

如果key被迁移出去,那么会产生一个ASK错误,告知客户端应该向哪个目标节点请求对应的key;此时客户端需要向目标节点发送ASKING给真正的目标节点请求才能处理成功。否则就会产生MOVED错误

D.故障转移

【节点下线标准】

1.集群中每个节点都会向其他节点发送PING消息,用于检测对方是否在线。

2.一旦某一个节点没有在规定的时间内回复消息,那么就会被暂定为主观下线状态

3.集群中各节点间又会同步节点下线信息,如果在一个集群中,半数以上的主节点都判定某个主节点为疑似下线,那么这个主节点就被标记为【客观下线】

【故障转移过程】

当从节点发现正在复制的主节点已经客观下线后,开始进行故障转移;

1.选举新的主节点。

参与竞争的从节点向所有具有投票权的主节点广播消息,让对方投自己一票,如果获取的票数大于一半的话,那么该从节点就被选举为新的主节点。如果在这轮选举中没有任何从节点得票数能够超过一半,那么重新开始下一轮投票。

2.被选举出来的从节点执行SLAVEOF no one命令,让自己成为master节点

3.新的master节点会把之前主节点的槽位指向自己

4.最后向集群中广播消息,告知其他节点,自己已经完成了从节点转换为主节点的过程了

消息

【MEET消息】

使用该消息是为了是目标节点加入集群。如果目标节点还有从节点,那么从节点也会加入集群。

【PING消息】

集群中各节点会每隔一秒就会发送ping消息来检查对方是否在线。如果在一定时间内没有得到回复,那么就会标记对方为主观下线状态,当一定数量(超过半数)的节点任务目标节点为主观下线的话,那么就判定该节点为客观下线,进入故障转移阶段。

【pong消息】

用于回复MEET消息或PING消息。在集群故障转移完毕的时候,通过广播PONG消息告知其他节点已经完成故障转移。

【FAIL消息】

当节点A发现节点B在一定时间内没有回复自己的PING消息时,将节点B置为主观下线状态,并向集群广播关于节点B的FAIL消息


相关实践学习
基于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
相关文章
|
4月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
112 0
|
5月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
120 4
|
5月前
|
监控 NoSQL 算法
手把手教你如何搭建redis集群(二)
手把手教你如何搭建redis集群(二)
380 1
|
5月前
|
存储 NoSQL 容灾
手把手教你如何搭建redis集群(一)
手把手教你如何搭建redis集群(一)
205 1
|
4月前
|
存储 NoSQL 算法
Redis 集群模式搭建
Redis 集群模式搭建
90 5
|
4月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
3月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
121 0
|
4月前
|
缓存 NoSQL Java
Redis Spring配置集群
【7月更文挑战第5天】
77 10