当前位置:   article > 正文

JedisClusterMaxRedirectionsException:Too many Cluster redirections

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 

  1. JedisCluster(Set<HostAndPort> jedisClusterNode, int timeout, int maxRedirections) ;
  2. 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/

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/638489
推荐阅读
相关标签
  

闽ICP备14008679号