Eureka的自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮,稳定的运行。
在正常情况下,Eureka客户端会定期向Eureka服务器发送心跳,以表明它仍然存活和可用。如果Eureka服务器在配置的时间间隔内未能从某个服务器实例收到心跳,它通常会将该实例从注册列表中移除,认为该实例不可用。
然而,在自我保护模式下,如果Eureka服务器在短时间内丢失了对大量服务实例的心跳(15分钟超过85%的客户端),它会认为这是一个网络问题,而不是所有这些服务实例都突然不可用。因此,服务器将进入自我保护模式。
当进入自我保护模式时,会存在以下行为:
- 停止移除服务实例:Eureka服务器在自我保护模式下不会因为缺少心跳而移除任何服务实例,即使服务实例停止发送心跳,它们仍然会被保留在注册表中。
- 保持服务注册表状态:这可以确保在网络故障恢复后,服务消费者仍然能够发现所有原先注册的服务实例,无需等待这些实例重新注册和上线。
- 记录状态和警告:Eureka服务器会在其状态页面上显示它是否处于自我保护模式,并显示相关的警告信息。
Eureka的自我保护模式是可配置的。可以通过配置参数来调整何时触发自我保护模式,或完全关闭此功能。例如,可以通过修改 eureka.server.enable-self-preservation
的配置值来开启或关闭自我保护模式。
eureka:
server:
enable-self-preservation: true
自我保护模式默认是开启的,因为它可以在网络不稳定的环境中提供更稳定的服务发现功能。不建议在生产环境中关闭自我保护模式。
当Eureka进入自我保护模式之后,我们可以做以下几个事情解除这种自我保护:
- 确保客户端可用性:
- 确保所有客户端实例都运行正常,并且网络连接正常,无阻塞或延迟过高。
- 检查客户端与 Eureka Server 之间的网络连接是否稳定。
- 等待自动恢复:
- 正常的情况下,等待网络恢复后,Eureka Server 会自动关闭自我保护模式。
- 重启 Eureka Server:
- 如果问题仍然存在,尝试重启 Eureka Server。有时候,重启可以解决暂时的问题或状态不一致。
- 调整自我保护模式的阈值:
- 检查 eureka.server.enableSelfPreservation 配置项,确保它被设置为 true,这是自我保护模式的开启 开关。
- 你可以调整 eureka.server.renewalPercentThreshold 来改变触发自我保护模式的阈值。
- 查看日志排查问题:
- 查看 Eureka Server 和客户端的日志,找出可能导致问题的具体原因。
- 关闭自我保护模式:
- 使用eureka.server.enable-self-preservation=false来禁用自我保护模式,测试环境可以配置,生产不 建议。