Fork me on GitHub

5.4Eureka的自我保护机制

Eureka的自我保护机制
  1. 概述

  2. 故障原因

    1. 为什么会产生Eureka自我保护机制?

    为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务 剔除。

    1. 什么是自我保护模式?——在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。

    默认情况下,如果EurekaServer在一定时间内没有接收到某 个微服务实例的心跳, EurekaServer将会注销该实例 (默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过 ” 自我保护模式”来解决这个问题一当EurekaServer节 点在短时间内丢失过多客户端时(可能发生了网络分区故障), 那么这个节点就会进入自我保护模式。

    1. 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服
      务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
  3. 如何禁止自我保护机制

    1. 方法:

      #自我保护机制是默认开启的
      eureka.server.enable-self-preservation=true
      #使用下列配置可以关闭自我保护机制
      eureka.server.enable-self-preservation=false
      
    2. 完整的yml配置

      eureka:
        client:
          #表示是否将自己注册进EurekaServer默认为true。false表示不向注册中心注册自己
          register-with-eureka: true
          #false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
          #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
          fetchRegistry: true
          service-url:
            defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka
        instance:
          instance-id: payment8001
          prefer-ip-address: true #访问路径可以显示IP地址
          lease-renewal-interval-in-seconds: 1 #Eureka客户端向服务端发送心跳的时间间隔,单位为秒!
          lease-expiration-duration-in-seconds: 2 #Eureka服务端在接收最后一次心跳后的等待时间上限(默认90s)
      
posted @ 2022-03-22 19:59  壶小旭  阅读(54)  评论(0编辑  收藏  举报