如何剔除eureka无效和down状态的问题
作者:岸河
这篇文章主要介绍了如何剔除eureka无效和down状态的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
如何剔除eureka无效和down状态
在eureka server的web界面上
我们经常看见有的实例明明被我们关掉了,但是仍然展示在服务实例的列表里面,而且状态还是UP?
这种情况是eureka的自我保护机制导致的。由于eureka和实例之间要进行心跳检测,但是当网络故障时,eureka server不能准确判断这个实例时存活还是死亡,于是采取的默认策略是认为其任然存活。
这是eureka的AP思想(Availability-可用性,Partition-分区容错性)的体现,给予实例存活的状态。
当然我们也可以通过如下配置,来关掉eureka的自我保护机制(仅限开发环境),这样一旦接收不到实例心跳,就将其剔除。
eureka.server.enable-self-preservation=false
但是生产环境是不能使用这种配置的,否则网络状况一不稳定,就将本来是健康的实例剔除掉,会大大降低服务的可用性。
备注:有的文章说造成这种现象的原因是我们的服务没有正常关闭,IDEA中我们直接Stop服务会导致这种状况,如果选择Exit就不会出现这种情况。我还没有验证。
对于一些已经DOWN掉的节点
想直接剔除掉,不想让他展示在界面中?
这个问题和上个问题的解决办法是一致的,如下。
解决办法:
使用Postman发送delete请求,主动删除无效实例。
如图,我们构建上述DELETE请求
DELETE请求 http://localhost:8761/eureka/apps/ABC-BOOT/192.168.1.50:abc-boot:9020 # 格式 http://注册中心地址/eureka/apps/实例名称/节点详细信息
1.注意要使用DELETE请求;
2.注意JESSIONID可以从eureka界面的F12中获取,否则会验证失败。
eureka自动剔除无效的服务
由于Eureka拥有自我保护机制,当其注册表里服务因为网络或其他原因出现故障而关停时,Eureka不会剔除服务注册,而是等待其修复。这是AP的一种实现。
若要剔除无效服务,可以按照以下方式实现
在eureka注册服务中心上配置
server端配置:
eureka: server: enable-self-preservation: false eviction-interval-timer-in-ms: 4000
enable-self-preservation
: 关闭自我保护模式(缺省为打开)eviction-interval-timer-in-ms
: 续期时间,即扫描失效服务的间隔时间
在eureka client节点上配置
client配置:
eureka: instance: lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30
lease-renewal-interval-in-seconds
:表示eureka client发送心跳给server端的频率lease-expiration-duration-in-seconds
: 发呆时间,即服务续约到期时间
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。