Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用
导读
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
- 点赞
- 收藏
- 关注作者
评论(0)