欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud 学习系列:(三)Eureka Server 的高可用

程序员文章站 2022-06-12 15:21:02
...

一、前言

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

Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server 实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点相互注册是 Eureka Server 的默认行为,还及得上一篇的单节点 Eureka Server 时,额外配置了 eureka.client.register-with-eureka: falseeureka.client.fetch-registry: false

二、怎么实现 Eureka Server 高可用

本文在上一篇的单节点基础上,构建一个双节点的 Eureka Server 集群。

1、复制上一篇的项目 microservice-eureka,将 artifactId 修改为 microservice-eureka-ha。

2、配置系统的hosts,Windows 系统的 hosts 文件路径是 C:\Windows\System32\drivers\etc\hosts;Linux 及 Mac OS 等系统的文件路径是 /etc/hosts。

127.0.0.1 peer1
127.0.0.1 peer2

Spring Cloud 学习系列:(三)Eureka Server 的高可用
3、修改 application.yml : 让两个节点的 Eureka Server 相互注册。

spring:
  application:
    name: microservice-eureka-ha-server

---
spring:
  # 指定profile=peer1
  profiles: peer1
server:
  port: 8761
eureka:
  instance:
    # 指定当profile=peer1时,主机名是peer1
    hostname: peer1
  client:
    service-url:
      # 将自己注册到peer2这个Eureka上面去
      default-zone: http://peer2:8762/eureka/

---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    service-url:
      default-zone: http://peer1:8761/eureka/

4、将应用注册到 Eureka Server 上

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

eureka:
  client:
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

三、测试

1、Edit Configurations
Spring Cloud 学习系列:(三)Eureka Server 的高可用
2、配置相应的机器

Spring Cloud 学习系列:(三)Eureka Server 的高可用

peer2 的配置同理,改成 --spring.profiles.active=peer2

3、启动 peer1 以及 peer2

4、访问 http://peer1:8761/ ,会发现 “registered-replicas” 中已有 peer2 结点;同理,访问 http://peer2:8762/ ,会发现 “registered-replicas” 中已有 peer1 结点。如下图:

Spring Cloud 学习系列:(三)Eureka Server 的高可用

Spring Cloud 学习系列:(三)Eureka Server 的高可用
这样就完成了将服务注册到了 Eureka Server 集群上,实现了 Eureka Server 的高可用。