5.4Eureka的自我保护机制
-
概述
-
故障原因
- 为什么会产生Eureka自我保护机制?
为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务 剔除。
- 什么是自我保护模式?——在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。
默认情况下,如果EurekaServer在一定时间内没有接收到某 个微服务实例的心跳, EurekaServer将会注销该实例 (默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过 ” 自我保护模式”来解决这个问题一当EurekaServer节 点在短时间内丢失过多客户端时(可能发生了网络分区故障), 那么这个节点就会进入自我保护模式。
- 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服
务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
-
如何禁止自我保护机制
-
方法:
#自我保护机制是默认开启的 eureka.server.enable-self-preservation=true #使用下列配置可以关闭自我保护机制 eureka.server.enable-self-preservation=false
-
完整的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)
-
脚踏实地,注重基础。