`
luoshi0801
  • 浏览: 147624 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

redis实践-cluster搭建

阅读更多

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;
        }
        
    }
    
}

 

  • 大小: 30.7 KB
  • 大小: 49.3 KB
  • 大小: 255.4 KB
  • 大小: 321.9 KB
  • 大小: 294 KB
  • 大小: 209.3 KB
分享到:
评论

相关推荐

    完整搭建redis-cluster

    **Redis Cluster 搭建全攻略** Redis 是一个高性能的键值存储系统,而 Redis Cluster 是它的分布式解决方案,提供数据的自动分片、故障转移和高可用性。本指南将详细讲解如何完整地搭建一个 Redis Cluster,同时...

    Redis-Cluster 分布式集群.docx

    接下来,我们将深入探讨如何搭建一个Redis Cluster以及其关键操作。 首先,为了构建一个Redis Cluster,你需要至少三个物理节点或虚拟机,每个节点运行两个Redis实例,总共六个实例。在本例中,我们有节点192.168....

    edu-demo-redis-cluster-测试代码.rar

    综上所述,"edu-demo-redis-cluster-测试代码.rar"提供了一个在CentOS系统上搭建Redis集群的实践案例,包括多节点配置和测试代码,这对于学习和理解Redis集群的运作机制非常有帮助。通过实际操作和测试,可以更好地...

    redis-cluster-lib

    以上就是关于【redis-cluster-lib】的相关知识点,包括Redis集群的基本原理、文件列表的功能解析以及集群搭建和管理的要点。通过理解和掌握这些知识,你可以有效地利用Redis集群来提升应用的性能和可靠性。

    DB-Redis-Cluster-Lib

    标题“DB-Redis-Cluster-Lib”暗示了这个压缩包文件与数据库(DB)相关,特别是Redis的一个集群(Cluster)库或配置。Redis是一种高性能的键值存储系统,常用于缓存、数据库和消息中间件等场景。它支持数据结构如...

    Redis Cluster集群部署搭建详解附件

    以上是关于Redis Cluster集群部署的详细步骤和知识点,通过学习和实践,您可以掌握如何搭建和管理自己的Redis分布式环境。请确保在实际环境中根据具体需求调整配置,并做好数据备份,以防万一。

    redis-6.2.12可执行安装包

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,常被用于...而`redis-6.2.12-cluster`则可能是用于搭建和管理Redis集群的关键文件,对于运维人员来说,理解和掌握Redis的使用和集群管理至关重要。

    spring-boot-demo-cluster-redis-websocket.zip

    这个项目"spring-boot-demo-cluster-redis-websocket"为开发者提供了一个可扩展和可复用的模板,可以帮助我们快速搭建起基于Spring Boot、Redis和WebSocket的实时通信系统。通过深入理解并实践该项目,我们可以掌握...

    redis-3.2.11.tar.gz 以及redis-3.3.5.gem

    Redis 是一个高性能的键值数据库,常用于缓存和数据持久化。它的高效性得益于其内存存储特性,以及丰富的数据结构支持,如字符串、...通过深入学习和实践,可以更好地利用Redis来提升应用程序的性能和数据处理能力。

    Redis--参考资料即总结

    6. **集群**:探究Redis Cluster,了解其分片、槽分配和故障检测机制,以及如何搭建和管理Redis集群。 7. **性能优化**:讨论内存管理策略,如过期策略、最大内存限制,以及如何调整配置以提升性能。 8. **安全**...

    redis-trib和rubyinstaller-2.3.3-x64.zip

    `redis-trib` 是用 Ruby 编写的,因此在搭建 Redis 集群前,需要确保系统中已经安装了 Ruby 和对应的 Redis 非常重要的依赖 `redis-rb-cluster` 库。在 Windows 上,你可以使用 `rubyinstaller-2.3.3-x64` 来安装 ...

    redis 离线集群redis5.0以上版本

    在Redis 5.0以上版本中,特别是5.0.2这个Linux版本,引入了一些重要的变化和改进,这对于搭建和管理Redis集群至关重要。 1. **Redis Cluster支持**: Redis 5.0引入了官方的集群解决方案——Redis Cluster,它允许...

    Redis Cluster集群的搭建与实践

    "Redis Cluster集群的搭建与实践" Redis Cluster集群是Redis的一个高可用性解决方案,它可以在多个Redis节点之间分配数据和状态,提供高性能和高可用性的数据存储服务。下面是Redis Cluster集群的主要知识点: 1. ...

    redis-windows安装包

    10. **集群配置**:如果需要在Windows上搭建Redis集群,需要配置多个实例,并使用`redis-trib.rb`(需要Ruby环境)或`redis-cli`的`CLUSTER`子命令来创建和管理集群。 总之,Redis在Windows上的安装和使用虽然相较...

    redis集群搭建所需要文件

    Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在集群环境中,Redis可以提供高可用性和数据分片能力,以处理更大的数据量和并发请求。...继续学习和实践,以便更好地管理你的Redis集群。

    redis集群简易搭建手册.zip

    Redis 集群是分布式数据存储的一个重要解决方案,它提供了数据分片、容错和扩展性,使得在大型系统中可以高效地管理大量数据。本手册将指导你一步步搭建一个...动手实践是理解技术的最好方式,祝你在搭建过程中有收获!

    rediscluster集群demo

    Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,提供高可用性和可...通过实践这个“rediscluster集群demo”,你将更好地理解如何管理和操作Redis Cluster,以便在未来项目中应用。

    【Redis开发】资源Redis-v6.0.20.zip

    9. **Cluster集群**:Redis Cluster是官方提供的分布式解决方案,允许在多个节点之间自动分片数据,实现水平扩展。 解压"Redis-v6.0.20.zip"后,你可以找到包含源代码、编译脚本、配置文件等资源。通过阅读源码,...

    redis_cluster实战栗子.rar

    在本实战栗子中,我们将深入探讨如何搭建Redis Cluster,学习其基本概念、操作指令以及如何处理常见问题。 首先,我们需要理解Redis Cluster的核心特性。Redis Cluster采用无中心架构,每个节点都是对等的,它们...

Global site tag (gtag.js) - Google Analytics