Redis集群环境搭建以及Java连接Redis集群

!!!服务器版本为Centos7.3 阿里云

本文档仅为单个服务器下,创建六个不同端口号的reids服务模拟集群环境。

一. 安装Redis5.0

1. 下载redis5.0

进入到usr/local目录,执行下载命令下载redis压缩包

cd usr/local
wget http://download.redis.io/releases/redis-5.0.0.tar.gz

Redis集群环境搭建以及Java连接Redis集群_第1张图片
2.解压后安装
解压redis-5.0.0.tar.gz压缩文件,然后到解压后的目录redis-5.0.0,使用命令安装。

tar -zxvf redis-5.0.0.tar.gz
cd redis-5.0.0
make && make install

二.创建六个测试节点

  1. 创建六个节点文件
    返回到local/usr目录,创建redis_cluster集群文件夹,进入后创建6个文件夹,分别以需要设置的端口号为文件名,然后把redis.5.0.0下的redis.conf分别复制到这六个文件夹中。

cd …/
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005
cp /usr/local/redis-5.0.0/redis.conf ./7000
cp /usr/local/redis-5.0.0/redis.conf ./7001
cp /usr/local/redis-5.0.0/redis.conf ./7002
cp /usr/local/redis-5.0.0/redis.conf ./7003
cp /usr/local/redis-5.0.0/redis.conf ./7004
cp /usr/local/redis-5.0.0/redis.conf ./7005

2. 修改redis.cong配置文件
分别进入到六个文件夹下,修改以下字段,这里建议使用winscp工具直接在工具中修改。
protected-mode设置为yes则为保护模式,redis需要设置密码才能远程访问,如果为no则不需要设置,本文主要是密码模式下的文档。

daemonize    yes                      	//redis后台运行
pidfile  /var/run/redis_7000.pid       	//pidfile文件对应7000,7001,7002...
port  7000                             	//端口7000,7001,7002...
cluster-enabled  yes                   	//开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf   	//集群的配置  配置文件首次启动自动生成 7000,7001,7002...
cluster-node-timeout  15000         		//去掉注释# 请求超时时间 默认15s
appendonly  yes                   		//aof日志开启  每次操作都会记录日志
# bind 127.0.0.1						//bind前面加上注释 否则无法远程连接集群
//关闭保护模式 无需密码直接连接redis集群
protected-mode no						//关闭保护模式
//保护模式 连接redis需要密码才可访问
protected-mode yes						//开启保护模式 默认模式
requirepass root						//设置redis密码  需要全部统一一个密码 root可自定义
masterauth root							//设置主节点密码  需要全部统一一个密码

3. 启动redis服务
分别启动redis服务

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

Redis集群环境搭建以及Java连接Redis集群_第2张图片
检查服务是否正常开启

ps -ef | grep redis

Redis集群环境搭建以及Java连接Redis集群_第3张图片

三.创建集群

1. 创建集群
cluster-replicas 1表示每个主节点都有一个从节点,-a后面是redis密码,如果关闭保护模式则不需要,127.0.0.1仅作填充处理,这里需要填自己的服务器IP.

redis-5.0.0/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.4:7005 -a root --cluster-replicas 1

出现下图时输入yes
在这里插入图片描述
完成创建(图片为首次测试结果仅四个节点,实际为六个节点,三个M三个S)
Redis集群环境搭建以及Java连接Redis集群_第4张图片

2. 测试集群
打开端口号为7000的客户端,设置一个key-value值

redis-cli -c -p 7000
set name wohenkuaile

Redis集群环境搭建以及Java连接Redis集群_第5张图片
退出7000端口的服务,进入到7001的服务,获取key为name的值,如果现实如图则集群环境正常

quit
redis-cli -c -p 7001
get name

在这里插入图片描述

四.Java连接Redis集群

1. 在pom文件中添加maven依赖



	redis.clients
	jedis
	2.9.0

2. Java代码

public class ConnectReidsCluster {

	public static void main(String[] args) {
		JedisPoolConfig poolConfig = new JedisPoolConfig();
	    // 最大连接数
	    poolConfig.setMaxTotal(1);
	    // 最大空闲数
	    poolConfig.setMaxIdle(1);
	    // 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
	    poolConfig.setMaxWaitMillis(1000);
	    
	    Set nodes = new LinkedHashSet();
	    nodes.add(new HostAndPort("127.0.0.1", 7000));		//ip填写服务器的ip地址 
	    nodes.add(new HostAndPort("127.0.0.1", 7001));		//127.0.0.1在这里只是作填充
	    nodes.add(new HostAndPort("127.0.0.1", 7002));
	    nodes.add(new HostAndPort("127.0.0.1", 7003));
	    nodes.add(new HostAndPort("127.0.0.1", 7004));
	    nodes.add(new HostAndPort("127.0.0.1", 7005));
	    JedisCluster cluster = new JedisCluster(nodes, 5000, 5000, 5, "root", poolConfig);
	    String name = cluster.get("name");
	    System.out.println(name);
	    cluster.set("info", "我很快乐");
	    System.out.println(cluster.get("info"));
	    try {
	        cluster.close();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }

	}
}

3. 运行结果
在这里插入图片描述

五.一些问题

1. 如果出现Waiting for the cluster to join一直加载
Redis集群环境搭建以及Java连接Redis集群_第6张图片
这种情况需要开放17000-17005(具体为当前redis端口号+10000)
redis集群不仅开放redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,如redis端口为7000,则集群总线端口为17000。

2.控制台报错无法连接到集群

运行后有可能出现以下情况,发现控制台报错,查询后发现是配置文件中没有注释bind 127.0.0.1,导致集群环境无法远程访问到。(如果完全按照上述配置还出现这种情况,请检查端口号是否开放!)
在这里插入图片描述
首先要停止已经开启的集群,然后删除在/usr/local下生成的nodes配置文件,注释掉redis.conf中的bin的,最后按照上面的方法重新开启集群。

(1). 停止集群
命令查到几个redis服务的pid,分别杀掉对应pid的进程。

ps -ef | grep redis
kill -9 (pid)
Redis集群环境搭建以及Java连接Redis集群_第7张图片

(2). 删除/usr/local下的nodes-7000.conf配置文件和存储的数据文件

rm -rf nodes-7000.conf
rm -rf nodes-7001.conf
rm -rf nodes-7002.conf
rm -rf nodes-7003.conf
rm -rf dump.rdb
rm -rf dump.rdbappendonly.aof

在这里插入图片描述
在这里插入图片描述
(3). 注释redis.conf中的bind 127.0.0.1
Redis集群环境搭建以及Java连接Redis集群_第8张图片

(4). 重启开启集群
!!!注意:这里的127.0.0.1仅仅作填充处理,这里需要设置成你的服务器IP,否则可能无法远程连接

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-5.0.0/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

在这里插入图片描述

插入一条之前的数据

redis-cli -c -p 7000
set name wohenkuaile
quit

(5). 再次使用刚刚的代码连接redis集群

你可能感兴趣的:(Redis)