目录

redis集群安装完成后节点如下:(6主6从)

redis下载与解压安装(192.168.209.128,192.168.209.129,192.168.209.129上同样操作)

创建存放数据文件

安装ruby

在每台机器启动服务器节点

连接客户端(以下任一命令执行都可)

清空所有节点数据

免密登录(可有可无)

如果redis集群启动失败,(将/usr/local/redis-cluster/data下的文件都删除然后用一下方法进行测试):

jedis连接集群测试


 

redis集群安装完成后节点如下:(6主6从)

192.168.209.128:6001 192.168.209.128:6002 192.168.209.129:6001 192.168.209.129:6002 192.168.209.130:6001 192.168.209.130:6002 192.168.209.128:6003 192.168.209.128:6004 192.168.209.129:6003 192.168.209.129:6004 192.168.209.130:6003 192.168.209.130:6004

//连接客户端

redis-cli -c -h ip -p port (例如redis-cli -c -h 192.168.209.128 -p 6001)

redis下载与解压安装(192.168.209.128,192.168.209.129,192.168.209.129上同样操作)

cd /usr/local/
wget http://download.redis.io/releases/redis-3.2.12.tar.gz      //下载
tar xzf redis-3.2.12.tar.gz     //解压
cd redis-3.2.12
make install        //编译安装

创建存放数据文件

在每台机器/usr/local下新建redis-cluster文件夹,在redis-cluster文件夹下创建data文件夹和redis6001 ,redis6002 ,redis6003 , redis6004文件夹。然后再在data文件夹下分别新建6001,6002,6003,6004四个文件,用于存放数据等

mkdir  /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir redis6001 redis6002 redis6003 redis6004       //存放各个节点的配置文件
cd /usr/local/redis-cluster/data
mkdir 6001 6002 6003 6004       //存放各个节点的数据

修改配置文件

将/usr/local/redis-3.2.12下的redis.conf配置文件分别复制到redis600文件夹下,并将redis600下的redis.conf做如下修改(每个redis600*下的redis.conf都需修改)

1. daemonize yes
2. port600* (对应每个机器的端口号,在此分别设置为6001,6002,6003,6004)
3. bind 0.0.0.0
4. cluster-enabled yes (开启集群模式)
5. cluster-config-file nodes-600*.conf (最好跟端口号对应,方便识别,在此分别设置为6001,6002,6003,6004)
6. cluster-node-timeout 5000
7. appendonly yes
8. protect-mode no
9.dir /usr/local/redis-cluster/data/6001/ (在此分别设置为6001,6002,6003,6004)

安装ruby

由于redis集群需要ruby命令,需要安装ruby

1. yum install ruby
2. yum install rubygems
3. gem install redis

==执行以上命令可能会因为Ruby版本过低,而执行失败==

ruby版本低

导入public 公钥,命令如下(直接复制即可)

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2

解决办法是 先安装rvm,再把ruby版本提升至2.5.1,需要安装如下包

1.安装curl

sudo yum install curl

==可能出现的问题:==

curl: (35) SSL connect error问题处理

无法在服务器使用curl命令访问https域名,原因是nss版本有点旧了,使用以下命令更新一下,重新安装curl即可!

yum -y update nss

2.安装RVM

curl -L get.rvm.io | bash -s stable 

source /usr/local/rvm/scripts/rvm

3.查看rvm库中已知的ruby版本,并安装ruby

rvm list known      //查看rvm库中已知的ruby版本

rvm install 2.5.1       //安装ruby

rvm use 2.5.1       //使用一个ruby版本

ruby --version      //查看当前版本

4.再安装redis就可以了

gem install redis

在每台机器启动服务器节点

/usr/local/bin/redis-server /usr/local/redis-cluster/redis6001/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6002/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6003/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6004/redis.conf

向集群中添加节点

(在任一一台机器上执行以下命令即可,(--replicas 1代表一主一从,--replicas 2代表一主两从))

/usr/local/redis-3.2.12/src/redis-trib.rb create --replicas 1 192.168.209.128:6001 192.168.209.128:6002 192.168.209.129:6001 192.168.209.129:6002 192.168.209.130:6001 192.168.209.130:6002 192.168.209.128:6003 192.168.209.128:6004 192.168.209.129:6003 192.168.209.129:6004 192.168.209.130:6003 192.168.209.130:6004

连接客户端(以下任一命令执行都可)

/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6001
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6002
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6003
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6004

关闭某个节点命令

