返回

学习淘淘商城第三十二课(Redis集群测试)

发布时间:2023-12-04 05:59:01 233


学习淘淘商城第三十二课(Redis集群测试)

原创  2017年04月22日 16:36:48


  • 1057

      上节课我们一起学习了怎样搭建一个六台设备的Redis集群,这节我们一起学习下如何测试集群。

      首先启动Redis集群使用命令/usr/local/redis/bin/redis-trib.rb create --replicas 1 192.168.156.15:6379 192.168.156.16:6379 192.168.156.17:6379 192.168.156.18:6379 192.168.156.19:6379 192.168.156.20:6379进行启动,如下所示。可以看到192.168.156.18、192.168.156.19、192.168.156.20这三个节点是主节点,另外三个节点是从节点。槽号为0-5460的卡槽被分配到了192.168.156.20上,5461-10922被分配到了192.168.156.19上,10923-16383被分配到了192.168.156.18上。




  1. [root@redis1 ~]# /usr/local/redis/bin/redis-trib.rb create --replicas 1 192.168.156.15:6379 192.168.156.16:6379 192.168.156.17:6379 192.168.156.18:6379 192.168.156.19:6379 192.168.156.20:6379  
  2. >>> Creating cluster  
  3. Connecting to node 192.168.156.15:6379: OK  
  4. Connecting to node 192.168.156.16:6379: OK  
  5. Connecting to node 192.168.156.17:6379: OK  
  6. Connecting to node 192.168.156.18:6379: OK  
  7. Connecting to node 192.168.156.19:6379: OK  
  8. Connecting to node 192.168.156.20:6379: OK  
  9. >>> Performing hash slots allocation on 6 nodes...  
  10. Using 3 masters:  
  11. 192.168.156.20:6379  
  12. 192.168.156.19:6379  
  13. 192.168.156.18:6379  
  14. Adding replica 192.168.156.17:6379 to 192.168.156.20:6379  
  15. Adding replica 192.168.156.16:6379 to 192.168.156.19:6379  
  16. Adding replica 192.168.156.15:6379 to 192.168.156.18:6379  
  17. S: 0cbe6fc270afa701156c5dc9c47dba522dd62737 192.168.156.15:6379  
  18.    replicates 423f334654c3dfdacd39927e0528a95c38aa933f  
  19. S: 4eecf66148e88917b4ecf4b36e794a6e83e4fe85 192.168.156.16:6379  
  20.    replicates b69de3b87aeefac1d4711dd644a8dd5815c56bec  
  21. S: 149c9e9a0e0febd581193df17d509ce4970e4163 192.168.156.17:6379  
  22.    replicates 6808fa38709cac3a6ec4b232fd1e45980cbb0c96  
  23. M: 423f334654c3dfdacd39927e0528a95c38aa933f 192.168.156.18:6379  
  24.    slots:10923-16383 (5461 slots) master  
  25. M: b69de3b87aeefac1d4711dd644a8dd5815c56bec 192.168.156.19:6379  
  26.    slots:5461-10922 (5462 slots) master  
  27. M: 6808fa38709cac3a6ec4b232fd1e45980cbb0c96 192.168.156.20:6379  
  28.    slots:0-5460 (5461 slots) master  
  29. Can I set the above configuration? (type 'yes' to accept): yes  
  30. >>> Nodes configuration updated  
  31. >>> Assign a different config epoch to each node  
  32. >>> Sending CLUSTER MEET messages to join the cluster  
  33. Waiting for the cluster to join....  
  34. >>> Performing Cluster Check (using node 192.168.156.15:6379)  
  35. M: 0cbe6fc270afa701156c5dc9c47dba522dd62737 192.168.156.15:6379  
  36.    slots: (0 slots) master  
  37.    replicates 423f334654c3dfdacd39927e0528a95c38aa933f  
  38. M: 4eecf66148e88917b4ecf4b36e794a6e83e4fe85 192.168.156.16:6379  
  39.    slots: (0 slots) master  
  40.    replicates b69de3b87aeefac1d4711dd644a8dd5815c56bec  
  41. M: 149c9e9a0e0febd581193df17d509ce4970e4163 192.168.156.17:6379  
  42.    slots: (0 slots) master  
  43.    replicates 6808fa38709cac3a6ec4b232fd1e45980cbb0c96  
  44. M: 423f334654c3dfdacd39927e0528a95c38aa933f 192.168.156.18:6379  
  45.    slots:10923-16383 (5461 slots) master  
  46. M: b69de3b87aeefac1d4711dd644a8dd5815c56bec 192.168.156.19:6379  
  47.    slots:5461-10922 (5462 slots) master  
  48. M: 6808fa38709cac3a6ec4b232fd1e45980cbb0c96 192.168.156.20:6379  
  49.    slots:0-5460 (5461 slots) master  
  50. [OK] All nodes agree about slots configuration.  
  51. >>> Check for open slots...  
  52. >>> Check slots coverage...  


      既然集群已经启动好了,我们使用redis客户端随意连接一台设备进行测试,比如我们连接192.168.156.16这台设备(这是个从节点,从属于192.168.156.19),如下所示(注意:一定要加上参数"-c"否则没办法重定向 到其它节点)。



