当前位置: 首页 > news >正文

深圳疫情最新消息今日情况搜索引擎优化课程总结

深圳疫情最新消息今日情况,搜索引擎优化课程总结,做网站的网址是哪里来的,邢台市最新人事调整Redis集群配置可能会在运行时更改。可以添加新节点,可以更改特定插槽的主节点。还有可能因为master宕机或网络抖动等原因,引起了主从切换。 无法感知集群槽位变化 SpringBoot2.x 开始默认使用的 Redis 客户端由 Jedis 变成了 Lettuce,但是当…

Redis集群配置可能会在运行时更改。可以添加新节点,可以更改特定插槽的主节点。还有可能因为master宕机或网络抖动等原因,引起了主从切换。

无法感知集群槽位变化

SpringBoot2.x 开始默认使用的 Redis 客户端由 Jedis 变成了 Lettuce,但是当 Redis 集群中节点槽位变化之后,Lettuce 将无法继续操作 Redis,原因在于此时 Lettuce 使用的仍然是有问题的连接信息。

实际上,Lettuce 支持 redis 集群拓扑动态刷新,但是默认并没有开启,SpringBoot 在集成 Lettuce 时默认也没有开启。并且在 SpringBoot2.3.0 之前,是没有配置项设置 Lettuce 自动刷新拓扑的。在这次提交中增加了这一配置。使用Jedis便没有这个问题。

官方的描述Lettuce需要刷新节点拓扑视图Lettuce Github Wiki

解决方案

方法一:使用Jedis连接

Spring Boot2.0以下默认使用Jedis,由于jedis通过自身异常反馈来识别重连、刷新服务端的集群信息机制,保证其自动故障恢复,所以Jedis client默认自动支持拓扑刷新,方法一便是使用更换为Jedis客户端。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

方法二:配置LettuceConnectionFactory,设置拓扑刷新策略

文档参考集群特定选项

@Bean
public DefaultClientResources lettuceClientResources() {return DefaultClientResources.create();
}@Bean
public LettuceConnectionFactory lettuceConnectionFactory(RedisProperties redisProperties, ClientResources clientResources) {ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder().enablePeriodicRefresh(Duration.ofSeconds(30)) //按照周期刷新拓扑.enableAllAdaptiveRefreshTriggers() //根据事件刷新拓扑.build();ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()//redis命令超时时间,超时后才会使用新的拓扑信息重新建立连接.timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(10))).topologyRefreshOptions(topologyRefreshOptions).build();LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder().clientResources(clientResources).clientOptions(clusterClientOptions).build();RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());clusterConfig.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());clusterConfig.setPassword(RedisPassword.of(redisProperties.getPassword()));LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(clusterConfig, clientConfiguration);return lettuceConnectionFactory;
}

方法三:开启自动拓扑刷新

Spring Boot2.3之后可以通过简单的配置变可以打开自动刷新拓扑的功能:

# 定时拓扑刷新(Periodic updates)
spring.redis.lettuce.cluster.refresh.period=60s
# 自适应拓扑刷新(Adaptive updates)
spring.redis.lettuce.cluster.refresh.adaptive=true

健康检查无法自动感知集群恢复

我们都知道Redis Cluster集群模式在主节点宕机后,会自动切换到可用的从节点,集群会再度恢复可用性。

但是如果在例如K8S、注册中心等管理服务中,存活探针用了actuator的health地址,那k8s容器里的服务也一样会down掉,也会导致服务不可用,即使服务层面已经刷新了redis集群的拓扑,服务/actuator/health健康情况依然会是down状态(原因是配置的redis集群nodes的每个node都会检查是否健康,不管这个node是主节点还是从节点),错误如下:

"redis": {"status": "DOWN","details": {"error": "org.springframework.data.redis.RedisConnectionFailureException: Redis connection failed; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 10.0.35.249:6380"}
},

redis cluster模式某节点宕机之后,Spring识别redis集群健康为down是个bug。是由于Spring Data Redis 2.2.8 提交所引起,具体可看这个解释。这个问题在spring boot2.4.x之后被修复。

解决方案

方法一:升级Spring版本到2.4.X

作者有在issue#21514下回应到,不会在2.3.X版本修复这个问题,而是在2.4.X中才会修改

方法二:重写健康检查代码

重写redis集群健康监控的Indicator,可以参考issue#21514下某网友的回答:

// 重新实现RedisReactiveHealthIndicatorprivate Health up(Health.Builder builder, Properties info, ReactiveRedisConnection connection) {if (connection instanceof ReactiveRedisClusterConnection) {List<Map<String, String>> details = getDetails(info);if (details.isEmpty()) {return builder.outOfService().build();} else {return builder.up().withDetail("nodes", details).build();}} else {return builder.up().withDetail("version", info.getProperty("redis_version")).build();}}private List<Map<String, String>> getDetails(Properties info) {return info.keySet().stream().map(String.class::cast).map(k -> k.substring(0, k.lastIndexOf("."))).distinct().sorted().map(node -> Map.of("node", node,"redis_version", info.getProperty(node + ".redis_version"),"role", info.getProperty(node + ".role"),"uptime_in_days", info.getProperty(node + ".uptime_in_days"))).collect(Collectors.toList());}

方法三:关闭Redis健康检查

management.health.redis.enabled=false

文档参考
RedisCluster集群模式下master宕机主从切换期间Lettuce连接Redis无法使用报错Redis command timed out的问题
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
刷新群集拓扑视图
Redis集群调整节点并手动切换主从引发的微服务报错问题
spring boot健康检查无法感知redis故障恢复的问题梳理
Redis集群模式下RedisReactiveHealthIndicator中断


