Redis5.0集群环境搭建

1、搭建Redis5.0集群,要求三主三从

  • 安装C语言需要的GCC环境
# 安装gcc-c++
yum install -y gcc-c++
# 安装wget
yum install -y wget
  • 下载Redis5.0,并解压Redis源码压缩包

    cd /opt/software
    # 创建集群安装目录/usr/redis-cluster/7001
    mkdir -p /usr/redis-cluster/7001
    # 下载Redis 5.0
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    # 解压缩
    tar -zxvf redis-5.0.5.tar.gz .
    
  • 编译Redis源码

    cd /opt/software/redis-5.0.5/src
    # 编译
    make install PREFIX=/usr/redis-cluster/7001
    # 拷贝redis.conf文件到7001下
    cp /opt/software/redis-5.0.5/redis.conf /usr/redis-cluster/7001/bin
    
  • 编辑redis.conf文件,修改配置

    # 关闭仅本机访问
    # bind 127.0.0.1
    # 设置端口
    port 7001
    # 开启集群支持
    cluster-enabled yes
    # 关闭保护模式
    protecte-mode no
    # 打开守护进程
    daemonize yes
    
  • 复制7001,创建70027006实例,并修改端口号对应为70027006

    cd /usr/redis-cluster/
    cp -r 7001 7002
    cp -r 7001 7003
    cp -r 7001 7004
    cp -r 7001 7005
    cp -r 7001 7006
    
  • 创建启动集群脚本startup.sh,启动所有的实例vi /usr/redis-cluster/startup.sh

    cd 7001/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    cd 7002/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    cd 7003/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    cd 7004/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    cd 7005/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    cd 7006/bin
    ./redis-server redis.conf
    cd ..
    cd ..
    
  • 给脚本赋权

    chmod u+x startup.sh
    
  • 启动所有实例

    sh startup.sh
    
  • 创建Redis集群(创建时Redis里不要有数据)

    ./redis-cli --cluster create 192.168.62.121:7001 192.168.62.121:7002 192.168.62.121:7003 192.168.62.121:7004 192.168.62.121:7005 192.168.62.121:7006 --cluster-replicas 1
    
  • 集群验证

    ./redis-cli -h 127.0.0.1 -p 7001 -c
    # 查看集群信息
    cluster info
    # 查看集群节点信息
    cluster nodes
    

2、添加一主一从(Master4和Slaver4)

  • 创建7007节点

    mkdir /usr/redis-cluster/7007
    cd /opt/software/redis-5.0.5/src/
    make install PREFIX=/usr/redis-cluster/7007
    cp /opt/software/redis-5.0.5/redis.conf /usr/redis-cluster/7007/bin/
    
  • 修改redis.conf配置文件

    # 关闭仅本机访问
    # bind 127.0.0.1
    # 设置端口
    port 7007
    # 开启集群支持
    cluster-enabled yes
    # 关闭保护模式
    protecte-mode no
    # 打开守护进程
    daemonize yes
    
    # 提前拷贝一份7008做从节点,修改redis.conf配置文件port 7008
    cp -r /usr/redis-cluster/7007 /usr/redis-cluster/7008
    
  • 启动7007节点

    cd 7007/bin
    ./redis-server redis.conf
    
  • 添加7007节点作为新节点

    ./redis-cli --cluster add-node 192.168.62.121:7007 192.168.62.121:7001
    
  • 给刚添加的7007节点分配slot(连接上原集群其中的一个节点)

    ./redis-cli --cluster reshard 192.168.62.121:7007
    
    • 输入要分配的slot数量3000
    • 输入接收槽(7007)的节点ID
    • 输入yes开始移动槽到目标节点id
  • 启动7008节点

    cd 7008/bin
    ./redis-server redis.conf
    
  • 添加7008从结点,将7008作为7007的从结点

    ./redis-cli --cluster add-node 192.168.62.121:7008 192.168.62.121:7007 --cluster-slave --cluster-master-id 7007节点id
    
  • 验证

    ./redis-cli -p 7001 -c
    # 查看集群信息
    cluster info
    # 查看集群节点信息
    cluster nodes
    

3、通过JedisCluster向RedisCluster添加数据和取出数据

  • 创建maven项目,添加依赖

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    
  • JedisCluster操作RedisCluster

    package com.endless.redis;
    
    import org.junit.Test;
    import redis.clients.jedis.HostAndPort;
    import redis.clients.jedis.JedisCluster;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.SortingParams;
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @Author jinhao
     */
    public class Cluster {
        private static JedisCluster jedis;
        static {
            // 添加集群的服务节点Set集合
            Set<HostAndPort> hostAndPortsSet = new HashSet<HostAndPort>();
            // 添加节点
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7001));
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7002));
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7003));
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7004));
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7005));
            hostAndPortsSet.add(new HostAndPort("192.168.62.121", 7006));
    
            // Jedis连接池配置
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            // 最大空闲连接数, 默认8个
            jedisPoolConfig.setMaxIdle(10);
            // 最大连接数, 默认8个
            jedisPoolConfig.setMaxTotal(50);
            //最小空闲连接数, 默认0
            jedisPoolConfig.setMinIdle(0);
            // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
            jedisPoolConfig.setMaxWaitMillis(2000); // 设置2秒
            //对拿到的connection进行validateObject校验
            jedisPoolConfig.setTestOnBorrow(true);
            jedis = new JedisCluster(hostAndPortsSet, jedisPoolConfig);
        }
    
        /**
         * 测试key:value数据
         */
        @Test
        public void testConn() throws InterruptedException {
            System.out.println("判断某个键是否存在:"+jedis.exists("user:1:name"));
            System.out.println("新增用户名:"+jedis.set("user:1:name", "endless"));
            System.out.println("是否存在:"+jedis.exists("user:1:name"));
            System.out.println("新增密码:"+jedis.set("user:1:password", "123456"));
            System.out.println("删除密码:"+jedis.del("user:1:password"));
            System.out.println("判断键密码是否存在:"+jedis.exists("user:1:password"));
            System.out.println("设置用户名的过期时间为10s:"+jedis.expire("user:1:name", 10));
            TimeUnit.SECONDS.sleep(2); // 线程睡眠2秒
            System.out.println("查看用户名的剩余生存时间:"+jedis.ttl("user:1:name"));
            System.out.println("查看用户名的剩余生存时间:"+jedis.ttl("user:1:name"));
            System.out.println("删除用户名的生存时间:"+jedis.persist("user:1:name"));
            System.out.println("查看用户名的剩余生存时间:"+jedis.ttl("user:1:name"));
            System.out.println("查看用户名所存储的值的类型:"+jedis.type("user:1:name"));
        }
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值