在Redis集群模式下,Spring启动执行器使Redis健康状况下降

ulmd4ohb  于 2023-03-12  发布在  Spring
关注(0)|答案(1)|浏览(155)

我正在使用springboot执行器来监控应用程序的健康状况,并且应用程序使用了集群模式的redis。
当redis的所有节点都启动时,接口actuator/health返回
"redis":{"status":"UP","details":{"cluster_size":3,"slots_up":16384,"slots_fail":0}}
它工作正常。
redis集群有三个主节点和三个从节点。当我关闭一个从节点时,集群仍然可用。但是actuator/health交替返回
"redis":{"status":"UP","details":{"cluster_size":3,"slots_up":16384,"slots_fail":0}}
以及
"redis":{"status":"DOWN","details":{"error":"org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 6 second(s)"}}

  • SpringCloud版本:20.0.2
  • Redis版本:6.2.2

Spring罩配置为

redis:
    cluster:
      nodes:
        - 127.0.0.1:6379
        - 127.0.0.1:6380
        - 127.0.0.2:6379
        - 127.0.0.2:6380
        - 127.0.0.3:6379
        - 127.0.0.3:6380
      max-redirects: 3
    password: XXXXXXXXX
    timeout: 6000
    lettuce:
      cluster:
        refresh:
          adaptive: true
          period: 100

当集群可用但一个从机停机时,actuator/health是否可以恢复?

oug3syen

oug3syen1#

当与Redis集群通信时,Sping Boot 的健康指示器使用CLUSTER INFO command来确定Redis的健康状况。由于超时,此命令失败,因此Spring Boot无法确定集群的健康状况,并假定它已关闭。
你可以通过增加超时时间来避免这个问题。它可以使用spring.redis.timeout来配置,你现在设置为6秒(6000ms)。

相关问题