[html]  ​​view plain​​  ​​copy​​



  1. [root@redis2 bin]# ./redis-cli -h 192.168.156.16 -p 6379 -c  
  2. 192.168.156.16:6379>  

      连接上之后,我们先来保存key1,它的值是123,如下所示,可以看到,这个key1经过算法并对16384进行求余之后的数字是9189,这个槽号是在192.168.156.19上,因此key1被保存到了192.168.156.19上。



  1. 192.168.156.16:6379> set key1 123  
  2. -> Redirected to slot [9189] located at 192.168.156.19:6379  
  3. OK  
  4. 192.168.156.19:6379>  


      我们再接着保存key2、key3、key4,如下所示,可以看到key2所对应的槽号是4998,显然是在192.168.156.20上,key3所对应的槽号也在0-5640,因此set key2的时候根本就没有重定向,还是停留在192.168.156.20上。key4所对应的槽号是13120,显然是在192.168.156.18上因此被保存到了192.168.156.18上。



[html]  ​​view plain​​  ​​copy​​



  1. 192.168.156.19:6379> set key2 111  
  2. -> Redirected to slot [4998] located at 192.168.156.20:6379  
  3. OK  
  4. 192.168.156.20:6379> set key3 aaa  
  5. OK  
  6. 192.168.156.20:6379> set key4 bbb  
  7. -> Redirected to slot [13120] located at 192.168.156.18:6379  
  8. OK  
  9. 192.168.156.18:6379>   


       我们可以使用命令cluster info查看集群的某些信息,如下所示,可以看到当前集群的状态是OK的,所有的槽号都已分配完毕,没有失败的节点。所有的节点数是6,当前提供服务的有3台




  1. 192.168.156.18:6379> cluster info  
  2. cluster_state:ok  
  3. cluster_slots_assigned:16384  
  4. cluster_slots_ok:16384  
  5. cluster_slots_pfail:0  
  6. cluster_slots_fail:0  
  7. cluster_known_nodes:6  
  8. cluster_size:3  
  9. cluster_current_epoch:6  
  10. cluster_my_epoch:4  
  11. cluster_stats_messages_sent:10748  
  12. cluster_stats_messages_received:10748  
  13. 192.168.156.18:6379>  


        还可以通过命令cluster nodes来查看节点信息。





  1. 192.168.156.18:6379> cluster nodes  
  2. 423f334654c3dfdacd39927e0528a95c38aa933f 192.168.156.18:6379 myself,master - 0 0 4 connected 10923-16383  
  3. 4eecf66148e88917b4ecf4b36e794a6e83e4fe85 192.168.156.16:6379 slave b69de3b87aeefac1d4711dd644a8dd5815c56bec 0 1492869406355 5 connected  
  4. 0cbe6fc270afa701156c5dc9c47dba522dd62737 192.168.156.15:6379 slave 423f334654c3dfdacd39927e0528a95c38aa933f 0 1492869405340 4 connected  
  5. 149c9e9a0e0febd581193df17d509ce4970e4163 192.168.156.17:6379 slave 6808fa38709cac3a6ec4b232fd1e45980cbb0c96 0 1492869402275 6 connected  
  6. 6808fa38709cac3a6ec4b232fd1e45980cbb0c96 192.168.156.20:6379 master - 0 1492869408383 6 connected 0-5460  
  7. b69de3b87aeefac1d4711dd644a8dd5815c56bec 192.168.156.19:6379 master - 0 1492869407370 5 connected 5461-10922  
  8. 192.168.156.18:6379>   


      下面使用JedisCluster来测试集群,我们在taotao-content-service工程的测试类中再添加一个测试方法(与第三十课结合学习),如下所示。运行,发现是可以正常输出"hello jedis cluster"的。





  1. @Test  
  2.     public void testJedisCluster(){  
  3.         //创建构造参数Set类型,集合中每个元素是HostAndPort类型  
  4.  nodes = new HashSet<>();  
  5.         //向集合中添加节点  
  6.         nodes.add(new HostAndPort("192.168.156.15", 6379));  
  7.         nodes.add(new HostAndPort("192.168.156.16", 6379));  
  8.         nodes.add(new HostAndPort("192.168.156.17", 6379));  
  9.         nodes.add(new HostAndPort("192.168.156.18", 6379));  
  10.         nodes.add(new HostAndPort("192.168.156.19", 6379));  
  11.         nodes.add(new HostAndPort("192.168.156.20", 6379));  
  12.         //创建JedisCluster对象  
  13. jedisCluster = new JedisCluster(nodes);  
  14.         //直接使用jedisCluster,自带连接池,jedisCluster可以是单例的  
  15.         jedisCluster.set("jedis-cluster", "hello jedis cluster");  
  16. result = jedisCluster.get("jedis-cluster");  
  17.         System.out.println(result);  
  18.         //系统关闭前关闭jedisCluster  
  19.         jedisCluster.close();  
  20.     }  
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线