Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用

举报
小工匠 发表于 2021/09/11 01:04:59 2021/09/11
【摘要】 文章目录 导读官方文档Eureka Server高可用集群概述2个Eureka Server节点高可用集群搭建步骤Step1. 新建子模块 microservice-discovery-eurek...


在这里插入图片描述

导读

Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建中我们搭建了Stand Alone版本的Eureka Server ,本片我们来搭建2个Eureka Server节点组成的集群 和 3个Eureka Server节点组成的集群 ,并将微服务注册到Eureka Server集群上。


官方文档

官方文档: https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#spring-cloud-eureka-server-peer-awareness


Eureka Server高可用集群概述

我们知道Eureka Client会定时连接Eureka Server,获取服务注册表中的信息并缓存到本地,微服务在消费远程API的时候不用每次去Server端查询,而是使用本地缓存的数据,这样的话,一般来讲即使Server宕机,也不会影响微服务之间的调用,但是肯定会影响Client端服务的更新,所以生产环境中,高可用的Eureka Server是必不可少的。

Eureka Server可以通过运行多个实例并相互注册的方式来实现高可用。 Eureka Server实例会彼此增量的同步信息,确保所有节点数据一致。

来看下Stand Alone模式的配置

registerWithEureka: false
fetchRegistry: false

  
 
  • 1
  • 2

在这里插入图片描述

所以集群环境下,需要保持默认值,即 true . 详见源码 EurekaClientConfigBean
在这里插入图片描述

在这里插入图片描述


2个Eureka Server节点高可用集群搭建步骤

Step1. 新建子模块 microservice-discovery-eureka-ha

在这里插入图片描述

关键pom

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Step2. 配置hosts

linux : /etc/hosts
windows : C:\Windows\System32\drivers\etc\hosts

在这里插入图片描述


Step3. application.yml注册两个Eureka Server

spring: 
  # 注册到eureka上的微服务名称
  application: 
    name: microservice-discovery-eureka-ha  
      
---  
spring:
  # 指定profiles为peer1
  profiles: peer1

server:
  port: 8761
  
eureka:
  instance:
    # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
    hostname: peer1
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      # 将自己注册到peer2这个Eureka上
      defaultZone: http://peer2:8762/eureka/
   
---
spring:
  # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
  profiles: peer2
# 端口  
server:
  port: 8762
# Eureka 
eureka:
  instance:
    # 当profiles为peer2,hostname是peer2
    hostname: peer2
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      # 将自己注册到peer1这个Eureka上
      defaultZone: http://peer1:8761/eureka/

  
 
  • 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
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

application.yml中使用连字符 --- 将配置文件分为三段,第二段和第三段分别为spring. profiles指定了名称,该名称表示它所在的那段内容应该在哪个profile中。

第一段未指定spring. profiles,即对所有的profile生效
在这里插入图片描述

上述配置文件,指定了hostname ,与上一步配置的hostname保持一致,同时让peer1 和 peer2 相互注册,即peer1注册到peer2上
在这里插入图片描述


Step4. 启动测试

方法一: 在STS中配置Run Configurations

主类右键 Run As — Run Configurations --Spring Boot App

在这里插入图片描述

同理 peer2
在这里插入图片描述

方法二: 打包成jar,运行jar

主类右键 Run As — Run Configurations – Maven Build ,通过maven clean package 组合命令,打成jar包

在这里插入图片描述

然后通过

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

  
 
  • 1
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

  
 
  • 1

通过spring.profiles.active指定使用哪个profile启动。

分别启动peer1 和 peer2 , 首先启动peer1会报错java.net.ConnectException: Connection refused: connect, 因为peer2 还未启动,等一会即可。

Step5. 查看服务注册中心

访问: http://peer1:8761/

在这里插入图片描述

访问: http://peer2:8762/

在这里插入图片描述


3个Eureka Server节点高可用集群搭建步骤

Eureka Server不向ZK必须奇数个节点,便于选举。 Eureka Server对节点的个数只要2个以上即可。

步骤同上,主要看下application.yml

方式一

spring: 
  # 注册到eureka上的微服务名称
  application: 
    name: microservice-discovery-eureka-ha-3nodes  

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8787/eureka/,http://peer2:8788/eureka/,http://peer3:8789/eureka/      
---  
spring:
  # 指定profiles为peer1
  profiles: peer1

server:
  port: 8787
  
eureka:
  instance:
    # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
    hostname: peer1

---
spring:
  # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
  profiles: peer2
# 端口  
server:
  port: 8788
# Eureka 
eureka:
  instance:
    # 当profiles为peer2,hostname是peer2
    hostname: peer2
---
spring:
  # 指定profiles为peer3,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
  profiles: peer3
# 端口  
server:
  port: 8789
# Eureka 
eureka:
  instance:
    # 当profiles为peer3,hostname是peer3
    hostname: peer3

  
 
  • 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
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

在公共的配置中指定defaultZone,配置三个 ,peer1 peer2 peer3中不相互注册


方式二

spring: 
  # 注册到eureka上的微服务名称
  application: 
    name: microservice-discovery-eureka-ha-3nodes  
      
---  
spring:
  # 指定profiles为peer1
  profiles: peer1

server:
  port: 8787
  
eureka:
  instance:
    # 当profiles为peer1,hostname是peer1 ,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
    hostname: peer1
    prefer-ip-address: true 
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      # 将自己注册到peer2这个Eureka上
      defaultZone: http://peer2:8788/eureka/,http://peer3:8789/eureka/
   

---
spring:
  # 指定profiles为peer2,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
  profiles: peer2
# 端口  
server:
  port: 8788
# Eureka 
eureka:
  instance:
    # 当profiles为peer2,hostname是peer2
    hostname: peer2
    prefer-ip-address: true  
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      # 将自己注册到peer1这个Eureka上
      defaultZone: http://peer1:8787/eureka/,http://peer3:8789/eureka/

---
spring:
  # 指定profiles为peer3,以jar包的形式启动的时候通过spring.profiles.active参数指定使用哪个配置文件启动
  profiles: peer3
# 端口  
server:
  port: 8789
# Eureka 
eureka:
  instance:
    # 当profiles为peer3,hostname是peer3
    hostname: peer3
    prefer-ip-address: true  
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      # 将自己注册到peer1这个Eureka上
      defaultZone: http://peer1:8787/eureka/,http://peer2:8788/eureka/

  
 
  • 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
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

不在公共的配置中指定defaultZone,在peer1 peer2 peer3中相互注册

都可以,均验证通过。


将服务注册到Eureka Server集群上及服务调用

这里我们使用micorservice-provider-user作为演示,修改下defaultZone的地址
在这里插入图片描述

启动micorservice-provider-user,

同时也修改下 消费者工程 micorservice-consumer-movie-fegin

在这里插入图片描述

启动 micorservice-consumer-movie-fegin

查看Eureka Server http://peer1:8761/

在这里插入图片描述

访问 http://localhost:7901/movie/1

在这里插入图片描述

验证通过


代码

2个Eureka Server节点

https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-discovery-eureka-ha

3个Eureka Server节点

https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-discovery-eureka-ha3

文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。

原文链接:artisan.blog.csdn.net/article/details/85727427

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。