redis集群篇二:redis5.x版本集群分片

5 篇文章 0 订阅
5 篇文章 0 订阅


redis安装目录下有个util文件加下,参看readme
在这里插入图片描述

配置以及启动集群

redis本身提供了集群的脚本,按提示启动即可

1、启动集群

进到util路径下,按readme提示,这里修改脚本为6个实例,1个从slave,即搭建3套主从,执行脚本./create-cluster start
在这里插入图片描述
节点设置6个,从节点1个,表示 6/(1从+1主) 共3套主从
,你也可以根据自己的需要去调整在这里插入图片描述

2、分配槽点

执行 ./create-cluster create,会展示给这6个实例预分配插槽的明细,点击回车进行槽点分配
在这里插入图片描述

显示6个实例上,通过hash插槽预分配情况
1 、槽点分配到3个主节点上,达到了数据分片,解决了redis单机容量问题,可以理解为扩容了,每个主节点存的数据都不一样
2、从节点复制主节点数据,满足高可用,避免了单机故障问题,本次搭建基于一台机器多个端口,工作中可把主从节点分配到不同的机器
3、显示主从节点的ip和端口,主节点对应的槽点区间以及个数,从节点追随主节点,以及分别会给主从节点生成唯一的id.

输入yes就进行了槽点分配,同样展示主从关系,主节点信息,分配槽点区间以及槽点个数,从节点追随哪个主节点都会有展示。在这里插入图片描述

3、搭建完毕,进行测试

集群客户端的连接是有讲究的,如果你使用正常的连接,不能设定值,不信你瞧:

[root@localhost create-cluster]# redis-cli -p 30001
127.0.0.1:30001> set a 11
(error) MOVED 15495 127.0.0.1:30003
127.0.0.1:30001> 

正确的客户端连接方式要加上集群cluster的缩写 c,redis-cli -c -p 30001

[root@localhost create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> set a 111
-> Redirected to slot [15495] located at 127.0.0.1:30003
OK
127.0.0.1:30003> get a
"111"
127.0.0.1:30003> set k1 asdfasdf
OK
127.0.0.1:30003> get k1
"asdfasdf"
127.0.0.1:30003> set asd asdf1234325345435645
-> Redirected to slot [7539] located at 127.0.0.1:30002
OK
127.0.0.1:30002> get asd
"asdf1234325345435645"
127.0.0.1:30002> 

观察之后,你发现没我登录的命名是30001,然鹅赋值的时候,却重新导向了30003的主节点,就是当前连接变成了连接30002的节点,并且我直接获取a还能获取到刚set的值。好玩儿不?

同样我又给k1设定了值,直接就在本机上,然后给asd设定值,结果又跳到了30002的主节点,再次在30002对应主节点的客户端获取asd,仍然能获取到数据。

集群模式下,数据分散存储,redis不支持事务。


127.0.0.1:30002> WATCH k2
-> Redirected to slot [449] located at 127.0.0.1:30001
OK
127.0.0.1:30001> MULTI
OK
127.0.0.1:30001> k2 3333
(error) ERR unknown command `k2`, with args beginning with: `3333`, 
127.0.0.1:30001> set k2 3333
QUEUED
127.0.0.1:30001> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:30001> get k2
"2"  -- 不是3333,也说明了事务没有执行成功

redis提供了一个功能,就是如果你是具有相同特征{}的key可以分配到同一台机器上,这样就支持事务啦,比如如下操作

127.0.0.1:30003> MULTI  -- 开启事务
OK
127.0.0.1:30003> set {k1}11 11  
QUEUED
127.0.0.1:30003> set {k1}22 22
QUEUED
127.0.0.1:30003> EXEC
1) OK
2) OK

在30003做缓存,只要有带{k1}表示的key,就会一直累积命令,执行exec的时候,就会提交。
所以redis集群情况下,还要保持支持事务,可以采用这种人为管理数据落到同一台机器的方法。(eg: {}这种相同表示的key都会落在一台机器上)

4、结束

执行./create-cluster stop
在这里插入图片描述

5、清理

redis启动之后,会把许多的日志、集群各节点配置文件以及持久化数据的文件都生成到本路径下 在这里插入图片描述
执行命令清除这些文件: ./create-cluster clean
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值