/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6001 shutdown
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6002 shutdown
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6003 shutdown
/usr/local/bin/redis-cli -c -h 192.168.209.128 -p 6004 shutdown

清空所有节点数据

redis-cli -h 192.168.209.128 -p 6004  -c flushall
redis-cli -h 192.168.209.129 -p 6002  -c flushall
redis-cli -h 192.168.209.130 -p 6001  -c flushall
redis-cli -h 192.168.209.130 -p 6004  -c flushall
redis-cli -h 192.168.209.128 -p 6003  -c flushall
redis-cli -h 192.168.209.130 -p 6002  -c flushall
redis-cli -h 192.168.209.128 -p 6001  -c flushall
redis-cli -h 192.168.209.129 -p 6003  -c flushall
redis-cli -h 192.168.209.129 -p 6001  -c flushall
redis-cli -h 192.168.209.130 -p 6003  -c flushall
redis-cli -h 192.168.209.129 -p 6004  -c flushall
redis-cli -h 192.168.209.128 -p 6002  -c flushall

免密登录(可有可无)

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.209.128
ssh 192.168.209.128

如果redis集群启动失败,(将/usr/local/redis-cluster/data下的文件都删除然后用一下方法进行测试):

安装telnet

yum install telnet-server
yum install telnet.*

测试连接(一定得测通)

telnet ip port //测试连接(例如:telnet 192.168.209.128 6001)

 

如何测不通,有如下两种解决方案,关闭防火墙,或者打开端口

1.关闭防火墙

service iptables status //查看防火墙状态

service iptables stop //关掉防火墙则所有端口都默认开放

2.打开端口

端口管理#开启6001端口(redis有个不成文规则,开启6001端口,就必须开启16001端口,即在原有端口+10000)

/sbin/iptables -I INPUT -p tcp --dport 6001 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 6002 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 6003 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 6004 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 16001 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 16002 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 16003 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 16004 -j ACCEPT
/etc/rc.d/init.d/iptables save #保存配置 
/etc/rc.d/init.d/iptables restart #重启服务 
查看已开放端口 
/etc/init.d/iptables status

如果以上都没问题,则重新执行以下命令即可:

//在每台机器启动服务器节点
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6001/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6002/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6003/redis.conf
/usr/local/bin/redis-server /usr/local/redis-cluster/redis6004/redis.conf
//远程集群中添加节点(在任一一台机器上执行以下命令即可,(--replicas 1代表一主一从,--replicas 2代表一主两从))
/usr/local/redis-3.2.12/src/redis-trib.rb create --replicas 1 192.168.209.128:6001 192.168.209.128:6002 192.168.209.129:6001 192.168.209.129:6002 192.168.209.130:6001 192.168.209.130:6002 192.168.209.128:6003 192.168.209.128:6004 192.168.209.129:6003 192.168.209.129:6004 192.168.209.130:6003 192.168.209.130:6004

jedis连接集群测试

package com.jedis.test;

import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashSet;
import java.util.Set;

/**
 * @Author:Virvil
 * @Description:
 * @Datte:Created in 21:13 2018/4/13
 * Modified By:
 */
public class TestRedisCluster {

    private JedisCluster jedisCluster;

    @Before
    public void setup()throws Exception{
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        Set<HostAndPort> hostAndPorts = new HashSet<HostAndPort>();
        hostAndPorts.add(new HostAndPort("192.168.209.128",6001));
        hostAndPorts.add(new HostAndPort("192.168.209.128",6002));
        hostAndPorts.add(new HostAndPort("192.168.209.128",6003));
        hostAndPorts.add(new HostAndPort("192.168.209.128",6004));
        hostAndPorts.add(new HostAndPort("192.168.209.129",6001));
        hostAndPorts.add(new HostAndPort("192.168.209.129",6002));
        hostAndPorts.add(new HostAndPort("192.168.209.129",6003));
        hostAndPorts.add(new HostAndPort("192.168.209.129",6004));
        hostAndPorts.add(new HostAndPort("192.168.209.130",6001));
        hostAndPorts.add(new HostAndPort("192.168.209.130",6002));
        hostAndPorts.add(new HostAndPort("192.168.209.130",6003));
        hostAndPorts.add(new HostAndPort("192.168.209.130",6004));

        jedisCluster = new JedisCluster(hostAndPorts,jedisPoolConfig);
    }

    @Test
    public void test(){
        if (jedisCluster != null){
            jedisCluster.set("student","zhangsan");
            System.out.println(jedisCluster.get("student"));
        }
    }
}