当前位置: 首页 > 知识库问答 >
问题:

Spring引导执行器:为什么Redis集群的健康状态不正确?

方苗宣
2023-03-14

我有一个使用Jedis配置redis集群的Spring Boot项目。配置文件如下:

application.yml文件:

redisclusterconfig.java文件:

@Configuration
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Value("${redis.cluster.host1}") private String HOST1;
@Value("${redis.cluster.port1}") private Integer PORT1;

@Value("${redis.cluster.host2}") private String HOST2;
@Value("${redis.cluster.port2}") private Integer PORT2;

@Value("${redis.cluster.host3}") private String HOST3;
@Value("${redis.cluster.port3}") private Integer PORT3;

@Value("${redis.cluster.host4}") private String HOST4;
@Value("${redis.cluster.port4}") private Integer PORT4;

@Value("${redis.cluster.host5}") private String HOST5;
@Value("${redis.cluster.port5}") private Integer PORT5;

@Value("${redis.cluster.host6}") private String HOST6;
@Value("${redis.cluster.port6}") private Integer PORT6;

@Bean
public JedisCluster jedisCluster() {
    Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
    //Jedis Cluster will attempt to discover cluster nodes automatically
    jedisClusterNodes.add(new HostAndPort(HOST1, PORT1));
    jedisClusterNodes.add(new HostAndPort(HOST2, PORT2));
    jedisClusterNodes.add(new HostAndPort(HOST3, PORT3));

    if(StringUtils.isNotBlank(HOST4)){
        jedisClusterNodes.add(new HostAndPort(HOST4, PORT4));
    }else{
        logger.warn("jedis cluster HOST4 not configured.");
    }

    if(StringUtils.isNotBlank(HOST5)){
        jedisClusterNodes.add(new HostAndPort(HOST5, PORT5));
    }else{
        logger.warn("jedis cluster HOST5 not configured.");
    }

    if(StringUtils.isNotBlank(HOST6)){
        jedisClusterNodes.add(new HostAndPort(HOST6, PORT6));
    }else{
        logger.warn("jedis cluster HOST6 not configured.");
    }
    JedisCluster jc = new JedisCluster(jedisClusterNodes, new JedisPoolConfig());
    return jc;
}
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

有没有什么东西我可能会错过使/健康状态恢复到“上升”状态?谢谢!

更多信息:我跟踪了启动,发现RedisHealthIndicator通过了一个错误的工厂,Host=localhost和port=6379,这应该是配置的集群主机和端口?

public RedisHealthIndicator(RedisConnectionFactory connectionFactory) {
    Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
    this.redisConnectionFactory = connectionFactory;
}

共有1个答案

温浩大
2023-03-14

最后,我通过重新配置redis来解决问题,如下所示:

Spring:Redis:Cluster:Nodes:-192.168.0.17:6390-192.168.0.17:6391-192.168.0.17:6392-192.168.0.9:6390-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-192.168.0.9:6391-19

 类似资料:
  • {“Status”:“Down”} 我需要做什么才能显示自定义健康状况指示器?

  • 我们正在尝试healthcheck一个Spring Boot应用程序,我们正在计划使用Spring Boot执行器health来获得健康状态。 令人困惑的是,当CassandraHealthIndicator、DiskSpaceHealthIndicator、DataSourceHealthIndicator、ElasticsearchHealthIndicator、JmsHealthIndica

  • 当我从Spring Boot应用程序访问/healthendpoint时,它返回的状态为UP: 但我想像这样定制我的状态: 如何自定义状态?

  • 对于我一直在开发的一个微服务,我创建了一个自定义健康检查类,扩展了AbstractHealthIndicator,并能够在中获得输出 但当我向领事注册服务时,健康检查状态为失败。 尝试将执行器url配置为领事健康检查为spring。云领事发现健康检查url=http://localhost:8080/actuator/health。但它仍然失败,出现错误http://localhost:8566/

  • 但我想要一些我可以调用从AWS弹性负载均衡器/自动缩放组。默认情况下,如果一个实例未通过健康检查,ELB/ASG将终止它并用一个新的实例替换它。问题是一些健康检查,如DataSourceHealthIndicator,会在数据库关闭时向下报告,但我的应用程序实例在其他方面是完全健康的。如果我使用默认行为,AWS将抛出完全正常的实例,直到数据库重新启动,这将导致我的账单增加。 我可以去掉DataSo

  • 第一次尝试执行器依赖关系时,我将其配置为选入 当我在本地调用时,大约需要1.4秒来响应。请记住,这是一个本地调用,来自服务器的同一台机器。 如果我创建了一个以空响应进行响应的常规endpoint,则请求只需几毫秒。 这正常吗?我能让它回复快一点吗?