关闭 Eureka 自我保护模式

转载声明 : 该文章出处为 扛麻袋的少年

Tips:生产环境中不建议关闭 Eureka 的自我保护模式

什么是保护模式

  保护模式,主要用于一组客户端 和 Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server 将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务实例。

  当我们在 Eureka Server 服务首页中,看到有如下这段提示,则说明此时 Eureka Server 已经进入了保护模式。
在这里插入图片描述

Eureka Server 为什么会进入保护模式

  默认情况下,如果 Eureka Server 在一定时间内没有收到某个微服务实例的心跳,Eureka Server 便会将该实例注销。 (默认是90s)

  但是 当网络分区发生故障(延迟、卡顿、拥挤)时,微服务与 Eureka Server 之间是无法正常通信的,在这种情况下微服务本身其实是健康的,本来是不应该注销这个服务的,此时 Eureka 便会通过 “自我保护模式” 来解决这个问题。

  Eureka 的自我保护机制,就是 CAP 原则中的 AP 分支。即满足:可用性分区容错性

CAP 原则又称 CAP 定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

如何禁用自我保护

  在 Eureka 中,自我保护模式默认是 开启 的。此处也只是来演示一下如何关闭。生产环境中是不建议关闭 Eureka 的自我保护模式

1.Eureka Server 端操作

添加如下配置信息:

eureka:
  server:
    #关闭自我保护机制,保证不可用服务被及时剔除
    enable-self-preservation: false
    #清理无效节点的时间间隔,默认60000毫秒,即60秒 (此处时间间隔设置为2s)
    eviction-interval-timer-in-ms: 2000

 
  
  

此时,在启动 Eureka Server 时,便会看到一条鲜明的提示信息。
在这里插入图片描述

2. Eureka Client 端操作

添加如下配置信息:

eureka:
  instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为妙(默认是30s)
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳后的等待时间上限,单位为秒(默认90s),超时将移除服务
    lease-expiration-duration-in-seconds: 2

 
  
  

到此处,配置就已经全部完成。

3.测试结果

在这里插入图片描述
  这种情况下,我们手动将该微服务停止,Eureka Server 便会在 2s 超时过后,将其移除服务。不会给它任何的机会,当遇到网络 延迟、卡顿、拥挤 时,这种操作显然是不友好的。

所以大多数情况下,还是建议不要关闭 Eureka 的自我保护模式。

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/108460794
今日推荐