Spring Cloud系列(六)Neflix Eureka高可用

1

Eureka较zookeeper和consul比较,他具备以下特点

1,AP(最终一致性),采用的是HTTP 定时轮训方式。主要是保证高可用。

2,适用规模:2000多个 实例(节点)。

2

Neflix Eureka高可用

客户端高可用

高可用注册中心集群

单机模拟多台Eureka服务器

1,在工程里面添加多份配置文件

application-pro1.properties:

spring.application.name=eureka-server

server.port=9090

##取消服务器自我注册上报的功能

eureka.client.register-with-eureka=false

##不需要检索服务

eureka.client.fetch-register=false

##eureka server 服务的Url 用于客户端注册

eureka.client.serviceUrl.defaultZone=\

http://localhost:$/eureka

application-pro2.properties:

spring.application.name=eureka-server

server.port=9091

##取消服务器自我注册上报的功能

eureka.client.register-with-eureka=false

##不需要检索服务

eureka.client.fetch-register=false

##eureka server 服务的Url 用于客户端注册

eureka.client.serviceUrl.defaultZone=\

http://localhost:$/eureka

2,使用Program arg的方式配置--spring.profiles.active=pro2和--spring.profiles.active=pro1先后激活这两台服务。

3,在浏览器中输入地址http://localhost:9090/,http://localhost:9091/ ,即可访问这两台服务

客户端配置

1,在客户端的配置文件中添加如下配置:

eureka.client.serviceUrl.defaultZone=\

http://localhost:9091/eureka,http://localhost:9090/eureka

2,先后启动我们的服务提供者(多台)和消费者

这里有个小技巧:可以配置服务提供者的随机端口的范围,这样就不需要重复的去修改配置。

即在配置文件中添加server.port=$即可。

3,再次在浏览器中输入地址http://localhost:9090/,http://localhost:9091/ 访问这两台服务。我们可以看到如图所示内容,其中一台服务没有注册任何实例?这是因为:如果 Eureka 客户端应用配置多个 Eureka 注册服务器,那么默认情况只有第一台可用的服务器,存在注册信息。如果 第一台可用的 Eureka 服务器 Down 掉了,那么 Eureka 客户端应用将会选择下一台可用的 Eureka 服务器。

其他的重要配置

获取注册信息时间间隔

Eureka 客户端需要获取 Eureka 服务器注册信息,这个方便服务调用。Eureka 客户端:EurekaClient,关联应用集合:Applications单个应用信息:Application,关联多个应用实例。单个应用实例:InstanceInfo 。当 Eureka 客户端需要调用具体某个服务时,比如消费者调用服务提供者,服务提供者实际对应对象是Application,关联了许多应用实例(InstanceInfo)。见源码:

如果应用服务提供者的应用实例发生变化时,那么服务消费者是需要感知的(拉的模式)。比如:服务提供者机器从10 台降到了5台,那么,作为调用方的服务消费者需要知道这个变化情况。可是这个变化过程,可能存在一定的延迟,可以通过调整注册信息时间间隔来减少错误。具体的配置项如下:

## 调整注册信息的获取周期,默认值:30秒

eureka.client.registryFetchIntervalSeconds = 5

实例信息复制时间间隔

实例Id

实例端点映射

我们在Eureka Server Dashboard 点击跳转默认配置是/info,可以修改配置项如下,调整请求的地址。

## Eureka 客户端应用实例状态 URL

eureka.instance.statusPageUrlPath = /health

可以在EurekaInstanceConfigBean类中找到具体的设计(private String statusPageUrlPath = "/info")

服务端高可用

1,修改上面的注册服务器的配置信息

application-pro1.properties:

spring.application.name=eureka-server

server.port=9090

##取消服务器自我注册上报的功能

eureka.client.register-with-eureka=true

##不需要检索服务

eureka.client.fetch-register=true

##eureka server 服务的Url 用于客户端注册

eureka.client.serviceUrl.defaultZone=\

http://localhost:9091/eureka

application-pro2.properties:

spring.application.name=eureka-server

server.port=9091

##取消服务器自我注册上报的功能

eureka.client.register-with-eureka=true

##不需要检索服务

eureka.client.fetch-register=true

##eureka server 服务的Url 用于客户端注册

eureka.client.serviceUrl.defaultZone=\

http://localhost:9090/eureka

2,按上面的方式启动服务,在浏览器中访问,如图所示,发现注册的服务不再只有一台服务上有信息了,且两台服务互为副本。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815G1Z0RB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券