之前我们使用的Eureka是标准模式只有单个节点现在我们使用peer模式构建Eureka集群

更新application 配置

更新第一章我们的Eureka-Server项目 application.properites 为 application.yml (语法更为简洁)

# Portal Info

info:
  app:
    name: "@project.name@"
    description: "@project.description@"
    version: "@project.version@"

# Spring Info

spring:
  application:
    name: "@project.name@"

server:
  port: 1000

eureka:
  server:
    enable-self-preservation: false           # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 5000       # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    fetch-registry: false
    register-with-eureka: false
    serviceUrl:
      defaultZone: http://admin:123123@localhost:1000/eureka/

拷贝application.yml 为3份 分别命名为 application-eureka-server-0.yml, application-eureka-server-1.yml, application-eureka-server-2.yml

注: 我们要构筑3个peer eureka server,所以拷贝3份.

application-eureka-server-0.yml

# Spring Info

server:
  port: 1000

eureka:
  instance:
    hostname: eureka-server-0
  server:
    enable-self-preservation: false           # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 5000       # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://admin:123123@eureka-server-1:1001/eureka/,http://admin:123123@eureka-server-2:1002/eureka/

我们将app info等相同的信息保留在application.yml.

显示开启register-with-eureka: true 和 fetch-registry: true 否则会被application.yml 中信息覆盖.

defaultZone: http://admin:123123@eureka-server-1:1001/eureka/,http://admin:123123@eureka-server-2:1002/eureka/, 在defaultZone 处分别填写集群中除了自己的其他节点.

application-eureka-server-1.yml

# Spring Info

server:
  port: 1001

eureka:
  instance:
    hostname: eureka-server-1
  server:
    enable-self-preservation: false           # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 5000       # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-2:1002/eureka/

application-eureka-server-2.yml

# Spring Info

server:
  port: 1002

eureka:
  instance:
    hostname: eureka-server-2
  server:
    enable-self-preservation: false           # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 5000       # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-1:1001/eureka/

更新DNS (Spring Cloud 本身不认为LocalHost为一个有效域)

Windows 10 Host 文件 :C:\Windows\System32\drivers\etc\hosts

127.0.0.1 eureka-server-0
127.0.0.1 eureka-server-1
127.0.0.1 eureka-server-2

启动

使用maven 中 clean package 命令重新打包.

使用jar启动 添加参数 --spring.profiles.active=XXXX 指定启动使用哪个profile.

开启三个命令行执行下面的一条命令
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-0
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-1
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-2

第一个服务会抛出一些错误,请不用担心那是因为其余服务还没有启动.启动之后就会没有问题了.

image

二: 服务注册

在设置了多节点的服务注册中心之后,我们需要简单需求服务配置,就能将服务注册到Eureka Server集群中。我们以 Chapter1-3 中的user-service为基础,修改 application.yml 配置文件:

      defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-2:1002/eureka/,http://admin:123123@eureka-server-1:1001/eureka/

*注:我们也可以不更新, eureka集群自动同步更新注册信息. 但当前指定的eureka server 在集群同步之前down掉,则信息无法更新.

上面的配置主要对 eureka.client.serviceUrl.defaultZone 属性做了改动,eureka-server-1,eureka-server-2,eureka-server-3。

我们启动该服务,我们访问eureka集群各个节点都会发现刚刚注册的服务,如果其中任意一台断开并不影响服务的使用.从而实现了高可用的服务注册中心。

深入理解

Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步.

场景一:假设我们有3个注册中心,我们将peer1、peer2、peer3各自都将serviceUrl指向另外两个节点。换言之,peer1、peer2、peer3是两两互相注册的。启动三个服务注册中心,并将compute-service的serviceUrl指向peer1并启动,可以获得如下图所示的集群效果。
image

访问http://localhost:1000/,可以看到3个注册中心组成了集群,服务通过peer1同步给了与之互相注册的peer2和peer3。

两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现

Eureka Server具备单方面有指向的服务传播与同步机制,在一些对服务发现有限制的情况下,可以利用这样的机制进行服务注册与发现的的单向控制