解决 Eureka Server 不踢出已关停的节点问题的方法

JAVA herman 1322浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

Eureka Server 服务启动后,我们注册到 Eureka Server 的服务关闭或停掉的应用,Eureka Server 默认会保留这些节点,并不会把它们立即删除掉。从而达到误删除高可用,但是这样会产生一些其他问题,那么如何让 Eureka Server 踢出已关停的节点呢?本文来告诉你答案。

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. 

首先我们需要明白,Eureka Server 为什么会不踢出已关停的节点。原因是它的自我保护机制。既然知道了原因,那么我们就可以尝试是否可以关闭掉 Eureka Server 的自我保护机制呢?

答案当然是可以的,Eureka Server 提供了一些配置,我们只需要略做配置上的改动即可。

由于Eureka拥有自我保护机制,当其注册表里服务因为网络或其他原因出现故障而关停时,Eureka不会剔除服务注册,而是等待其修复。这是AP的一种实现。 
为了让其有精准的 CP健康检查,可以采取让其剔除不健康节点。

server端:

eureka.server.enable-self-preservation			(设为false,关闭自我保护主要)
eureka.server.eviction-interval-timer-in-ms     清理间隔(单位毫秒,默认是60*1000)

client端:

eureka.client.healthcheck.enabled = true//开启健康检查(需要spring-boot-starter-actuator依赖)
eureka.instance.lease-renewal-interval-in-seconds =10//租期更新时间间隔(默认30秒)
eureka.instance.lease-expiration-duration-in-seconds =30//租期到期时间(默认90秒

server端配置示例:

eureka:
    server:
        enableSelfPreservation: false
        evictionIntervalTimerInMs: 4000

客户端端配置示例:

eureka:
    instance:
        leaseRenewalIntervalInSeconds: 10
        leaseExpirationDurationInSeconds: 30

注意:更改Eureka更新频率将打破服务器的自我保护功能。

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 解决 Eureka Server 不踢出已关停的节点问题的方法