【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 Eureka集群高可用搭建

待我称王封你为后i 2024-04-18 23:19 125阅读 0赞

文章目录

    • Eureka Server的高可用
    • 构建一个双节点Eureka Server集群
      • 将应用注册到Eureka Server集群上
    • 参考
    • 源代码

Eureka Server的高可用

单节点Eureka Server并不适合线上生产环境。Eureka Client会定时连接Eureka Server,获取服务注册表中的信息并缓存在本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Client中的缓存若不被更新,就可能会影响到微服务的调用,甚至影响到整个应用系统的高可用性。因此,在生产环境中,通常会部署一个高可用的Eureka Server集群。

Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为。

Eureka Server的设计一开始就考虑了高可用问题,在Eureka的服务治理设计中,所有节点即是服务提供方,也是服务消费方,服务注册中心也不例外。是否还记得在单节点的配置中,我们设置过下面这两个参数,让服务注册中心不注册自己:

  1. eureka.client.register-with-eureka=false
  2. eureka.client.fetch-registry=false

构建一个双节点Eureka Server集群

首先配置我们的hosts文件,加入如下的配置:

  1. 127.0.0.1 peer1 peer2

配置application.yml

  1. spring:
  2. application:
  3. name: cloud-eureka
  4. ---
  5. spring:
  6. profiles: peer1
  7. server:
  8. port: 8761
  9. eureka:
  10. instance:
  11. # 当指定profile=peer1 主机名是localhost,端口是8761
  12. hostname: peer1
  13. client:
  14. service-url:
  15. defaultZone: http://peer2:8762/eureka/
  16. ---
  17. spring:
  18. profiles: peer2
  19. server:
  20. port: 8762
  21. eureka:
  22. instance:
  23. # 当指定profile=peer2 主机名是localhost,端口是8762
  24. hostname: peer2
  25. client:
  26. service-url:
  27. defaultZone: http://peer1:8761/eureka/

如上,使用连字符(—)将该application.yml文件分为三段。第二段和第三段分别为spring.properties指定了一个值,该值表示它所在的那段内容应用在哪个Profile里。
第一段由于并未指定spring.profiles,因此这段内容会对所有Profile生效。
经过以上分析,不难理解,我们定义了peer1和peer2这两个Profile。当应用以peer1这个Profile启动时,配置该Eureka Server的主机名为peer1,并将其注册到http://peer2:8762/eureka/;反之,当应用以profile=peer2时,Eureka Server会注册到peer1节点的Eureka Server。

然后我们设置一下IDEA的spring boot启动配置,修改一下Active profiles的参数即可。

在这里插入图片描述
在这里插入图片描述

然后我们启动peer1和peer2。

分别访问http://localhost:8761/ 和 http://localhost:8762/

在这里插入图片描述
在这里插入图片描述

此时访问 peerl的注册中心http://localhost:8761/,如下图所示,我们可以看到,registered-replicas中已经有peer2节点的eureka-server了。同样的,我们访问peer2的注册中心http://localhost:8762/,也能看到registered-replicas中已经有peer1节点,并且这些节点在可用分片(available-replicase)之中。
我们也可以尝试关闭peer1,刷新http://localhost:8762/,可以看到peer1的节点变为了不可用分片(unavailable-replicas)。

将应用注册到Eureka Server集群上

只须修改eureka.client.service-url.defaultZone,配置多个Eureka Server地址,就可以将其注册到Eureka Server集群了。示例:

  1. eureka:
  2. client:
  3. service-url:
  4. defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

这样就可以将服务注册到Eureka Server集群上了。
当然,微服务即使只配置Eureka Server集群中的某个节点,也能正常注册到Eureka Server集群,因为多个Eureka Server之间的数据会相互同步。
正常情况下,这种方式与配置多个Server节点的效果是一样的。不过为适应某些极端场景,建议在客户端配置多个Eureka Server节点。

参考

Spring+Cloud微服务实战.pdf

解决Eureka服务的available-replicas为空的问题

Spring Cloud 探索 | Eureka 高可用部署及 unavailable-replicas 问题

ds replicas是什么

源代码

https://gitee.com/cckevincyh/spring-cloud-demo/tree/eureka-replicas

发表评论

表情:
评论列表 (有 0 条评论,125人围观)

还没有评论,来说两句吧...

相关阅读