Eureka心跳健康检查机制
- 运行心跳健康检查机制的目的是为了删除Eureka服务器注册表中不可访问的微服务。
- 心跳是由Eureka客户端发送给Eureka服务器的,让服务器了解其状态
- 心跳机制需要在微服务嵌入一个客户端,用来发送心跳,但是客户端本身必须确定其自身为健康状态
- Eureka服务器必须为客户端公开一些REST操作以让其发布心跳。
自我保护机制
EurekaServer不会将EurekaClient服务及时剔除
- 保护模式主要用与一组EurekaClient客户端和EurekaServer之间存在网络分区场景下的保护。
- 一旦进入保护模式,EurekaServer将会保护其注册表中的服务,不再删除服务注册表中的数据,也就是不会注销任何微服务
什么是自我保护模式
- 默认情况下如果EurekaServer在一段时间内(默认90s)没有接受到某个微服务的心跳,那么就会判断这个微服务已经死亡,然后在服务注册表中注销该微服务。
- 但是当网络分区发生故障(延时、卡顿、拥挤)时,微服务与EurekaServer无法正常通信,但微服务本身是健康的,那么就不应该注销这个微服务。
- 此时Eureka将会开启自我保护模式来解决这个问题----当EurekaServer节点在短时间内丢失过多客户端时,就会开启自我保护模式,不再注销任何微服务
EurekaServer服务端配置自我保护和剔除无心跳微服务等待时间:
eureka:
...
server:
# 关闭自我保护机制,保证不可用服务及时剔除
enable-self-preservation: false
# 设置剔除间隔毫秒:2秒内微服务没有心跳就剔除,默认是90s的
eviction-interval-timer-in-ms: 2000
EurekaClient客户端配置心跳发送间隔和剔除微服务心跳等待时间:
eureka:
...
instance:
# Eureka客户端向服务端发送心跳时间的间隔,单位为秒(默认是30秒)
lease-renewal-interval-in-seconds: 1
# Eureka服务端在收到最后一次心跳后等待时间的一个上限,单位为秒(默认是90秒),超市将剔除服务
lease-expiration-duration-in-seconds: 2