1、自我保护机制
eureka会统计在15分钟之内心跳的失败率,当失败率达到一个阀值时启动自我保护机制,启动自我保护机制后eureka不会移除任何节点,启动自我保护机制时eureka认为失败率高是因为网络等原因导致的心跳失败,而不是服务不可用
2、自我保护机制下出现的问题
描述:
eureka启动自我保护机制后,可能会出现服务不可用但是eureka没有移除的问题,此时服务客户端获取到了服务列表就会导致链接一个不可用服务的问题,此时客户端负载均衡也无法解决该问题。
解决:
2.1、在客户端启动重试机制或断路器,当服务不可用时直接返回错误默认值,防止出现雪崩现象。
2.2、在服务端启动负载均衡,启动多个eureka服务端,由于客户端启动了负载均衡,在获取服务列表时会随机访问eureka服务器,此时连接的就不一定是启动自我保护的服务了。
2.1和2.2由于是不同的处理方式可以同时使用
3、配置
3.1、服务端
eureka:
client:
#是否从eureka服务端获取注册信息
fetch-registry: false
#是否将自己注册为一个服务
register-with-eureka: true
#设置eureka注册服务的地址(eureka为eureka服务的默认服务名)
service-url:
defaultzone: http://localhost:8761/eureka
server:
#单机模式下可以设置为false,暂时关闭自我保护,在生产环境中要开启
enable-self-preservation: true
spring:
application:
#注册时的服务名
name: eureka-service-1
访问服务端url:http://ip:port/
port就是服务启动时设置的tomcat端口
3.2、客户端
spring:
application:
name: eureka-client-1
server:
port: 8081
eureka:
client:
service-url:
#eureka服务端的地址,可以设置多个
defaultZone: http://localhost:8761/eureka
registry-fetch-interval-seconds: 30
4、region和zone说明
spring:
application:
name: eureka-client-1
server:
port: 8081
eureka:
client:
registry-fetch-interval-seconds: 30
#刷新服务列表的时间
eureka-service-url-poll-interval-seconds: 30
#此处配置的时当前客户端可以使用的区域和区域下的可用区
availability-zones:
us-east: us-east-1
china: china-1,china-2
usa: usa-1
#此处配置的是各个可用区的地址
service-url:
defaultZone: http://localhost:8769/eureka
china-1: http://localhost:8764/eureka
china-2: http://localhost:8763/eureka
usa-1: http://localhost:8764/eureka
#当前客户端所在的区域,不设置时默认是us-east-1
region: china
#优先向相同zone的服务注册
prefer-same-zone-eureka: true
instance:
prefer-ip-address: true
metadata-map:
#当前客户端所在可用区
zone: china-0
region和zone的查找规则:启动时eureka使用region去availability-zone中查找是否有对应的region,如果没有使用service-url中的defaultZone,如果能够找到看该区域下有没有对应的zone,如果没有则使用同区域内的其他zone,如果还没有则使用defaultZone,如果有对应的zone但是没有url则使用defaultZone和同区域内的zone,连接时优先使用defaultZone。
客户端的region、zone和服务端的region、zone没有逻辑上联系
.
网友评论