redis cluster集群搭建

一、官方cluster分区

Redis3.0之后,Redis官方提供了完整的集群解决方案。
方案采用去中心化的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。称为RedisCluster。
Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持
Redis5.0可以直接使用Redis-cli进行集群的创建和管理

二、部署架构

在这里插入图片描述

三、实战

(1)搭建Redis5.0集群,要求三主三从
(2)能够添加一主一从(Master4和Slaver4)
(3)能够通过JedisCluster向RedisCluster添加数据和取出数据

四、环境准备

  1. 根据文章liunx下安装redis将redis编译一下。
  2. 分别创建8个文件夹,在redis-5.0.10/src 下使用命令make install PREFIX=/root/redis/redis-cluster/xxx依次安装8个redis
  3. 修改redis.conf配置文件,相对于一般得配置添加cluster-enable yes即可
  4. 创建start.sh,启动所有的实例,根据你本地实际得情况来创建即可,另外也能再创建一个关闭所有得脚本。最后执行脚本./start.sh,启动所有redis.
    start.sh
    启动结果
  5. 创建Redis集群(创建时Redis里不要有数据),使用命令./redis-cli --cluster create 192.168.192.130:7001 192.168.192.130:7002 192.168.192.130:7003 192.168.192.130:7004 192.168.192.130:7005 192.168.192.130:7006 --cluster-replicas 1创建集群,注意cluster-replicas : 1 的意义:1从机,前三个为主。
    在这里插入图片描述
  6. 命令客户端连接集群./redis-cli -h 127.0.0.1 -p 7001 -c,在任意一个端口都能连接,但是必须加上-c标识才是集群连接模式。
  7. 扩容使用命令./redis-cli --cluster add-node 192.168.72.128:7007 192.168.72.128:7001 前面的ip是新增的节点,后面的是集群中的任意一个节点即可。
  8. 重新分配slots需要执行./redis-cli --cluster reshard 192.168.72.128:7007 ip只要是集群中的节点即可,进入命令后会让选择接收slots的节点。
  9. 为新添加的节点添加从节点需要执行./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave -- cluster-master-id 主节点id

Redis Cluster 常用命令总结

参考文章Redis Cluster 常用命令总结

五、JedisCluster使用

JedisCluster是Jedis根据RedisCluster的特性提供的集群智能客户端。JedisCluster为每个节点创建连接池,并跟节点建立映射关系缓存(Cluster slots)。JedisCluster将每个主节点负责的槽位一一与主节点连接池建立映射缓存。JedisCluster启动时,已经知道key,slot和node之间的关系,可以找到目标节点。JedisCluster对目标节点发送命令,目标节点直接响应给JedisCluster。

如果JedisCluster与目标节点连接出错,则JedisCluster会知道连接的节点是一个错误的节点,此时节点返回moved异常给JedisCluster。JedisCluster会重新初始化slot与node节点的缓存关系,然后向新的目标节点发送命令,目标命令执行命令并向JedisCluster响应。如果命令发送次数超过5次,则抛出异常"Too many cluster redirection!"。
在这里插入图片描述
代码

JedisPoolConfig config = new JedisPoolConfig(); 
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7001)); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7002)); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7003)); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7004)); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7005)); 
jedisClusterNode.add(new HostAndPort("192.168.127.128", 7006)); 
JedisCluster jcd = new JedisCluster(jedisClusterNode, config);
 jcd.set("name:001","zhangfei"); 
 String value = jcd.get("name:001");

搭配springboot使用可以参考文章SpringBoot RedisTemplate 集群配置使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值