ITPub博客

首页 > 数据库 > NoSQL > redis-cluster体验之初步功能测试

redis-cluster体验之初步功能测试

原创 NoSQL 作者:wangwenan6 时间:2015-09-12 17:16:07 0 删除 编辑
联动帖:http://blog.itpub.net/29510932/viewspace-1788524/

这是一篇很简短的博文

-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------

目的:联动帖已经搭建好了cluster的环境,写一个cluster的测试示例来简单验证一下cluster的功能

结果:等待详细评估以后,再考虑在简单的业务上进行生产使用

过程:

使用jedis-2.7.3和commons-pool2,尽量使用最新版

代码

点击(此处)折叠或打开

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import redis.clients.jedis.HostAndPort;
  4. import redis.clients.jedis.JedisCluster;
  5. public class jedis
  6. {
  7.     public static void main( String[] args )
  8.     {
  9.         Set<HostAndPort> clusterNodes = new HashSet<HostAndPort>();
  10.         // 这里只需要列出集群中的一个节点
  11.         // JedisCluster 会自行通过cluster nodes来获取其他的集群节点
  12.         clusterNodes.add(new HostAndPort("10.16.68.183", 7000));
  13.         /*
  14.         clusterNodes.add(new HostAndPort("10.16.68.183", 7001));
  15.         clusterNodes.add(new HostAndPort("10.16.68.183", 7002));
  16.         clusterNodes.add(new HostAndPort("10.16.68.183", 7003));
  17.         clusterNodes.add(new HostAndPort("10.16.68.183", 7004));
  18.         clusterNodes.add(new HostAndPort("10.16.68.183", 7005));
  19.         clusterNodes.add(new HostAndPort("10.16.68.183", 7006));
  20.         clusterNodes.add(new HostAndPort("10.16.68.183", 7007));
  21.         */
  22.         JedisCluster cluster = new JedisCluster(clusterNodes,3000,1000);//cluster节点,超时时间,最大重定向数
  23.         // set/get试验
  24.         /*
  25.         cluster.set("cluster test", "hello jedis cluster!");
  26.         String value = cluster.get("foo");
  27.         System.out.println("foo = " + value);
  28.         */
  29.         cluster.incr("counter");
  30.         System.out.println("counter = " + cluster.get("counter"));
  31.         cluster.incr("counter");
  32.         System.out.println("counter = " + cluster.get("counter"));
  33.         // get cluster nodes
  34.         System.out.println("------- cluster nodes --------");
  35.         /*
  36.         Map<String, JedisPool> nodes = cluster.getClusterNodes();
  37.         Iterator<Map.Entry<String, JedisPool>> iterNodes = nodes.entrySet().iterator();
  38.         while (iterNodes.hasNext()) 
  39.         {
  40.             Map.Entry<String, JedisPool> entry = iterNodes.next();
  41.             Jedis jedis = entry.getValue().getResource();
  42.             System.out.println("============");
  43.             System.out.println(entry.getKey() + "\n" + jedis.info());
  44.         }
  45.         // 循环结束
  46.         System.out.println("------- end --------");
  47.         */
  48.         cluster.close();
  49.     }
  50. }


红色字体标出了与普通redis不同的地方,一部分特性也在代码中已注释标明,简单看了一下cluster的函数列表,基本上单点redis的命令都支持了,接下来记录一部分redis-cluster使用过程已经发现的问题

1.创建cluster Node的时候,或者是操作cluster Node的时候,出现如下错误

redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirections?
解决办法:
a.在创建cluster的时候,带上超时时间和最大重定向数;
b.检查cluster Node的状态,如果某个cluster node在加入集群的时候,使用的是127.0.0.1:port的形式,那么客户端在连接这个Node,在-MOVE转移request的时候会出现问题,其实是连接超时(但是抛出的异常却是一个坑爹的连接数太多,而且还是个疑问句....),所以集群在配置的时候务必带上详细的IP

2.redis-cluster没有pipeline

无解,因为redis-cluster的数据是垂直切分的,这意味着不同的key按照不同的策略被分配到了不同的Node上,所以pipeline里面的request[A,B,C,D,E,F]经过转发以后,可能[A,B]发往了Node1,[C]在Node2上面处理,[D,E,F]转发到Node3,最终的response无法保证为[A,B,C,E,D,F]的顺序。cluster干脆就不让用pipeline了

3.redis-benchmark目前不能对cluster进行压力测试

所以没办法进行严密的对比测试,如果采用比较小的数据量,可以跑跑试试看效果,但是结论必定是不严谨的,仅仅看看就好,所以不贴测试结果了,
从原理来看,在轻负载和中等负载下,使用cluster会少量的增加延迟,但是会有更高的operation/s的上限

4.redis-cluster会丢失分片的数据

联动帖里面阐述过redis-cluster丢失数据的一种可能性,在这里要写的就是redis-cluster有可能会丢失整个分片的数据的一种情况,一般来说,如果某个Master挂掉了,对应的slave会变成新的Master处理request,但是如果这个Master对应的所有的slave都挂了的话,这一组分片保存的数据在这些Node恢复之前是不可访问和操作的,所以在初始化redis-cluster的时候,replica的数量需要好好斟酌,MS的分布也需要尽量规划好,避免某个分片所有的Node全部挂掉



-----------------------------------------------------------------------------------------------简短的小尾巴~-------------------------------------------------------------------------------------------------------

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29510932/viewspace-1798069/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-28

  • 博文量
    102
  • 访问量
    1351012