redis(9)、redis集群之redis Cluster使用

redis技术目录

 

前提:redis集群分片,目前redis有两类方案

  • 哈希槽(hash slot),代表方案:redis cluster
  • 一致性哈希,代表方案:twemproxy、codis
 本篇是针对redis cluster配置实现,原理会在另一个文章在解析。By haoran-10.iteye.com

 

 
先理解几个关键词:
节点:单个redis运行时,是孤立的,一旦出现故障,最多主从复制时,数据不会丢失,但是造成了redis不可用。redis单机,一个节点。
集群:很多节点通过某种方案联系起来,一起提供redis服务,称为redis集群。单个节点出现故障时,数据会转移(不保证强一致性)到安全的备份节点,提供高可用的redis服务,缺点是不可以使用不支持处理多个              键的命令
分片:redis数据很多时,单个redis放不下,此时redis集群通过分片技术,把数据平均分配到不同的节点。
哈希槽:redis集群通过哈希槽的方式,把数据分配到不同的节点。Redis集群有16384个哈希槽,我们只是使用键的CRC16编码对16384取模来计算一个指定键所属的哈希槽。 
 
 
1、redis节点关键配置
Redis.conf代码   收藏代码
  1. daemonize yes  
  2. pidfile /mytest/redis_dev/9001/redis.pid  
  3. port 9001  
  4. appendonly yes  
  5. appendfsync everysec  
  6. cluster-enabled yes  
  7. cluster-config-file nodes.conf    
  8. cluster-node-timeout 15000  
 
 首次配置,强烈建议使用6个节点,这样更能直观的理解redis集群的配置以及优点所在。
 复制成6分,9001,9002,9003,9004,9005,9006(注意改成不同的端口,不同的pid文件,nodes.conf不要理会,redis会自动创建,自动管理)
2、启动各个节点


 
3、使用redis-trib工具 创建集群 
启动成功之后,使用redis自带的工具创建集群
注,这里要安装ruby等工具
(2)、安装ruby gem
(3)、安装gem redis
安装过程比较简单,略过。


 
 输入"yes",继续

 
哈希槽已经分配到9001,9002,9003节点中。 
4、使用redis-cli测试

 
注意:这里是使用src/redis-cli -c 命令,才能启动客户端集群操作模式
获取操作测试:


 
从数据中可以看到,客户端是从9002端口进入,当输入set age 27 时,是自动转存到9001节点上,
当输入get age 时,也是从9001节点获取数据
 
5、容错处理测试
手动把9001节点给kill 掉

 

 

 
此时继续操作redis集群

 
自动从原先的9001的从节点9004节点(9001为主节点,9004是9001的从节点)中获取数据,说明9004自动转为主节点
 
 
6、增加节点测试
创建9007节点,启动9007
 
并且把9007节点设为9004的从节点
Java代码   收藏代码
  1. src/redis-trib.rb add-node --slave 127.0.0.1:9007 127.0.0.1:9004  
 
从输出结果中,可以看到9007做为9004的一个复制节点,也就是从节点。
 
 
7、增加一个主节点,重新分片集群
Java代码   收藏代码
  1. redis-trib.rb reshard 127.0.0.1:9008  
 主要是把哈希槽重新分配 
 
8、java 客户端 
貌似只有使用sharedjedis 才可以,spring-data-redis还不支持redis新的集群特性,不知道是不是姿势不对。
Java代码   收藏代码
  1. package wang.conge.init;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import redis.clients.jedis.HostAndPort;  
  7. import redis.clients.jedis.JedisCluster;  
  8.   
  9. public class SharedRedisClient {  
  10.     public static void main(String[] args) {  
  11.         Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();    
  12.         jedisClusterNodes.add(new HostAndPort("127.0.0.1"9001));    
  13.           
  14.         JedisCluster jedis = new JedisCluster(jedisClusterNodes);  
  15.           
  16.         jedis.set("nginx""yes");  
  17.         jedis.set("tomcat""yes");  
  18.         jedis.set("keepalived""yes");  
  19.         jedis.set("vip""yes");  
  20.         jedis.set("redis""yes");  
  21.         jedis.set("mysql""yes");  
  22.           
  23.         String key = jedis.get("redis");  
  24.         System.out.println(key);  
  25.     }  
  26. }  
 
9、小结
redis官方提供的集群方案配置太繁琐了,不过性能上也比较强悍,公司还没用到生产,拭目以待吧。

from:  http://haoran-10.iteye.com/blog/2263513



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值