在微服务架构中,一个系统往往由十几甚至几十个服务组成,若将这些服务全部注册到同一个 Eureka Server 中,就极有可能导致 Eureka Server 因不堪重负而崩溃,最终导致整个系统瘫痪。解决这个问题最直接的办法就是部署 Eureka Server 集群。
集群中有多个 eureka 服务,每个 eureka 服务都是相互复制的,会把客户端注册进来的服务复制到 eureka 集群中的其他节点里面来。其实简单来说就是集群中 Eureka Server每个节点相互复制。
接下来,把我们之前写的注册中心构建成一个拥有 3 个 Eureka Server 实例的集群。
application-8761.yml配置如下:
server:
port: 8761 # 服务端口号
eureka:
instance:
hostname: eureka8761 #eureka服务端的实例名称,
client:
register-with-eureka: false #是否注册到eureka 不向注册中心注册自己
fetch-registry: false #是否从eureka中拉取注册信息 自己就是注册中心,负责维护实例,不需要检索实例。
service-url:
#注册到eureka8762和eureka8763中
defaultZone: http://admin:admin@eureka8762:8762/eureka/,http://admin:admin@eureka8763:8763/eureka/
application-8762.yml配置如下:
server:
port: 8762 # 服务端口号
eureka:
instance:
hostname: eureka8762 #eureka服务端的实例名称,
client:
register-with-eureka: false #是否注册到eureka 不向注册中心注册自己
fetch-registry: false #是否从eureka中拉取注册信息 自己就是注册中心,负责维护实例,不需要检索实例。
service-url:
#注册到eureka8763和eureka8761中
defaultZone: http://admin:admin@eureka8761:8761/eureka/,http://admin:admin@eureka8763:8763/eureka/
application-8763.yml配置如下:
server:
port: 8763 # 服务端口号
eureka:
instance:
hostname: eureka8763 #eureka服务端的实例名称,
client:
register-with-eureka: false #是否注册到eureka 不向注册中心注册自己
fetch-registry: false #是否从eureka中拉取注册信息 自己就是注册中心,负责维护实例,不需要检索实例。
service-url:
#注册到eureka8762和eureka8761中
defaultZone: http://admin:admin@eureka8761:8761/eureka/,http://admin:admin@eureka8762:8762/eureka/
由于我们是在本地搭建的 Eureka Server 集群,因此我们需要修改本地的 host 文件,添加如下配置:
127.0.0.1 eureka8761
127.0.0.1 eureka8762
127.0.0.1 eureka8763
将springcloud-eureka打成jar包,用命令按照指定配置文件启动三个服务:
java -jar springcloud-eureka.jar --spring.profiles.active=8761
java -jar springcloud-eureka.jar --spring.profiles.active=8762
java -jar springcloud-eureka.jar --spring.profiles.active=8763
我们也可直接在idea中启动三个服务,方便使用。
1,在run/debug Confinurations 页面,创建三个服务如下图。
2,分别配置启动参数
EurekApplication8761 | --spring.profiles.active=8761 |
EurekApplication8762 | --spring.profiles.active=8762 |
EurekApplication8763 | --spring.profiles.active=8763 |
3,依次启动三个服务
访问8761注册中心地址 http://eureka8761:8761/
发现DS Replicas集群 中已有 8762和8763
当然访问8762和8763也会发现注册了其他的服务。
我们启动springcloud-provider并注册到8763中
spring:
application:
name: provider #微服务名称,对外暴漏的微服务名称, 重要
server:
port: 8081 # 服务端口号
eureka:
client:
healthcheck:
enabled: true #健康检测
service-url:
defaultZone: http://admin:admin@eureka8763:8763/eureka/ #注册中心地址 添加用户密码admin:admin@
服务提供者(springcloud-provider)所提供的服务已经注册到了 eureka8763并且同步到了集群中另外两个节点eureka8761和eureka8762中。
自此我们就完成了 Eureka Server 集群的搭建和使用。