前面我们实现服务注册与发现,并实现在负载匀衡的接口调用。但是,我们的EurekaServer是单点的。虽然EurekaClient 会定时的连接EurekaServer,获取注册表里的信息进行缓存到本地,如果EurekaServer不可用了EurekaClient 就不会更新,就会影响微服务的调用,所以要一个有高可用的EurekaServer 集群,EurekaServer 可以通过运行多个实例来相互注册的方式实现高可用部署。从而保证里数据的一致性。
配置3台EurekaServer
spring:
profiles: es01
application:
name: eurekserver
server:
port: 8081
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8082/eureka/,http://${eureka.instance.hostname}:8083/eureka/
---
spring:
profiles: es02
application:
name: eurekserver
server:
port: 8082
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8081/eureka/,http://${eureka.instance.hostname}:8083/eureka/
---
spring:
profiles: es03
application:
name: eurekserver
server:
port: 8083
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:8081/eureka/,http://${eureka.instance.hostname}:8082/eureka/
下面我们可以直接跑一下,上节使用的那几个实例。
EurekaDiscovery的配置,这里我们都只配置了一台EurekaServer的地址,为是更明显测试一下,EurekaServer的复制。
spring:
profiles: dis01
application:
name: eurekadiscovery
server:
port: 8001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8081/eureka/
---
spring:
profiles: dis02
application:
name: eurekadiscovery
server:
port: 8002
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8081/eureka/
EurekaDiscovery2的配置,这里我们也只配了8082那台EurekaServer
spring:
application:
name: eurekadiscovery2
server:
port: 8003
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8082/eureka/
分别启动这三个实例。
http://localhost:8081/ http://localhost:8082/ http://localhost:8083/
可以看出,这三个实例都已成功注册,并且3台EurekaServer都已经进行了复制。执行http://localhost:8003/hi?name=sl,EurekaDiscovery2可以成功的发现EurekaDiscovery实例并进行调用。