redis集群

我只是一个虾纸丫 提交于 2020-01-17 01:07:47

redis集群

什么是集群?

集群就是多个服务器集中再一起 ,去处理同一个业务

集群和分布式概念

分布式是指将不同的业务分布在不同的地方,多个服务器去完成不同的业务功能

集群指的是将多台服务器集中在一起,实现同一业务

集群的好处-------- 解决 高并发 大数据的问题

集群的特点

(1) 扩展性 --可以动态的去扩展的服务器

(2) 高可用 --> 具备容错的功能 (错误恢复)

(3) 负载均衡 -->把请求分配到不同的服务器里面

Redis集群方案

方案一 主从复制

优点: 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离

缺点:不具备自动容错和恢复功能(keepalive) 获取 手动重启

扩展服务器比较麻烦

方案二: 哨兵模式

Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能

       哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。

        (1)监控主服务器和从服务器是否正常运行。

 (2)主服务器出现故障时自动将从服务器转换为主服务器

           优点:主从可以自动切换,系统更健壮,可用性更高

           缺点: Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂

方案3 Redis-Cluster集群

Redis-Cluster 采用无中心结构

好处:可以完成分布式存储问题,解决容量问题

redis集群搭建步骤

要让集群正常运作至少需要3个主节点,建议配置3个主节点,其余3个作为各个主节点的从节点(也是官网推荐的模式)。同一台电脑,不同端口模拟

(1) 拷贝6份 redis文件---redis.windows.conf

        修改 端口 为 6379 , 6380,6381,6382,6383,6384

       修改配置

cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes

(2) 编写一个启动脚本

       在对应的文件夹里面新创建文件 startup.bat

title redis-6379
redis-server.exe redis.windows.conf

(3) 安装ruby环境

(4) 安装ruby驱动环境

       下载地址 https://rubygems.org/pages/download

       \rubygems-2.7.7 目录里面执行文件 ruby setup.rb

(5)通过驱动安装redis

        切换到6379文件夹里面 在命令行中安装 redis

gem install redis

(6)启动服务 创建集群

                  点击每个节点start.bat进行启动

                  拷贝redis-trib.rb到6379的redis节点

创建集群

redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

Jedis代码测试

@Test
    public void testCluster() throws IOException, InterruptedException {
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("127.0.0.1", 6379));
        nodes.add(new HostAndPort("127.0.0.1", 6380));
        nodes.add(new HostAndPort("127.0.0.1", 6381));
        nodes.add(new HostAndPort("127.0.0.1", 6382));
        nodes.add(new HostAndPort("127.0.0.1", 6383));
        nodes.add(new HostAndPort("127.0.0.1", 6384));
        JedisCluster cluster = new JedisCluster(nodes);
        try {
            String res = cluster.get("name");
            System.out.println(res);
//            cluster.quit();
        } catch (Exception e) {
            e.printStackTrace();
//            cluster.quit();
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!