文章目录
🐯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实战就到这里了~~如果觉得本文对你有帮助的话记得
点赞
、
收藏
~
版权归原作者 倪N 所有, 如有侵权,请联系我们删除。