> 文档中心 > 【Redis代理】- Cluster

【Redis代理】- Cluster

文章目录

    • 🐯Redis系列🐯:
    • 🐯脚本自动创建演示
    • 🐯客户端操作
    • 🐯hash计算到重定向
    • 🐯操作验证
    • 🐯还原操作
    • 🐯手动演示
    • 🐯槽位重分配
    • 🐯结尾语

🐯Redis系列🐯:

🐯Redis安装教程(保姆级详细图文)
🐯布隆过滤器安装步骤
🐯小记一手 “Redis持久化机制”
🐯手把手带你实操 RDB & AOF
🐯带你 “亲自体验“ Redis主从复制
🐯“Redis哨兵“一撸到底 ,贼爽~
🐯“Redis代理“之Twemproxy
🐯“Redis代理”之Predixy


🐯脚本自动创建演示

XMD经过了TwemproxyPredixy,我真心觉得Cluster演示写文章来讲操作起来相对友好一点哈,还给提供了自动创建脚本,真的我在写前两篇文章的时候一直觉得运维同学是真的不容易哈,都快给我麻烦哭了,不过好在顶着压力过来了~~~

好了,收住~看看Redis提供的自动创建Cluster的配置文件吧

cd ~/soft/redis-6.0.6/utils/create-cluster
vi create-cluster 

NODES:实例数

REPLICAS:副本数

副本数1实例数6代表一个6个实例,因为每个实例对应一个副本,即为3主3从

推荐公式:Redis总实例数/Redis单实例数+副本数 (6/(1+1)=3)即得到3主3从

在这里插入图片描述

运行配置的6个实例

./create-cluster start

在这里插入图片描述

在6个节点上执行哈希槽分配

 ./create-cluster create
#Master[0]分配的槽位是0 - 5460Master[0] -> Slots 0 - 5460#Master[1]分配的槽位是5461 - 10922Master[1] -> Slots 5461 - 10922#Master[2]分配的槽位是10923 - 16383Master[2] -> Slots 10923 - 16383#30005是30001的副本Adding replica 127.0.0.1:30005 to 127.0.0.1:30001#30006是30002的副本Adding replica 127.0.0.1:30006 to 127.0.0.1:30002#30004是30003的副本Adding replica 127.0.0.1:30004 to 127.0.0.1:30003

🐯客户端操作

当我们使用了Cluster后就不能用普通的客户端去进行数据操作了,因为Redis的槽位被分配到了不同的实例中,当你进行操作的时候,Redis会根据hash算法算出key的hash值,去查找对应的hash槽,找不到就会以报错的形式返回给客户端,告诉客户端应该跳到哪台机器去

在这里插入图片描述

我们通过简单的两个图来了解一下上面描述的概念:

业务层面上进入,Redis Cluster是一套无主模型,客户端可随意连接任何一台机器

🐯hash计算到重定向

有这样三台Redis实例,每台Redis实例中都有自己的分区映射关系和其他两台的分区映射关系

【Redis代理】- Cluster

现在有一台客户端想要操作get key1操作,直接请求打到Redis_2实例上,Redis_2进行hash运算,算出hash槽值8,不是自身槽位,通过查询路由的方式从其他机器的mapping关系中寻找8槽,根据标识得知8槽属于Redis_3

在这里插入图片描述

因此,这时会返回给客户端,让客户端重定向Redis_3

在这里插入图片描述

因此,我们如果还是用老的方式去连接Redis客户端进行操作是无法完成Redirect操作的

🐯操作验证

我们用应该用redis-cli -c-ccluster

redis-cli -c -p 30001

我们这时再重新执行set操作,是会触发Redirected重定向的 跳到30003节点去了

127.0.0.1:30001> set k1 aaa-> Redirected to slot [12706] located at 127.0.0.1:30003OK

我们经过多次尝试,确实会来回重定向进行节点跳转

127.0.0.1:30003> set k2 aaa-> Redirected to slot [449] located at 127.0.0.1:30001OK127.0.0.1:30001> get k1-> Redirected to slot [12706] located at 127.0.0.1:30003"aaa"127.0.0.1:30003> get k2-> Redirected to slot [449] located at 127.0.0.1:30001"aaa"

🐯还原操作

简单体验了一下Redis自带的脚本自动创建的cluster,自动分配hash槽等,玩好了我们就把他还原

./create-cluster stop./create-cluster clean

🐯手动演示

还原后我们自己动手去操作一波试试

首先创建6个Redis实例

redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1

在这里插入图片描述

我们再执行上面的操作试一试行不行

连接到30001

redis-cli -c -p 30001

进行一些列操作,咱们自己手动创建的也是可以实现重定向跳转操作的

127.0.0.1:30001> set k1 aaa-> Redirected to slot [12706] located at 127.0.0.1:30003OK127.0.0.1:30003> set k2 aaa-> Redirected to slot [449] located at 127.0.0.1:30001OK127.0.0.1:30001> get k1-> Redirected to slot [12706] located at 127.0.0.1:30003"aaa"127.0.0.1:30003> get k2-> Redirected to slot [449] located at 127.0.0.1:30001"aaa"

🐯槽位重分配

cluster中还有一个比较有意思的操作:重新分配槽位,可以把一台实例的槽位移到另一台实例,简单演示一下

redis-cli --cluster help

在这里插入图片描述

让他随便连接到一个存活的节点,我们直接用30001演示

首先查看一下槽位分赃情况

redis-cli --cluster info 127.0.0.1:30001

【Redis代理】- Cluster

目前来看比较均匀,现在我们开始进行槽位移动

redis-cli --cluster reshard 127.0.0.1:30001

然后他会问你 “你想移动多少个槽位” ,这时候给他一个具体的值 我们给个666

在这里插入图片描述

回车确认,这时他又问你 ”接收节点ID是什么“ ,我们从上面找一个ID传达给他,我们让30002收下他的恩赐~
在这里插入图片描述

这时他又问你 ”你是想从所有节点都拿一点槽过来,还是只从某一个节点拿“,我们从30001拿,所以输入30001ID,然后输入done确认执行

在这里插入图片描述

执行到一半问题又来了 ”您想继续执行提议的reshard计划吗“ ,yes 继续

在这里插入图片描述

执行完成

在这里插入图片描述

验证一下槽位是不是移动成功了

redis-cli --cluster info 127.0.0.1:30001

在这里插入图片描述

移动之前300015461个槽位,现在移动了666个槽位给30002,所以30001移动后为4795结果能对上,移动成功~~

🐯结尾语

本期Redis代理之Predixy实战就到这里了~~如果觉得本文对你有帮助的话记得点赞收藏~