(五)SpringCloud学习笔记之服务注册Eureka高级

1 Eureka Server 高可用集群

在上一个章节,实现了单节点的Eureka Server的服务注册与服务发现功能。Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Server中的缓存若不被刷新,就可能会影响到微服务的调用,甚至影响到整个应用系统的高可用。因此,在生成环境中,通常会部署一个高可用
的Eureka Server集群。
Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为。
在这里插入图片描述

1.1 搭建 Eureka Server高可用集群

(1)修改配置文件

# 模拟两个eureka server
# 端口9000,8000
server:
  port: 9000 #端口
#  port: 8000 #端口
#配置eureka server
eureka:
  client:
    register-with-eureka: false #是否将自己注册到注册中心
    fetch-registry: false #是否从eureka中获取注册信息
    service-url: #配置暴露给Eureka Client的请求地址
      defaultZone: http://127.0.0.1:8000/eureka/
#      defaultZone: http://127.0.0.1:9000/eureka/
  server:
      enable-self-preservation: false #关闭自我保护
      eviction-interval-timer-in-ms: 4000 #剔除时间间隔,单位:毫秒

1.2 服务注册到Eureka Server集群

如果需要将微服务注册到Eureka Server集群只需要修改yml配置文件即可

eureka:
  client:
    service-url:  # eureka server的路径
      defaultZone: http://127.0.0.1:9000/eureka/,http://127.0.0.1:8000/eureka/ #注册到多个eureka server,用逗号分隔

2 Eureka中的常见问题

2.1 服务注册慢

默认情况下,服务注册到Eureka Server的过程较慢。SpringCloud官方文档中给出了详细的原因
在这里插入图片描述
大致含义:服务的注册涉及到心跳,默认心跳间隔为30s。在实例、服务器、客户端都在本地缓存中具有相同的元数据之前,服务不可用于客户端发现(所以可能需要3次心跳)。可以通过配置eureka.instance.leaseRenewalIntervalInSeconds (心跳频率)加快客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为在服务器内部有一些计算,他们对续约做出假设。

# 配置 eureka client
eureka:
  client:
    service-url:  # eureka server的路径
      defaultZone: http://127.0.0.1:9000/eureka/,http://127.0.0.1:8000/eureka/ #注册到多个eureka server,用逗号分隔
  instance:
    lease-renewal-interval-in-seconds: 5 #配置发送心跳续约间隔(心跳频率)
    lease-expiration-duration-in-seconds: 10 #eureka client发送心跳给server端后,续约到期时间(默认90秒)

2.2 服务节点剔除问题

默认情况下,由于Eureka Server剔除失效服务间隔时间为90s且存在自我保护的机制。所以不能有效而迅速的剔除失效节点,这对开发或测试会造成困扰。解决方案如下:
Eureka Server:
配置关闭自我保护,设置剔除无效节点的时间间隔

#配置eureka server
eureka:
  server:
      enable-self-preservation: false #关闭自我保护
      eviction-interval-timer-in-ms: 4000 #剔除时间间隔,单位:毫秒

Eureka Client:
配置开启健康检查,并设置续约时间

# 配置 eureka client
eureka:
  client:
    healthcheck: true #开启健康检查(依赖spring-boot-actuator)
    service-url:  # eureka server的路径
      defaultZone: http://127.0.0.1:9000/eureka/
  instance:
    prefer-ip-address: true #使用ip注册
    lease-renewal-interval-in-seconds: 5 #发送心跳续约间隔
    lease-expiration-duration-in-seconds: 10 #eureka client发送心跳给server端后,续约到期时间(默认90秒)

2.3 监控页面显示ip

在Eureka Server的管控台中,显示的服务实例名称默认情况下是微服务定义的名称和端口。为了更好的对所有服务进行定位,微服务注册到Eureka Server的时候可以手动配置示例ID。配置方式如下

# 配置 eureka client
eureka:
  instance:
    prefer-ip-address: true #使用ip注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务id

.在这里插入图片描述

3 Eureka源码解析

发布了33 篇原创文章 · 获赞 0 · 访问量 348

猜你喜欢

转载自blog.csdn.net/weixin_43596905/article/details/105112268