0


“Redis代理”之Cluster

文章目录


🐯Redis系列🐯:

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


🐯脚本自动创建演示

XMD经过了

Twemproxy

Predixy

,我真心觉得

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 - 5460
Master[0] -> Slots 0 - 5460
#Master[1]分配的槽位是5461 - 10922
Master[1] -> Slots 5461 - 10922
#Master[2]分配的槽位是10923 - 16383
Master[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实例中都有自己的分区映射关系和其他两台的分区映射关系

在这里插入图片描述

现在有一台客户端想要操作

get key1

操作,直接请求打到

Redis_2

实例上,

Redis_2

进行

hash运算

,算出

hash槽值

8

,不是

自身

槽位

,通过

查询路由

的方式从

其他

机器的

mapping关系

中寻找

8槽

,根据标识得知

8槽

属于

Redis_3

在这里插入图片描述

因此,这时会

返回

给客户端,让客户端

重定向

Redis_3

在这里插入图片描述

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

Redirect

操作的

🐯操作验证

我们用应该用

redis-cli -c

-c

cluster
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:30003
OK

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

127.0.0.1:30003>set k2 aaa
-> Redirected to slot [449] located at 127.0.0.1:30001
OK
127.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:30003
OK
127.0.0.1:30003>set k2 aaa
-> Redirected to slot [449] located at 127.0.0.1:30001
OK
127.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-cli --cluster reshard 127.0.0.1:30001

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

666

在这里插入图片描述

回车

确认,这时他又问你 ”接收节点ID是什么“ ,我们从上面找一个ID传达给他,我们让

30002

收下他的

恩赐

~
在这里插入图片描述

这时他又问你 ”你是想从所有节点都拿一点槽过来,还是只从某一个节点拿“,我们从

30001

拿,所以输入

30001

ID

,然后输入

done

确认执行

在这里插入图片描述

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

yes

继续

在这里插入图片描述

执行完成

在这里插入图片描述

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

redis-cli --cluster info 127.0.0.1:30001

在这里插入图片描述

移动之前

30001

5461

个槽位,现在移动了

666

个槽位给

30002

,所以

30001

移动后为

4795

结果能对上,移动成功~~

🐯结尾语

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

点赞

收藏

~

标签: redis 缓存 java

本文转载自: https://blog.csdn.net/weixin_44977377/article/details/123625923
版权归原作者 倪N 所有, 如有侵权,请联系我们删除。

““Redis代理”之Cluster”的评论:

还没有评论