前言

因项目中需要集成JedisCluster,特阿里云上部署一套环境就行测试,测试过程中遇到了不少坑,如:JedisCluster 一直连接不上集群,但是终端又能连接上,在此记录一下,供之后使用参考

一、下载并安装

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make

相关脚本在src下面,主要是redis-server.sh 、redis-cli.sh;

若需要指定配置可以用 redis-server redis.conf 启动

客户端指定host、ip,reds-cli -h {host} -p {port}

二、集群搭建

2.1 修改redis.conf配置

# 主要是一下配置,其他的配置可以根据需要调整
# 启动集群
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

# 默认是 127.0.0.1 需要改了,这里为了客户端能够连接上
bind 0.0.0.0
protected-mode on

# 后台启动
daemonize yes

requirepass 你的密码
masterauth  你的密码 

appendonly yes

2.2 创建其它节点配置

# 创建集群节点目录
mkdir cluster-test
# 三主三从
mkdir 7000 7001 7002 7003 7004 7005
# 复制redis.conf 到目录下
cd cluster-test/7000
cp ../../redis.conf .
# 其他的同上

# 启动六个节点
redis-server redis.conf

2.3 创建集群

# 这里使用的redis 5.0.5 创建集群模式 低版本有区别 用的是 redis-trib.rb 
redis-cli --cluster create {六个节点的公网ip:port} --cluster-replicas 1 -a 密码
# 如出现节点不是空的情况或者端口等配置,建议删除redis.conf同级目录下的配置文件,一般有nodes.conf、dump.rdb

# 检查是否创建成功
redis-cli --cluster check {host:port}

三、阿里云安全组配置

需要配置对应的节点端口,以后对应的节点通信端口,如7000 对应的 就是 17000

否则会出现创建集群一直waiting

四、JedisCluster

4.1 环境

redis5.0.5 、jedis2.9.0

4.2 代码

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
public class RedisClusterDemo {

public static void main(String[] args) {
HostAndPort hostAndPort = new HostAndPort("host", 7000);
HostAndPort hostAndPort1 = new HostAndPort("host", 7001);
HostAndPort hostAndPort2 = new HostAndPort("host", 7002);
HostAndPort hostAndPort3 = new HostAndPort("host", 7003);

Set<HostAndPort> set = new LinkedHashSet<>();
set.add(hostAndPort);
set.add(hostAndPort1);
set.add(hostAndPort2);
set.add(hostAndPort3);

GenericObjectPoolConfig config = new GenericObjectPoolConfig();
JedisCluster jedisCluster = new JedisCluster(set, 2000, 2000, 5 ,"admin", config);
jedisCluster.set("test", "test");
}
}

五、坑点

  • bind 0.0.0.0 、创建集群需要用外网ip,不然JedisCluster一直连接不上集群,而对应redis-cli 可以连接上
  • 阿里云安全组配置,一定不要忘了节点通信端口
  • JedisCluster密码配置,需要2.9.0 及其以上的版本