概述
依旧是原程序使用新的redis集群后发现的问题。
调用redis插入数据的api是使用正常的,一旦调用Redisson类,就会报错如下:
- 2019-04-30 10:01:22.242 o.r.c.ClusterConnectionManager [ERROR] Can’t connect to master: redis://127.0.0.1:7000 with slot ranges: [[0-5461]]
- 2019-04-30 10:01:22.242 o.r.c.ClusterConnectionManager [ERROR] Can’t connect to master: redis://127.0.0.1:7001 with slot ranges: [[5462-10922]]
- 2019-04-30 10:01:22.247 o.r.c.ClusterConnectionManager [ERROR] Can’t connect to master: redis://127.0.0.1:7002 with slot ranges: [[10923-16383]]
- 2019-04-30 10:01:22.259 o.r.c.h.CommandsQueue [ERROR] Exception occured. Channel: [id: 0xe9281f53, 0.0.0.0/0.0.0.0:53002 :> /10.153.73.131:7000]
- java.lang.IllegalStateException: cannot be started once stopped
- 2019-04-30 10:02:13.445 o.a.s.util [ERROR] Received error in main thread… terminating server…
java.lang.ExceptionInInitializerError- Caused by: org.redisson.client.RedisConnectionException: Can’t connect to servers!
- Caused by: java.net.ConnectException: Connection refused: /127.0.0.1:7002
经过分析,问题主要集中在 Can’t connect to master: redis://127.0.0.1:7000上面,
因为明显应该连接redis对应的集群ip,才能connect连接成功。
但是很明显,是创建redis连接刚开始是成功的,否则是无法读取到master信息。
所以到底是哪里,redis的ip地址变成127.0.0.1的呢。
研究发现,RedissonClient的模式有很多种,其中包括集群模式和主从模式,这两种模式都适用于redis的集群环境拿到客户端。(参考:https://aperise.iteye.com/blog/2396196
我的代码使用的集群方式,拿到的Redisson客户端api入口。
public static RedissonClient getInstance(){
Config config = new Config();
config.useClusterServers()
.addNodeAddress(Constant.REDIS_PTAH.split(","))
.setMasterConnectionMinimumIdleSize(10)
.setMasterConnectionPoolSize(64)
.setSlaveConnectionMinimumIdleSize(10)
.setSlaveConnectionPoolSize(64);
RedissonClient redisson = Redisson.create(config);
return redisson;
}
该模式会自动识别redis的集群的主从,经过判断,源码必定会读取redis的配置文件。
(因为查看addNodeAddress方法的源码,发现有切割ip增加 redis://的相关逻辑。猜测毕竟还有类似的逻辑,重新切割ip host 拼接)
于是查看了redis集群主从的配置文件。果然发现,里面的ip使用的127.0.0.1.
迅速联系了运维,将127.0.0.1改成该节点的实际ip。bug解决。
最后
以上就是细心猎豹为你收集整理的Redisson类报错:ClusterConnectionManager [ERROR] Can't connect to master: redis://127.0.0.1:7000的全部内容,希望文章能够帮你解决Redisson类报错:ClusterConnectionManager [ERROR] Can't connect to master: redis://127.0.0.1:7000所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复