赞
踩
错误信息:
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/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。