Eureka Server的高可用是通过各个Eureka Server作为服务向其他Eureka Server注册,来实现服务列表的同步,达到高可用的效果。

默认情况下,每个Eureka服务器也是Eureka客户端,并且需要(至少一个)服务URL来定位对等端。

我们对以前的Eureka Server工程做修改,在application.yml配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
---
server:
  port: 8761
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
server:
  port: 8762
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
server:
  port: 8763
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

这里是本地测试,所以3个Eureka Server的配置都写在一个配置文件。
修改hosts文件:127.0.0.1 peer1 peer2 peer3,peer1,peer2,peer3都映射到127.0.0.1。
在启动时指定profile,idea的配置如下:

依次启动peer1,peer2,peer3。
观察peer1,peer2的日志都有报错。peer1报错是因为peer2和peer3服务没有启动,导致没法将自己注册到peer2和peer3。peer2报错是因为peer3没有启动,peer3启动正常,无错误。
查看peer1

查看peer2

查看peer3

可以看到:

  • 1.每个Eureka Server都是其他Eureka Server的一个服务;
  • 2.每个Eureka Server都是相互同步的。

其他服务提供者的application.yml修改:

1
2
3
4
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka,http://peer1:8762/eureka,http://peer1:8763/eureka

建议把每个Eureka Server地址都写上。只写其中一个启动也是没问题的。但是,如果只写peer1的地址,那么该服务挂掉,且peer1也挂掉,将导致服务不能注册。

Eureka Server的高可用参考Spring Cloud官方文档