Eureka的高可用

配置Eureka的高可用

我们重新开一个工程,将microservice-discovery-eureka工程复制一个并重命名microservcie-discovery-eureka-ha,并修改pom.xml和.project中工程名。
在IDE中,我们导入这个工程,接下来重点来了。
1) 配置文件application.yml 清空内容,并写入如下内容:

spring:
  application:
    name: eureka-server-ha
---
server:
  port: 8762
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer2:8763/eureka/,http://peer3:8764/eureka/

---
server:
  port: 8763
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer3:8764/eureka/

---
server:
  port: 8764
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
<

强调:”—”必须要有,用来隔开每个服务。在上面,我配置了三个服务,并让他们分别注册另外两个Eureka Server。还有我们这里配置了hostname,那我们需要配置hosts。

因为,比如启动peer1时,我们给peer1配置了peer2、peer3的Eureka Server,那么peer1在启动时就回去找对应的peer2、peer3进行注册,因为peer2、peer3还没有启动,所有就会报错。

好,将三个服务都启动之后,我们用浏览器分别访问这三个Eureka Server,会发现DS Replicas有另两个Eureka Server的副本,在Instance currently registered with Eureka有这三个服务的实例。

这里提一个问题:为什么我只被另外两个服务所注册,但为什么在实例列表中还会有自己本身的实例呢?

答:在最开始时,我们就说了官网中Eureka高可用说明,官网告诉我们注册表中的实例都要发送心跳以保持注册更新。简单来说,就是各服务之间通过相互发送心跳来保持同步,所以就会在实例表中包含了自己本省的实例。

Eureka-provider-user注册Eureka Server配置

在eureka-provider-user工程的配置文件application.yml中,我们将eureka.client.service-url.defaultZone的值配置为:http://peer1:8762/eureka/ ,然后启动user工程。

发现,虽然我们只配置了user注册在peer1上,但是在peer2、peer3也会有user的实例,这也就是它们各实例之间通过发送心跳来实现注册同步的机制。

原文地址:https://blog.csdn.net/Jeson0725/article/details/70226539
posted @ 2019-10-09 14:27  星朝  阅读(364)  评论(0编辑  收藏  举报