eureka server 集群

eureka server 集群

上一篇:配置服务发现组件eureka
下一篇:springcloud认证security
Eureka Server 的高可用

有分布式应用开发经验的读者应该能够看出,前 文 编写的单节点 Eureka Server 并不适合线上 生产环境。Eureka Client会定时连接 Eureka Server, 获取服务注册表中的信息并缓存在本地。

微服务在消费远程 API 时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server 发生宕机,也不会影响到服务之间的调用。 但如果 Eureka Server 宕机时, 某些微服务也出现了不可用的情况, Eureka Client 中的缓存若不被更新, 就可能会影响到微服务的调用, 甚至影响到整个应用系统的高可用性。 因此, 在生产环境中, 通常会部署一个高可用的Eureka Server 集群。

Eureka Server 可以通过运行 多个实例并相互注册的方式实现高可用部署, Eureka Server 实例会彼此增量地同步信息, 从而确保所有节点数据一致。
事实上, 节点之间相互注册是 EurekaServer 的默认行为,还记得前文编写单节点 Eureka Server 时,额外配置了eureka.client.registerWithEureka=false 、eureka.client.fetchRegistry=false 吗?
本节在前文的基础上, 构建一个双节点Eureka Server 集群。

要实现的功能:配置多个服务组件集群,服务组件之间相互注册

配置系统的hosts

Windows系统的hosts 文件路径是C:\Windows\System32\drivers\etc\hosts;
Linux 及 Mac OS 等系统的文件路径是 /etc/hosts。

127.0.0.1 peer1 peer2

在这里插入图片描述
2 在eurekaserver的项目中的配置文件中,做如下配置

spring:
  application:
    name: discovery-eureka
---
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  client:
    registry-fetch-interval-seconds: 30
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8761/eureka/
---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://peer2:8762/eureka/

就是把之前的注释掉或者删除,把公共的部分提取出来不同的部分用—(注意是三个杠如配置文件中的那样,这里是转译成一个)隔开表示两个配置文件。配置文件名字和启动端口不同。

在消费者项目和提供者项目中添加服务组件的地址

eureka:
  client:
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
  instance:
    prefer-ip-address: true

启动服务

因为一个项目工程中存在两个配置,所以启动不能直接时不能直接点了启动图标了,这里我展示我会的两个种启动方式。

第一种启动方式(用命令启动)

clean清一下target目录,然后再打包
在这里插入图片描述
打完后会看到target目录有你打的项目的jar包。打开如下界面一般都是在下面
在这里插入图片描述
用鼠标把target目录拖到命令行哪里,就可以看到当前目录改为target目录下面了。
在这里插入图片描述
再用命令启动

java -jar discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

再打开一个终端启动另一个

java -jar discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

还要更改消费者和提供者的
看下图:peer2下扫描的是peer2的
在这里插入图片描述
这明显不是相互注册
所以如何让服务组件之间相互注册呢,

spring:
  application:
    name: discovery-eureka
---
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  client:
    registry-fetch-interval-seconds: 30
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer2:8761/eureka/
---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://peer1:8762/eureka/

然后刷新页面。看peer1中注册的是peer2的信息。
在这里插入图片描述

第二种启动服务组件的方式

先把服务给关掉。
配置文件中配置如下所示

spring:
  application:
    name: discovery-eureka
  profiles:
    active: peer1
---
spring:
  profiles: peer1
  security:
    user:
      name: root
      password: root
server:
  port: 8761
eureka:
  client:
    registry-fetch-interval-seconds: 30
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer2:8762/eureka/
---
spring:
  profiles: peer2
  security:
    user:
      name: root
      password: root
server:
  port: 8762
eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://peer1:8761/eureka/

把下面所示勾上
在这里插入图片描述
点击图标启动。这时候启动第一个时会报错拒绝连接,因为只启动了一个服务组件,另一个还没有找到,我们的服务是相互之间注册,只需要启动好第二个就可以了。

spring:
  application:
    name: discovery-eureka
  profiles:
    active: peer2

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39095899/article/details/107457344