SpringCloud进击 | 七深入:高可用的服务注册中心【Finchley版本】

1.前言

浅出系列的第一节:SpringCloud进击 | 一浅出:服务注册与发现(Eureka)【Finchley版本】介绍了服务注册与发现,其中服务注册中心,是一个实例,所以,当成千上万个服务向它注册的时候,它的负载是非常高的,如果遇到故障就是毁灭性的,这在生产环境上是不理想的架构,所以,我们需要 Eureka Server 集群化。

在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。Eureka 通过互相注册的方式来实现高可用的部署,所以我们只需要将 Eureke Server 配置其他可用的 service-url 就能实现高可用部署。

 

2.准备

先来回顾一下前面浅出部分我们都完成了什么:

  1. 构建 服务注册中心:wei-eureka-server,端口号:8090
  2. 创建 服务提供者:wei-service-provider,端口号:8010
  3. 创建 服务消费者:wei-consumer-ribbon,端口号:8020 和 wei-consumer-feign,端口号:8030
  4. 实现 Spring Cloud Netflix Hystrix 断路器 的融断机制
  5. 实现 服务网关的映射和过滤器:wei-gateway-zuul,端口号:8040
  6. 实现 服务配置中心:wei-config-server,端口号:8050 和 wei-config-client,端口号:8060

嗯。这么看,似乎一个微服务框架已经完成了。

嗯,接下来,我们将对这些之前写的模块进行功能改造和升级,所以接下来的深入系列将继续延用之前写好的代码。

 

3.进击

3.1.Eureka Server 集群

我们尝试一下 Eureka Server 多节点注册中心的搭建。很简单。

3.1.1.配置文件

a)创建配置文件 application-peer1.yml,设置端口为 8091,作为 peer1 服务中心的配置,并将 service-url 指向 peer2、peer3 节点。

server:
  port: 8091
spring:
  application:
    name: wei-eureka-server
eureka:
  instance:
    hostname: peer1
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer2:8092/eureka/, http://peer3:8093/eureka/

b)创建配置文件 application-peer2.yml,设置端口为 8092,作为 peer2 服务中心的配置,并将 service-url 指向 peer1、peer3 节点。

server:
  port: 8092
spring:
  application:
    name: wei-eureka-server
eureka:
  instance:
    hostname: peer2
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8091/eureka/, http://peer3:8093/eureka/

c)创建配置文件 application-peer3.yml,设置端口为 8093,作为 peer3 服务中心的配置,并将 service-url 指向 peer1、peer2 节点。

server:
  port: 8093
spring:
  application:
    name: wei-eureka-server
eureka:
  instance:
    hostname: peer3
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8091/eureka/, http://peer2:8092/eureka/

3.2.配置本地 host

drivers/etc 下,修改 hosts 文件,添加配置:

127.0.0.1 peer1 peer2 peer3

3.3.启动 Eureka 注册中心

分别依次以 peer1、peer2、peer3 的配置参数执行以下命令,启动 Eureka 注册中心。

java -jar wei-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.action=peer1
java -jar wei-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.action=peer2
java -jar wei-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.action=peer3

注意:在以 peer1 启动的时候,会在控制台看到诸如 “Cannot execute request on any known server” 之类的异常信息,这个先不用管,接着启动完 peer2、peer3 节点后就好了。

3.4.改造服务提供者

为了接下来的验证,这里改造一下服务提供者 wei-service-provider 的配置文件 application.yml

server:
  port: 8010
spring:
  application:
    name: wei-service-provider    # 指定进行服务注册时该服务的名称,服务与服务之间相互调用一般都是根据这个name
eureka:
  client:
    service-url:
      #defaultZone: http://localhost:8090/eureka/    # 指定进行服务注册地址
      defaultZone: http://peer1:8091/eureka/    # 指定进行服务注册地址

这里指定服务注册地址为 peer1:8091。

到此,Eureka Server 服务注册中心多节点的配置已经完成。

 

4.测试

以上启动完成后,访问URL:http://localhost:8091/

SpringCloud进击 | 七深入:高可用的服务注册中心【Finchley版本】_第1张图片 【服务注册中心】

上图可以看出 peer1 的注册中心 DS Replicas 已经有了 peer2、peer3 节点的相关配置信息,并且出现在 available-replicas(可用的相邻集群复制节点) 中。

而,再访问 http://localhost:8092/,peer2 注册中心的 DS Replicas 已经有了 peer1、peer3 节点。如下图:

SpringCloud进击 | 七深入:高可用的服务注册中心【Finchley版本】_第2张图片 【服务注册中心】

再看看,peer3,访问:http://localhost:8093/

SpringCloud进击 | 七深入:高可用的服务注册中心【Finchley版本】_第3张图片 【服务注册中心】

如上图,peer3 注册中心的 DS Replicas 也已经有了 peer1、peer2 节点。

也说是,Eureka 服务注册中心 通过互相注册的方式来实现高可用的部署。

既然 peer1 是与 peer2、peer3 互通;peer2 是与 peer1、peer3 互通; peer3 又与 peer1、peer2 互通;那这就是一个闭环,大家都是相通的。当有新的服务注册时,Eureka Server 是对等的,它们都存有相同的信息,通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另一台服务存有相同的数据。

 

访问服务提供者:http://localhost:8010/demo/info?name=tester

Hi,tester,我是服务,我被调用了,服务名为:wei-service-provider,端口为:8010

一切正常。

到此,Eureka Server 服务注册中心集群已经完成。

 

5.总结

不要怕它,也不要怕它,实现下来,其实很简单。

与浅出第一节相比,Eureka Server 集群的实现,只不过是在原有基础上配置文件与属性的功能挖掘。

另外,需要注意的是:

  • 在搭建 Eureka Server 集群的时候,要把 application 配置文件中的 eureka.client.register-with-eurekaeureka.client.fetch-registry 均改为 true(默认)。否则会出现实例列表为空,且 peer2 等节点不在 available-replicas 而在 unavailable-replicas 的情况(这时其实只是启动了两个单点实例)
  • 在注册的时候,多节点的 application 配置文件中的 spring.application.name 必须一致

官方参考文档:https://springcloud.cc/spring-cloud-netflix.html


 

6.系列

SpringCloud进击 | 一浅出:服务注册与发现(Eureka)【Finchley版本】
SpringCloud进击 | 二浅出:服务消费者(Ribbon+REST)【Finchley版本】
SpringCloud进击 | 三浅出:服务消费者(Feign)【Finchley版本】
SpringCloud进击 | 四浅出:断路器与容错(Hystrix)【Finchley版本】
SpringCloud进击 | 五浅出:服务网关 - 路由(Zuul Router)【Finchley版本】
SpringCloud进击 | 六浅出:服务网关 - 过滤器(Zuul Filter)【Finchley版本】
SpringCloud进击 | 七浅出:配置中心(Git配置与更新)【Finchley版本】
SpringCloud进击 | 一深入:配置中心(服务化与高可用)【Finchley版本】
SpringCloud进击 | 二深入:配置中心(消息总线)【Finchley版本】
SpringCloud进击 | 三深入:服务链路跟踪(Spring Cloud Sleuth)【Finchley版本】
SpringCloud进击 | 四深入:服务链路跟踪(Sleuth+Zipkin+RabbitMQ整合)【Finchley版本】
SpringCloud进击 | 五深入:断路器监控(Hystrix Dashboard)【Finchley版本】
SpringCloud进击 | 六深入:断路器聚合监控(Hystrix Turbine)【Finchley版本】

你可能感兴趣的:(Spring,Cloud,SpringCloud,Java,Eureka,Server,服务注册中心集群)