一、Eureka自我保护
1.1、故障现象
保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。如果在Eureka Server的首页看到以下这段提示,则说明Eureka进入了保护模式:
1.2、故障原因
注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
一句话:某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存;
属于CAP里面的AP分支;
1.3、怎么禁止自我保护
出厂默认:
自我保护机制是开启的:eureka.server.enable-self-preservation=true
# Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
eureka.instance.lease-renewal-interval-in-seconds=30
# Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
eureka.instance.lease-expiration-duration-in-seconds=90
使用eureka.server.enable-self-preservation = false 可以禁用自我保护模式
1.3.1、application.yml(8001)
server:port: 8001spring:application:name: cloud-payment-servicedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/20230906_springcloud_alibaba?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: truemapper-locations: classpath:mappers/*.xmlglobal-config:db-config:# 基于雪花算法生成idid-type: assign_idlogic-delete-field: deletedlogic-not-delete-value: 0logic-delete-value: 1type-aliases-package: org.star.entity.modeleureka:client:# true:表示是否将自己注册进EurekaServer,默认为trueregister-with-eureka: true# 是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: trueservice-url:# 单机版defaultZone: http://localhost:7001/eureka# 集群版# defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurekainstance:instance-id: payment8001prefer-ip-address: true# Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)lease-renewal-interval-in-seconds: 1
1.3.2、application.yml(7001)
server:port: 7001eureka:instance:hostname: localhostclient:# false:表示不向注册中心注册自己、true:表示向注册中心注册自己register-with-eureka: false# false:表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: false