spring cloud高可用注册中心+平滑上下线

spring cloud高可用注册中心

机器配置

准备两台+机器,此处以两台机器做为例子:10.10.10.100,10.10.10.101。
修改系统host,若是用docker发布则在docker-compose.yml文件中配置host。
10.10.10.100 docker host配置:spring

extra_hosts:
 - "eurekapeer:10.10.10.101"

10.10.10.101 docker host配置:docker

extra_hosts:
 - "eurekapeer:10.10.10.100"

eureka配置

主要是将defaultZone中地址指向host中配置的机器,实现注册中心的相互注册已达到高可用。api

eureka:
  client:
    serviceUrl:
      defaultZone: http://eurekapeer:${server.port}/eureka/

按照以上配置启动,打开任意一个注册中心界面:缓存

  • 会在DS Replicas栏中看到另外一台机器的信息,
  • 会在Instances currently registered with Eureka栏中看到两个注册中心的信息

client配置

主要是配置defaultZone指向两个注册中心便可负载均衡

eureka:
  client:
    serviceUrl:
      defaultZone: http://10.10.10.100:8181/eureka/,http://10.10.10.101:8181/eureka/

spring cloud平滑上下线

关注点

  • eureka快速剔除已下线服务
  • zuul网关快速拉取服务列表
  • 服务不可达时进行重试

eureka快速剔除已下线服务

  • client端加快对eureka的心跳频率,并缩短续期时间
  • 端加快情侣无效服务间隔

这样一来,理论上最长剔除不可用服务时间=client心跳频率+client续期时间+服务端剔除无效服务间隔时间。fetch

eureka服务端配置:code

eureka:
  server:
    eviction-interval-timer-in-ms: 5000 #清理无效服务间隔(单位毫秒,默认是1分钟)

eureka客户端配置:server

eureka:
  instance:
    lease-renewal-interval-in-seconds: 5 #eureka client发送心跳给server端的频率(默认30秒)
    lease-expiration-duration-in-seconds: 10 #eureka client发送心跳给server端后,续约到期时间(默认90秒)

zuul网关快速拉取服务列表

zuul网关会去eureka拉取服务列表并进行缓存,咱们尽可能缩短拉取时间:接口

eureka:
  client:
    registry-fetch-interval-seconds: 3 #client间隔多久去拉取服务注册信息(默认30秒)对于api-gateway若是要迅速获取服务注册状态,能够缩小该值

当一个服务下线后,eureka并不会当即剔除,在此期间若是zuul使用缓存服务,或者获取到了已下线服务,此时对请求进行转发时会致使服务不可达返回500错误,这种状况线下能够配置zuul重试,注意此处的重试不是配置zuul对异常接口的重试;zuul配置以下:部署

#服务下线后,zuul重试
ribbon:
  OkToRetryOnAllOperations: true #是否全部操做都重试,若false则仅get请求重试
  MaxAutoRetriesNextServer: 1 #重试负载均衡其余实例最大重试次数,不含首次实例
  MaxAutoRetries: 0   #(同一实例最大重试次数,不含首次调用)
  retryableStatusCodes: 404,500,503

zuul对异常接口的重试:
spring cloud中默认的熔断时间是1000ms,若是单个服务接口响应时间超过此配置时长,此时若是须要zuul进行重试,则如此配置:

zuul:
  retryable: true

这种状况下须要考虑接口的幂等性。

##关于发布 集群发布时最好单个服务单台进行部署,理论上单个服务之间部署时间间隔最少须要大于:client心跳+client续期+eureka剔除+zuul获取服务时间。

相关文章
相关标签/搜索