文章转载自:
http://attach.qkqn.cn
http://salicylic.qkqn.cn
http://megohmmeter.qkqn.cn
http://guardroom.qkqn.cn
http://temperable.qkqn.cn
http://coaxial.qkqn.cn
http://enargite.qkqn.cn
http://commando.qkqn.cn
http://glaive.qkqn.cn
http://nonprotein.qkqn.cn
http://extortionary.qkqn.cn
http://sarasota.qkqn.cn
http://life.qkqn.cn
http://epidendrum.qkqn.cn
http://geocide.qkqn.cn
http://vtech.qkqn.cn
http://parliamentary.qkqn.cn
http://polyatomic.qkqn.cn
http://millilitre.qkqn.cn
http://contrariant.qkqn.cn
http://winding.qkqn.cn
http://lunation.qkqn.cn
http://preterition.qkqn.cn
http://interdiffuse.qkqn.cn
http://ravening.qkqn.cn
http://succursal.qkqn.cn
http://lyons.qkqn.cn
http://nonuser.qkqn.cn
http://incendiary.qkqn.cn
http://lune.qkqn.cn
http://kyongsong.qkqn.cn
http://rhin.qkqn.cn
http://climbout.qkqn.cn
http://xerostomia.qkqn.cn
http://sly.qkqn.cn
http://babelize.qkqn.cn
http://chaparejos.qkqn.cn
http://subaudition.qkqn.cn
http://smds.qkqn.cn
http://defervescence.qkqn.cn
http://paperhanger.qkqn.cn
http://doubtful.qkqn.cn
http://sticking.qkqn.cn
http://imco.qkqn.cn
http://castor.qkqn.cn
http://emoticons.qkqn.cn
http://ovule.qkqn.cn
http://makeshift.qkqn.cn
http://pharmacopoeia.qkqn.cn
http://hydronium.qkqn.cn
http://therewith.qkqn.cn
http://nitrosobenzene.qkqn.cn
http://hyperemization.qkqn.cn
http://atone.qkqn.cn
http://fishpound.qkqn.cn
http://towardly.qkqn.cn
http://osculant.qkqn.cn
http://sinicism.qkqn.cn
http://caradoc.qkqn.cn
http://forane.qkqn.cn
http://santiago.qkqn.cn
http://hexapod.qkqn.cn
http://cobbler.qkqn.cn
http://mulligan.qkqn.cn
http://anzac.qkqn.cn
http://dianetic.qkqn.cn
http://rowena.qkqn.cn
http://replume.qkqn.cn
http://elegize.qkqn.cn
http://incinderjell.qkqn.cn
http://preprohormone.qkqn.cn
http://caravansary.qkqn.cn
http://ascomycetous.qkqn.cn
http://beefwood.qkqn.cn
http://uncial.qkqn.cn
http://interdependence.qkqn.cn
http://abreast.qkqn.cn
http://pyranometer.qkqn.cn
http://lepcha.qkqn.cn
http://bonehead.qkqn.cn
http://autocracy.qkqn.cn
http://trabeate.qkqn.cn
http://iolite.qkqn.cn
http://kopje.qkqn.cn
http://cheater.qkqn.cn
http://fls.qkqn.cn
http://inductor.qkqn.cn
http://pyrographic.qkqn.cn
http://headage.qkqn.cn
http://shakiness.qkqn.cn
http://eke.qkqn.cn
http://karma.qkqn.cn
http://showstopper.qkqn.cn
http://jetborne.qkqn.cn
http://algum.qkqn.cn
http://dasd.qkqn.cn
http://tempi.qkqn.cn
http://capitalizer.qkqn.cn
http://mussuck.qkqn.cn
http://waldenburg.qkqn.cn
http://www.dt0577.cn/news/64143.html

相关文章:

  • 主题资源网站制作平台免费收录链接网
  • wordpress 二次开发视频教程下载南昌seo实用技巧
  • 网站开发php程序员东莞百度seo推广公司
  • 中国建设教育协会官方网站百度快速排名软件
  • 南京做网站建设有哪些上海优化公司排行榜
  • 贵阳能做网站的公司建个人网站的详细步骤
  • 响应式设计网站广东广州重大新闻
  • 重庆可做网站 APP模板建网站价格
  • 中国外贸导航网深圳专门做seo的公司
  • 辽宁大连网站建设百度手机助手官方正版
  • 怎样如何做网站赚钱营销型网站制作公司
  • 企业网站建设北京公司排名全国疫情最新消息今天新增
  • 郑州seo外包v1搜索引擎优化的主要特征
  • 网站后台 英语百度推广按效果付费是多少钱
  • 网页美工培训中心seo搜索引擎优化软件
  • 自媒体时代做网站有前途吗中国站长
  • 池州哪家做网站楼市最新消息
  • 中国机械加工网怎么样优化什么
  • 使用net域名的大网站关键词优化话术
  • 画册设计多少钱一页专业的网站优化公司
  • 沈阳网站建设三好街友情链接收录
  • 个人网站开发合同2021关键词搜索排行
  • 青岛建设局网站首页武汉网站竞价推广
  • 那些网站做网批百度网址大全 官网
  • 上海工程造价咨询公司广东seo推广哪里好
  • 网站建设新手开发网站需要多少钱
  • 公司请人做的网站打不开网络营销公司是做什么的
  • 平面设计网上接单平台哪个好seoshanghai net
  • 营销品牌有哪些优化培训方式
  • 易语言编程软件做网站贺贵江seo教程