目录
在互联⽹应⽤中,服务实例很少有单个的。
即使微服务消费者会缓存服务列表,但是如果EurekaServer只有⼀个实例,该实例挂掉,正好微服务消费者本地缓存列表中的服务实例也不可⽤,那么这个时候整个系统都受影响。
在⽣产环境中,我们会配置Eureka Server集群实现⾼可⽤。Eureka Server集群之中的节点通过点对点(P2P)通信的⽅式共享服务注册表。我们开启两台 EurekaServer 以搭建集群。
本次集群测试使用修改hosts文件的方式
修改hosts文件
win10下路径为【C:\Windows\System32\drivers\etc】
#eureka集群测试
127.0.0.1 LagouCloudEurekaServerA
127.0.0.1 LagouCloudEurekaServerB
一、复制两份eureka-server代码
1、复制两份单例实例代码
单例实例
然后修改端口号等相关信息
2、修改application.yml
①8762
server:
port: 8762
spring:
application:
# # 应⽤名称,会在Eureka中作为服务的id标识(serviceId)
name: lagou-cloud-eureka-server
# eureka 客户端配置(和Server交互),Eureka Server 其实也是一个Client
eureka:
instance:
hostname: LagouCloudEurekaServerA
client:
service-url: #客户端与EurekaServer交互的地址,如果是集群,也需要写其 它Server的地址
defaultZone: http://LagouCloudEurekaServerB:8763/eureka
register-with-eureka: true # 集群模式下可以改成true
fetch-registry: true # 集群模式下可以改成true
②8763
server:
port: 8763
spring:
application:
# # 应⽤名称,会在Eureka中作为服务的id标识(serviceId)
name: lagou-cloud-eureka-server
# eureka 客户端配置(和Server交互),Eureka Server 其实也是一个Client
eureka:
instance:
hostname: LagouCloudEurekaServerB
client:
service-url: #客户端与EurekaServer交互的地址,如果是集群,也需要写其 它Server的地址
defaultZone: http://LagouCloudEurekaServerA:8762/eureka
register-with-eureka: true # 集群模式下可以改成true
fetch-registry: true # 集群模式下可以改成true
3、分别启动两个启动类之后访问
http://lagoucloudeurekaservera:8762/
http://lagoucloudeurekaserverb:8763/
二、同一个eureka-server中配置集群
(一)修改lagou-cloud-eureka-server配置文件
spring:
application:
# # 应⽤名称,会在Eureka中作为服务的id标识(serviceId)
name: lagou-cloud-eureka-server
---
#第⼀个profile,后期启动spring-boot项⽬时,可通过命令参数指定
spring:
profiles: LagouCloudEurekaServerA
server:
port: 8761
eureka:
instance:
hostname: LagouCloudEurekaServerA
client:
service-url: #客户端与EurekaServer交互的地址,如果是集群,也需要写其 它Server的地址
# defaultZone: http://${spring.eureka.instance.hostname}:${server.port}/eureka
defaultZone: http://LagouCloudEurekaServerB:8762/eureka
register-with-eureka: true
fetch-registry: true
---
#第二个profile,后期启动spring-boot项⽬时,可通过命令参数指定
spring:
profiles: LagouCloudEurekaServerB
server:
port: 8762
eureka:
instance:
hostname: LagouCloudEurekaServerB
client:
service-url: #客户端与EurekaServer交互的地址,如果是集群,也需要写其 它Server的地址
# defaultZone: http://${spring.eureka.instance.hostname}:${server.port}/eureka
defaultZone: http://LagouCloudEurekaServerA:8761/eureka
register-with-eureka: true
fetch-registry: true
#register-with-eureka 和 fetch-registry,在单节点时设置为了 false,
# 因为只有⼀台 Eureka Server,并不需要⾃⼰注册⾃⼰,⽽现在有了集群,可以在集群的其他节点中注册本服务
说明:
- 在 ⼀个实例中,把另外的实例作为了集群中的镜像节点,那么这个http://LagouCloudEurekaServerB:8762/eureka URL 中的
LagouCloudEurekaServerB 就要和其它的profile 中的eureka.instance.hostname 保持⼀致。 - register-with-eureka 和 fetch-registry 在单节点时设置为了 false, 因为只有⼀台 Eureka Server,并不需要⾃⼰注册⾃⼰,⽽现在有了集群,可以在集群的其他节点中注册本服务
(二)分别启动Application
(三)浏览器访问观察
分别访问
- http://lagoucloudeurekaservera:8761/
- http://lagoucloudeurekaserverb:8762/
会发现注册中⼼ LAGOU-CLOUD-EUREKA-SERVER 已经有两个节点,并且 registered-replicas (相邻集群复制节点)中
已经包含对⽅