Spring Cloud Eureka

本文深入探讨SpringCloud Eureka作为注册中心的核心概念,包括其架构、配置及高可用部署策略。解析EurekaServer与EurekaClient的角色,阐述单机、双机及三机配置细节,以及自我保护模式等关键特性。

Spring Cloud Eureka

注册中心

注册中心作用的主要作用是提供服务的信息给服务消费者,不进行服务调用请求的代理。

注册的东西就是服务信息

Spring Cloud Eureka

eureka含义:找到了!有了!(用作注册中心的语义很合适)

两个重要角色

  • Eureka Server:注册中心,提供服务信息给服务消费者。

  • Eureka Client:服务消费者,调用注册中心上的服务。

Eureka Server:Eureka Server同时也承担Eureka Client角色,也就是说为了保证高可用状态,Eureka Server也需要向其他Eureka Server进行注册,其目的是为了将保证服务信息数据一致性。单个注册中心环境小,可以取消向注册中心进行注册,因为单个情况下,自己就不需要向自己注册了

配置

依赖

版本依赖:

  • Spring Boot:2.0.3.RELEASE
  • Spring Cloud:Finchley.RELEASE
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
单机配置
eureka:
  client:
    register-with-eureka: false # 默认是true,向注册中心进行注册,由于是单实例取消掉
    fetch-registry: false # 默认是true,更新服务注册信息,由于是单实例取消掉
    service-url: # 注册中心地址,注意填写defaultZone
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
    instance:
      prefer-ip-address: false
      hostname: eurekaStandalone
# 配置完毕之后在启动类上添加注解@EnableEurekaServer

域名eurakeStandalone需要在host文件中添加,之所以使用hostname是为了在高可用情况下,正确显示分片信息,具体参考为什么所有的节点都出现在不可用分片

双机配置

# 实例eureka8080
spring:
  application:
    name: register-center-server
server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://eureka8081:8081/eureka #向其他注册中心注册
      register-with-eureka: true
      fetch-registry: true
  instance:
    prefer-ip-address: false #取消ip地址显示,为修改不可用分片
    hostname: eureka8080 # 设置hostname,为修改不可用分片
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
# 实例eureka8081
spring:
  application:
    name: register-center-server
server:
  port: 8081

eureka:
  client:
    service-url:
      defaultZone: http://eureka8080:8080/eureka #向其他注册中心注册
      register-with-eureka: true
      fetch-registry: true
  instance:
    prefer-ip-address: false #取消ip地址显示,为修改不可用分片
    hostname: eureka8081 # 设置hostname,为修改不可用分片
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
三机配置

三机配置我采用的依然是两两配置方式

# 实例eureka8080
spring:
  application:
    name: register-center-server
server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://eureka8081:8081/eureka,http://eureka8082:8082/eureka
      register-with-eureka: true
      fetch-registry: true
  instance:
    prefer-ip-address: false
    hostname: eureka8080
    # 设置实例名字,简化显示名字
    instance-id: ${spring.application.name}:${server.port} # 手动指定application名字
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
spring:
  application:
    name: register-center-server
server:
  port: 8081
  
eureka:
  client:
    service-url:
      defaultZone: http://eureka8080:8080/eureka,http://eureka8082:8082/eureka
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: false
    hostname: eureka8081
    # 设置实例名字,简化显示名字
    instance-id: ${spring.application.name}:${server.port}
# 配置完毕之后在启动类上添加注解@EnableEurekaServer
spring:
  application:
    name: register-center-server
server:
  port: 8082

eureka:
  client:
    service-url:
      defaultZone: http://eureka8081:8081/eureka,http://eureka8080:8080/eureka
      register-with-eureka: true
      fetch-registry: true
  instance:
    prefer-ip-address: false
    hostname: eureka8082
    # 设置实例名字,简化显示名字
    instance-id: ${spring.application.name}:${server.port}
# 配置完毕之后在启动类上添加注解@EnableEurekaServer

问题

  1. 为什么所有的节点都出现在不可用分片

答:参考资料

  1. 手动挂掉注册中心节点,为什么被关掉的注册中心节点没有出现在不可用分片中

答:会出现,出现自我保护模式时,不会剔除任何节点,等待一段时间将会正常剔除失效的注册中心和服务。

  1. 什么是保护模式?
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

答:当Eureka注册中心监测到有大量服务以不不优雅的形式终止自己的链接,此时Eureka将会进入自我保护模式。进入自我保护模式之后Eureka注册中心将会停止剔除所有失效的服务节点,直到以下两种情况发生,自我保护模式才会取消:1. 心跳续订次数回到期待的阈值之上。 2. 自我保护模式被禁用。

Eureka自我保护模式官方文档

  1. 关闭服务提供者,会自动从列表中清除吗?

答:会自动从服务列表中清除。

  1. Eureka Client的server-url可以只填写部分注册中心地址吗?没有填写的注册中心是不是没有这个服务?

答:可以。这样的话只填写部分的注册中心地址。没有被填写到的注册中心,依然有该Eureka Client服务,因为Eureka Server 内部会更新彼此的注册中心,从而达到数据一致性。但是为了保证服务的高可用,我们都将服务注册到全部注册节点。

  1. 注册中心挂了,服务消费者还可以调用服务吗?

答:可以,由于服务消费者本地会保留注册中的的服务注册表,所以在注册中心出现故障时,客户端仍然可以使用本地缓存的服务注册表进行服务的查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值