SpringCloud 高可用的 Eureka Server 集群

一:为什么要搭建Eureka Server 集群

在一个分布式系统中,服务注册中心是最重要的基础部分,如果是单点话,遇到故障就是毁灭性的,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。Eureka通过互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。
Eureka集群框架图如下:
SpringCloud 高可用的 Eureka Server 集群

二:搭建Eureka Server

上一篇 我们 搭建了一个单机版的Eureka Server ,在这个基础上我们进行改造。2.1 首先更改eureka-server 的配置文件 application.yml,我采用的是多profile的格式。创建3个application.yml文件,分别为 applicatiom-peer1.yml ,applicatiom-peer2.yml ,applicatiom-peer3.yml
SpringCloud 高可用的 Eureka Server 集群
applicatiom-peer1.yml 的 配置内容如下:
SpringCloud 高可用的 Eureka Server 集群
applicatiom-peer2.yml 的 配置内容如下:
SpringCloud 高可用的 Eureka Server 集群applicatiom-peer3.yml 的 配置内容如下:
SpringCloud 高可用的 Eureka Server 集群
其中:设置 enable-self-preservation: true #开启自我保护模式在默认配置中,Eureka Server在默认90s没有得到客户端的心跳,则注销该实例,但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。为了解决这个问题,Eureka 有自我保护机制,通过在Eureka Server配置如下参数,可启动保护机制。 enable-self-preservation: true 它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。(在开发中 可以不设置,方便开发)

2.2 修改 application.yml 的内容:
SpringCloud 高可用的 Eureka Server 集群
2.3 因为我们是在windows 上 搭建的,只要一台机器,要构建集群,需要修改HOSTS文件,添加主机名映射。
修改C:\Windows\System32\drivers\etc\HOSTS文件
SpringCloud 高可用的 Eureka Server 集群
2.4 在idea中设置3个启动方式,并分别设置启动时应用的配置文件名,springboot中约定 配置文件以application-{profiles}.xxx的方式命名
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
3个同时启动,分别访问 localhost:8001, localhost:8002, localhost:8003得到的结果如下:
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
三:修改eureka-client 客户端项目 的配置文件
代码如下:
SpringCloud 高可用的 Eureka Server 集群
启动 eureka-client 项目,结果如下:
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群