SpringCloud 高可用的 Eureka Server 集群

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

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

18721079-28a33c8b55ed7a5d
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

18721079-3e68c1e94a5fe2dd
SpringCloud 高可用的 Eureka Server 集群

applicatiom-peer1.yml 的 配置内容如下:

#高可用的Eureka-Server 集群 peer1spring:  application:    name: Eureka-Server-peer  #应用名称,也是服务注册的名称server:  port: 8001  #开启端口eureka:  instance:    prefer-ip-address: true #提交ip信息    status-page-url-path: /actuator/info #信息查询的url link    health-check-url-path: /actuator/health #健康检查的url    hostname: peer1    #主机名  client:    #在默认情况下,Eureka servce 会向自己注册,这时需要设置registerWithEureka和fetchRegistry 为false,防止自己注册自己    #在Eureka集群中,允许注册中心自己作为服务向其他注册中心注册自己,这样就可以形成一组相互注册的注册中心,他们互相同步服务清单,做到了我们要的高可用    #是否将自己注册到Eureka Server 默认为true    registerWithEureka: true    #是否从Eureka Server查询注册信息    fetchRegistry: true    #服务注册地址    serviceUrl:      #与Eureka Server交互的地址,查询服务和服务注册都需要依赖这个地址,      #默认为http://localhost:8761/eureka,  多个地址用","分割      defaultZone: http://peer2:8002/eureka/,http://peer3:8003/eureka/  server:    #enable-self-preservation: true        #开启自我保护模式    #eviction-interval-timer-in-ms: 4000    #清理服务间隔4s,默认60*10000 

applicatiom-peer2.yml 的 配置内容如下:

#高可用的Eureka-Server 集群 peer2spring:  application:    name: Eureka-Server-peer  #应用名称,也是服务注册的名称server:  port: 8002  #开启端口eureka:  instance:    prefer-ip-address: true #提交ip信息    status-page-url-path: /actuator/info #信息查询的url link    health-check-url-path: /actuator/health #健康检查的url    hostname: peer2    #主机名  client:    #在默认情况下,Eureka servce 会向自己注册,这时需要设置registerWithEureka和fetchRegistry 为false,防止自己注册自己    #在Eureka集群中,允许注册中心自己作为服务向其他注册中心注册自己,这样就可以形成一组相互注册的注册中心,他们互相同步服务清单,做到了我们要的高可用    #是否将自己注册到Eureka Server 默认为true    registerWithEureka: true    #是否从Eureka Server查询注册信息    fetchRegistry: true    #服务注册地址    serviceUrl:      #与Eureka Server交互的地址,查询服务和服务注册都需要依赖这个地址,      #默认为http://localhost:8761/eureka,  多个地址用","分割      defaultZone: http://peer1:8001/eureka/,http://peer3:8003/eureka/  server:    #enable-self-preservation: true        #开启自我保护模式    #eviction-interval-timer-in-ms: 4000    #清理服务间隔4s,默认60*10000 

applicatiom-peer3.yml 的 配置内容如下:

#高可用的Eureka-Server 集群 peer2spring:  application:    name: Eureka-Server-peer  #应用名称,也是服务注册的名称server:  port: 8003  #开启端口eureka:  instance:    prefer-ip-address: true #提交ip信息    status-page-url-path: /actuator/info #信息查询的url link    health-check-url-path: /actuator/health #健康检查的url    hostname: peer3    #主机名  client:    #在默认情况下,Eureka servce 会向自己注册,这时需要设置registerWithEureka和fetchRegistry 为false,防止自己注册自己    #在Eureka集群中,允许注册中心自己作为服务向其他注册中心注册自己,这样就可以形成一组相互注册的注册中心,他们互相同步服务清单,做到了我们要的高可用    #是否将自己注册到Eureka Server 默认为true    registerWithEureka: true    #是否从Eureka Server查询注册信息    fetchRegistry: true    #服务注册地址    serviceUrl:      #与Eureka Server交互的地址,查询服务和服务注册都需要依赖这个地址,      #默认为http://localhost:8761/eureka,  多个地址用","分割      #defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/  server:    #enable-self-preservation: true        #开启自我保护模式    eviction-interval-timer-in-ms: 4000    #清理服务间隔4s,默认60*10000 

其中:设置 enable-self-preservation: true #开启自我保护模式在默认配置中,Eureka Server在默认90s没有得到客户端的心跳,则注销该实例,但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。为了解决这个问题,Eureka 有自我保护机制,通过在Eureka Server配置如下参数,可启动保护机制。

enable-self-preservation: true

它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。

(在开发中 可以不设置,方便开发)

2.2 修改 application.yml 的内容:

#高可用的Eureka-Server 集群spring:  profiles:    active: peer1 

2.3 因为我们是在windows 上 搭建的,只要一台机器,要构建集群,需要修改HOSTS文件,添加主机名映射。

修改C:\Windows\System32\drivers\etc\HOSTS文件

127.0.0.1 localhost127.0.0.1 peer1127.0.0.1 peer2127.0.0.1 peer3 

2.4 在idea中设置3个启动方式,并分别设置启动时应用的配置文件名,springboot中约定 配置文件以application-{profiles}.xxx的方式命名

18721079-1c2921c87135060d
SpringCloud 高可用的 Eureka Server 集群
18721079-4240008944fa8007
SpringCloud 高可用的 Eureka Server 集群

3个同时启动,分别访问 localhost:8001, localhost:8002, localhost:8003得到的结果如下:

18721079-221061c41f30b2fe
SpringCloud 高可用的 Eureka Server 集群
18721079-766409bc3d183441
SpringCloud 高可用的 Eureka Server 集群
18721079-f4ba8c574448fcad
SpringCloud 高可用的 Eureka Server 集群

三:修改eureka-client 客户端项目 的配置文件

代码如下:

server:  port: 8762spring:  #配置程序名为eureka-client  application:    name: eureka-clienteureka:  client:    #服务注册地址    serviceUrl:      #注意: Eureka Server 的注册地址      #将服务提供者注册到三个Eureka Server中去      defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/,http://peer3:8003/eureka/      #http://localhost:8761/eureka/  

启动 eureka-client 项目,结果如下:

18721079-cfbe7c36a96da3b1
SpringCloud 高可用的 Eureka Server 集群
18721079-b3b03c1d4c595b90
SpringCloud 高可用的 Eureka Server 集群
18721079-e63fa3abf4387a54
SpringCloud 高可用的 Eureka Server 集群

原文链接:https://juejin.im/post/5dfcbc1e6fb9a016230acf8d

关注我了解更多程序员资讯技术,领取丰富架构资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值