搭建集群需要用到安装后的redis单机版的bin目录,所以我们先搭建redis单机版

Redis机版搭建:

  • 因为需要安装redis源码包,所以我们需要gcc环境支持 :

    Redis 集群模式登录不行 redis集群登录命令_redis

  • 使用FTP工具将压缩包上传至/usr/local,并解压 : tar -zxvf redis-3.2.9.tar.gz
  • 进入解压后的文件夹内:cd /usr/local/redis-3.2.9,编译并指定安装目录:

make PREFIX=/usr/local/redis install,这里我指定的目录为: /usr/local/redis

  • 安装完毕之后,我们进入到redis文件夹内,发现已经生成了一个bin目录,我们打开它

    Redis 集群模式登录不行 redis集群登录命令_Redis 集群模式登录不行_02

  • 启动redis服务有两种方式:
  • 前端模式启动 : ./redis-server , 这样的话开启服务之后除非关闭服务,否则你将不能进行其它操作
  • 后端模式启动(推荐)

cp /usr/local/redis-3.2.9/redis.conf  /usr/local/redis

 

vim redis.conf

/deamonize查找,找到后按i进入编辑模式,更改daemonize为yes,

Redis 集群模式登录不行 redis集群登录命令_单机版_03

       修改完毕后:wq保存

./redis-server redis.conf

 

Redis集群版搭建

  • Redis集群管理工具redis-trib.rb依赖ruby环境,首先我们需要安装ruby环境

yum install ruby

  yum install rubygems

     安装ruby和redis的接口程序:

gem install redis

  •  在/usr/local下创建redis-cluster文件夹,并在内创建6个子文件夹

 mkdir redis-cluster

      cd redis-cluster

      mkdir 700{1..6}

     

Redis 集群模式登录不行 redis集群登录命令_redis_04

 

  • 将单机版redis安装后的bin目录拷贝6份,各放一份放入上列6个文件夹内

cp -r bin ../redis-cluster/7001

  ……………………………………...2

  • 修改各个文件夹下的redis.conf文件,打开开启集群注释

   

Redis 集群模式登录不行 redis集群登录命令_Redis_05

      修改端口号,和文件夹名一一对应

      

Redis 集群模式登录不行 redis集群登录命令_redis_06

  • 拷贝集群管理工具到redis-cluster文件夹下

 cp /usr/local/redis-3.2.9/src/redis-trib.rb /usr/local/redis-cluster

  • 启动这6台redis服务

     

Redis 集群模式登录不行 redis集群登录命令_Redis_07

  • 创建集群,在redis-cluster目录下运行:

 ./redis-trib.rb create –replicas 1 172.18.103.142:7001 172.18.103.142:7002 172.18.103.142:7003 172.18.103.142:7004 172.18.103.142:7005 172.18.103.142:7006

             说明 :

     ./redis-trib.rb创建集群插件

      Create 创建集群命令

     --replicas 1 每一个主服务器必须至少有一个备服务器

  • 如果出现下列提示,说明集群已经创建成功

    

Redis 集群模式登录不行 redis集群登录命令_Redis_08

 

Redis集群版常用操作

  • 登录集群

     ./redis-cli –c –h host –p port

     

Redis 集群模式登录不行 redis集群登录命令_Redis_09

 


  • 查看集群状态

  cluster info

    

Redis 集群模式登录不行 redis集群登录命令_redis_10

 

  • 查看集群节点信息

 cluster nodes

   

Redis 集群模式登录不行 redis集群登录命令_Redis 集群模式登录不行_11

 


  • 动态添加新的集群节点(7007服务必须是处在启动状态)

./redis-trib.rb add-node 172.18.103.142:7007 172.18.103.142:7001

   add-node : 添加节点命令,默认添加主节点

   172.18.103.142:7007 需要添加的节点

   172.18.103.142:7001 添加7001所在的节点上面去

   添加成功如下图:

   

Redis 集群模式登录不行 redis集群登录命令_Redis_12

 

  • 新增加节点为主节点,但并未分配hash槽

    1)重新分配slots

    

Redis 集群模式登录不行 redis集群登录命令_Redis 集群模式登录不行_13

    2)想要移动多少个槽位?

   

Redis 集群模式登录不行 redis集群登录命令_Redis_14

    3)输入需要分配的节点的ID

   

Redis 集群模式登录不行 redis集群登录命令_redis_15

    4)输入all,表示从所有主节点中随机转移

   

Redis 集群模式登录不行 redis集群登录命令_redis_16

 

Redis 集群模式登录不行 redis集群登录命令_redis_17

  • 为主节点添加新的从节点(新的节点服务必须处于启动状态)

   

Redis 集群模式登录不行 redis集群登录命令_Redis_18

./redis-trib.rb add-node --slave --master-id fff5cd34dd6206e51fb59ee2bab43399508af913 172.18.103.142:7008 172.18.103.142:7001

   1)    add-node:添加节点

   2)    –slave :添加从节点

   3)    --master-id fff5cd34dd6206e51fb59ee2bab43399508af913:给这个ID对应的主节点添加从节点

   4)    172.18.103.142:7008:需要添加的从节点

   5)    172.18.103.142:7001:添加到7001对应的集群


   下图表示添加成功

   

Redis 集群模式登录不行 redis集群登录命令_单机版_19

 


Jedis客户端连接redis集群

   //配置连接池

        JedisPoolConfig poolConfig = new JedisPoolConfig();

        //设置最大连接数

        poolConfig.setMaxTotal(20);

        //设置最大空闲数

        poolConfig.setMaxIdle(2);

       

        Set<HostAndPort> nodes = new HashSet<HostAndPort>();

        //添加8个节点对应的IP以及端口号

        nodes.add(new HostAndPort("172.18.103.142", 7001));

        nodes.add(new HostAndPort("172.18.103.142", 7002));

        nodes.add(new HostAndPort("172.18.103.142", 7003));

        nodes.add(new HostAndPort("172.18.103.142", 7004));

        nodes.add(new HostAndPort("172.18.103.142", 7005));

        nodes.add(new HostAndPort("172.18.103.142", 7006));

        nodes.add(new HostAndPort("172.18.103.142", 7007));

        nodes.add(new HostAndPort("172.18.103.142", 7008));     

        //创建一个集群核心对象:JedisCluster

jedisCluster = new JedisCluster(nodes, poolConfig);

        //设置参数

        jedisCluster.set("username", "xufang");

        //查询参数

        String username = jedisCluster.get("username");

        System.out.println(username);