前言
因项目中需要集成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
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 代码
<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 及其以上的版本