redis3开始支持cluster集群模式,解决单点的瓶颈问题,本文以3.0.3为例搭建并测试cluster集群
搭建步骤
一.安装ruby
a) wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz
b) tar -xvzf ruby-2.2.3.tar.gz
c) cd ruby-2.2.3
d) ./configure
e) make
d) make install
二.安装rubygems & ruby redis
a) yum install rubygems
b) gem install redis
上述过程中可能由于gem source问题导致下载失败,可以换成国内的
添加源 gem sources -a http://ruby.taobao.org/
删除源 gem sources --remove http://rubygems.org/
查看源 gem sources -l
三.安装redis
a) wget http://download.redis.io/releases/redis-3.0.3.tar.gz
b) tar -xzvf redis-3.0.3.tar.gz
c) cd redis-3.0.3
d) make
e) make install
四.集群配置
集群10.2.102.7, 10.2.102.8,10.2.102.9相互打通,每台机器部署两个redis实例
a) 在每台机器上建立两个目录
mkdir redis-cluster/7000 redis-cluster/70001
b) 在每个目录下创建配置文件redis.conf,配置如下,其中port值和目录名对应
五.启动
a) 进入每台机器的实例目录,执行
redis-server redis.conf
成功后可以在实例目录下的redis.log中看到如下日志
b) 关联实例创建集群
3台机器6个实例,一主一备将slots切分为3份
redis-trib.rb create --replicas 1 10.2.102.7:7000 10.2.102.7:7001 10.2.102.8:7000 10.2.102.8:7001 10.2.102.9:7000 10.2.102.9:7001
输入 yes 接受 主备节点分配
在每个实例目录下可以看见生成了一份nodes.conf,如下
六.测试
可以通过redis-cli脚本,但须要加上-c参数指定cluster模式连接。用junit代码如下,其中RedisClusterClient是基于JedisCluster的封装:
public class RedisClusterCliTest { private final static String key_cnt = "key_cnt"; final static Set<HostAndPort> nodes = new HashSet<HostAndPort>(); static { nodes.add(new HostAndPort("10.2.102.7", 7000)); nodes.add(new HostAndPort("10.2.102.7", 7001)); //nodes.add(new HostAndPort("10.2.102.8", 7000)); //nodes.add(new HostAndPort("10.2.102.8", 7001)); //nodes.add(new HostAndPort("10.2.102.9", 7000)); //nodes.add(new HostAndPort("10.2.102.9", 7001)); } private RedisClusterClient rcc; @Before public void init() { rcc = new RedisClusterClient(nodes); } @After public void destroy() { rcc.close(); } @Test public void test_set() { for (int i = 0; i < 100; ++i) { rcc.setex("key" + i, 60 * 10, String.valueOf(i)); } } @Test public void test_get() { for (int i = 0; i < 100; ++i) { String value = rcc.get("key" + i); System.out.println(value); } } @Test public void test_incr() { System.out.println("Before incr : " + rcc.get(key_cnt)); rcc.incr(key_cnt); System.out.println("After incr : " + rcc.get(key_cnt)); } @Test public void test_incr_multi() { long start = Long.parseLong(rcc.get(key_cnt)); System.out.println("Before incr : " + start + ", " + new Date()); int threadNum = 100; int count = 100; ExecutorService threadPool = Executors.newFixedThreadPool(threadNum, new ThreadFactory(){ AtomicInteger index = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { return new Thread(r, "Thread-incr-" + index.incrementAndGet()); } }); List<Future<Boolean>> result = new ArrayList<Future<Boolean>>(threadNum); for (int i = 0; i < threadNum; ++i) { result.add(threadPool.submit(new IncrThread(rcc, key_cnt + i, count))); } for (Future<Boolean> f : result) { try { if(!f.get()) { System.err.println("Fail ...."); break; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } System.out.println("After incr : " + rcc.get(key_cnt) + ", Except " + (start + count * threadNum) + ", " + new Date()); } @Test public void test_decr() { System.out.println("Before decr : " + rcc.get(key_cnt)); rcc.decr(key_cnt); System.out.println("After decr : " + rcc.get(key_cnt)); } class IncrThread implements Callable<Boolean> { RedisClusterClient rcc; String key; int count; IncrThread(RedisClusterClient rcc, String key, int count) { this.rcc = rcc; this.key = key; this.count = count; } @Override public Boolean call() { for (int i = 0; i < count; ++i) { rcc.incr(key); } return true; } } }
相关推荐
redis-cluster集群搭建方式,里面包含了需要的插件,搭建步骤也非常详细............................
python连接redis集群
redis-windows-cluster搭建指南,包括Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxxx.gem和创建Redis集群的工具redis-trib.rb等所需软件,以及搭建指导文档
redis-go-cluster, 在Go中,redis集群客户端实现 redis-go-clusterredis-go-cluster是基于 burd burd burd的客户端的一个golang实现的。 它在本地缓存 slot 信息,并在集群更改时自动更新。 客户端管理每个 node的...
redis-cluster-tool 是一个非常便利的 Redis 集群管理工具。help Usage: redis-cluster-tool [-?hVds] [-v verbosity level] [-o output file] [-c conf file] [-a addr] [-i interval] [-p pid file] [-C ...
redis集群配置文件 redis-cluster
tomcat9负载均衡tomcat-cluster-redis-session-manager_4.0
资源来自pypi官网。 资源全名:redis-py-cluster-1.1.0.tar.gz
windows一键Redis-Cluster集群工具(32位Redis-v3.0.504),资源包括:ruby安装包,rubygem,32位Redis-v3.0.504,一键Redis-Cluster集群工具等,64位请自行替换相关资源包即可,相关文章见:...
redis40-cluster-config.zip
redis4.0.10-cluster集群模式docker部署-详细文档
redis-py-cluster 该客户端提供了Redis 3.0中添加的Redis集群客户端。 该项目是antirez的redis-rb-cluster的移植版,具有许多附加功能。 原始资源可以在找到 分支master将始终包含已从Pull Requests中合并的最新...
springMVC redis-cluster redis 集群 整合实力,采用的是redis自带的cluster 集群方案,
本文档描述redis-cluster在centos7上面的集群搭建,从源码编译、环境准备、安装redis、修改配置文件、启动集群、关闭集群等各个地方进行详细描述不走
完整搭建redis-cluster,全过程配合网页一起使用,效果更佳
redis-cluster在centos7.4上面集群部署,详细的操作步骤。
redis-cluster 组件脚本
初始化3主3从集群redis-cli --cluster create 192.168.0.224:6391 192.168.0.224:6392 192.168.0.224:6393 192.168.0.224:6394 192.168.0.224:6395 192.168.0.224:6396 --cluster-replicas 1 连接集群测试 redis-cli...
redis实战,redis实践-redis-in-actions
$ docker run --name redis-cluster -e ALLOW_EMPTY_PASSWORD=yes bitnami/redis-cluster:latest Docker撰写 $ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-redis-cluster/mast