诺坎普之旅 2018-09-29 02:08 采纳率: 100%
浏览 4300
已采纳

SpringBoot整合Redis主从哨兵模式,故障切换失败?

目前使用Redis主从复制,添加Sentinel哨兵监听主的状态,如果master断线,自动推荐slave为新master,到这里redis环境一切正常。

使用Jedis进行测试,客户端向master进行写数据,然后人为关闭master,客户端出现连接失败,没有自动进行切换吗?(测试环境是SpringBoot+Redis)

主从和客户端连接池根据哨兵切换是成功的,但是客户端在操作redis时,模拟宕机后,出现无法连接、写数据失败

以下是Redis的配置文件:

 @Bean
public JedisPoolConfig jedisPoolConfig() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxIdle(maxIdle);
    jedisPoolConfig.setMinIdle(minIdle);
    jedisPoolConfig.setMaxTotal(maxTotal);
    jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
    jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
    jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    jedisPoolConfig.setTestOnBorrow(testOnBorrow);
    jedisPoolConfig.setTestWhileIdle(testWhileIdle);
    return jedisPoolConfig;
}

@Bean
public RedisSentinelConfiguration sentinelConfiguration(){
    RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
    //配置matser的名称
    RedisNode redisNode = new RedisNode(hostName, port);
    redisNode.setName("mymaster");
    redisSentinelConfiguration.master(redisNode);
    //配置redis的哨兵sentinel
    RedisNode senRedisNode = new RedisNode(sentinelHost,sentinelPort);
    Set<RedisNode> redisNodeSet = new HashSet<RedisNode>();
    redisNodeSet.add(senRedisNode);
    redisSentinelConfiguration.setSentinels(redisNodeSet);
    return redisSentinelConfiguration;
}

@Bean(name="jedisConnectionFactory")
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig, RedisSentinelConfiguration sentinelConfig) {   
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(sentinelConfig, jedisPoolConfig);
    jedisConnectionFactory.setPoolConfig(jedisPoolConfig);   
    jedisConnectionFactory.setPort(port);   
    jedisConnectionFactory.setPassword(password);  
    jedisConnectionFactory.setTimeout(timeout);
    return jedisConnectionFactory;
}
  • 写回答

2条回答 默认 最新

  • 诺坎普之旅 2018-09-30 06:26
    关注

    经过几天的测试研究,问题已经解决!感兴趣的朋友可以跟你们交流一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用