Spring Cloud 学习系列:(三)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.client.register-with-eureka: false
、 eureka.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
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
2、配置相应的机器
peer2 的配置同理,改成 --spring.profiles.active=peer2
3、启动 peer1 以及 peer2
4、访问 http://peer1:8761/
,会发现 “registered-replicas” 中已有 peer2 结点;同理,访问 http://peer2:8762/
,会发现 “registered-replicas” 中已有 peer1 结点。如下图:
这样就完成了将服务注册到了 Eureka Server 集群上,实现了 Eureka Server 的高可用。
推荐阅读
-
Spring Cloud 学习系列:(十三)高可用的分布式配置中心——Spring Cloud Config
-
Spring Cloud--实现Eureka的高可用(Eureka集群搭建)实例
-
spring cloud配置高可用eureka时遇到的一些坑
-
搭建 Spring Cloud Eureka Server 高可用注册中心集群
-
spring-cloud学习之eureka-server服务注册中心的高可用
-
Spring Cloud学习笔记(二)-构建高可用的Eureka Server集群
-
Spring Cloud学习(2)——高可用Eureka Server
-
Spring Cloud 学习系列:(三)Eureka Server 的高可用
-
Spring Cloud --Eureka Server高可用
-
SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)