Spring Boot 连接 Redis Cluster 报JedisClusterMaxRedirectionsException: Too many Cluster redirections错误

 因为要参加比赛在我的电脑上vmware上搭建了一个liunx的虚拟机,用该虚拟机搭建了一个三从三主的redis集群,为了让物理机能连接网卡使用了桥接模式,想用Spring Boot 在物理机上连接集群时建立连接没问题,但是调用了一个set操作时报了JedisClusterMaxRedirectionsException: Too many Cluster redirections错误,再测试发现无论操作什么数据类型都会报这个错误,百度后发现都不能解决这个问题。最后下载了一个windows版本的redis 在物理机上用redis-cli 命令连接redis集群时没问题,但调用一个set foo bar时卡在

Redirected to slot [12182] located at 127.0.0.1:7002

因为redis集群把数据分别存到16384个slot里,数据存储的slot是根据数据的key决定的,每个master 负责存储一定数量的slot,所有master存储的slot覆盖16384个slot。如果客户端连接了集群中的一 个节点并进行了一个操作,假设该操作为我使用的set foo bar,

根据foo生成的hash值为12182,如果客户端连到的是一个slave或者不负责存储12182这个slot的master,那么该节点会像客户端发送

redirected 负责该slot的redis服务器 的ip的和端口。如果虚拟的ip是172.16.110.13,这里返回的应该是172.16.110.13:7002,但是ip是127.0.0.1,让客户端访问自己机器上该端口的进程,显然这是错误的,至于为什么会返回127.0.0.1?

    我是根据redis官方文档搭建的集群,在虚拟机上用redis-cli --cluster create命令创建集群,因为redis服务器也在虚拟机上,所以后面直接用127.0.0.1+端口号选择服务器。如果在虚拟机上用客户端连接是没问题的,但是这个集群回复别的机器的客户机的还是用127.0.0.1问题就很严重。

   我重新创建了集群,直接使用虚拟机的ip而不是127.0.0.1,这样别的机器上的客户机也能使用了,经过测试没问题。

  假设虚拟机的ip是172.16.113.11,三个服务器运行的端口为7000,7001,7002。

  原本创建集群的命令是

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 0

​

  现在是

redis-cli --cluster create 172.16.113.11:7000 172.16.113.11:7001 172.16.113.11:7002 --cluster-replicas 0

  加入节点时也直接用Ip。

你可能感兴趣的:(Spring Boot 连接 Redis Cluster 报JedisClusterMaxRedirectionsException: Too many Cluster redirections错误)