redis安装目录下有个util文件加下,参看readme
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200804133454755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE3MDMzNTc5,size_16,color_FFFFFF,t_70)
配置以及启动集群
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