JedisClusterMaxRedirectionsException:Too many Cluster redirections

错误信息:

Too many Cluster redirections?
Exception in thread "main" redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException:Too many Cluster redirections?  

这个问题困惑了很久,主要情况表现为:集群状态正常;存有测试数据的单个节点访问正常。(如果集群状态不正常或者单个节点都无法正常访问,先针对性排查问题。)

但是问题在于,为什么单个节点访问是正常的,但是集群模式配置就出现这种问题。

按照网上的解决方式几乎尝试一遍,此问题可能的解决方式包括如下:

1. redis-trib.rb中的IP是根据conf中bind的IP来决定的,bind默认是127.0.0.1。如果是部署到服务器,则需要配置bind为服务器IP。

即由:

./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 ....

修改为:

./redis-trib.rb create --replicas 1 192.168.71.188:6380 192.168.71.188:6381 ....

2.防火墙相关原因。

3.Java版本中的jedis版本太低。

4.kill掉所以结点,删除data下的所有数据(dump、aof、nodes)文件,重新配置等。

5.初始化JedisCluster时,设定JedisCluster的maxRedirections 

JedisCluster(Set<HostAndPort> jedisClusterNode, int timeout, int maxRedirections) ;
JedisCluster jc = new JedisCluster(jedisClusterNodes,5000,1000);

6.确认集群内部通讯是否正常。

以上六点几乎涵盖了redis集群搭建过程中的所有技术点,我是采用了第四点解决的问题,基本也算得上重装一遍集群了......


重新分析下问题:

这个异常是JedisClusterMaxRedirectionsException,redirections:节点调转次数,就是是重试次数,网上有传,报错的原因是JedisCluster尝试在节点直接多次调转重试,次数过多导致异常。我部署的节点是很多,12个,但是测试数据就一个节点上存储。

据说是服务端在连接这个Node,在-MOVE转移request的时候会出现问题,本质上是先请求到的节点没有数据,再转向另一个节点查找时出现问题,其实是连接超时的原因,却报的是节点调转异常的错。

redis本身的操作是单线的原子操作,一般的操作时间都很短,最好不使用长时间连接。例如:使用hgetall对同一个key读取时,其他链接就会不断重试,导致重试次数太多错误。


参考链接

http://blog.itpub.net/29510932/viewspace-1798069/

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值