我正在使用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
是否可以恢复?
1条答案
按热度按时间oug3syen1#
当与Redis集群通信时,Sping Boot 的健康指示器使用
CLUSTER INFO
command来确定Redis的健康状况。由于超时,此命令失败,因此Spring Boot无法确定集群的健康状况,并假定它已关闭。你可以通过增加超时时间来避免这个问题。它可以使用
spring.redis.timeout
来配置,你现在设置为6秒(6000ms)。