第四章 服务注册中心Eureka

4-1. Eureka 注册中心高可用集群概述

​   在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性问题,不能有单点故障,由于注册中心eureka本身也是一个服务,如果它只有一个节点,那么它有可能发生故障,这样我们就不能注册和查询服务了,所以我们需要一个高可用的服务注册中心,这就需要注册中心集群来解决。

​   eureka服务注册中心它本身也是一个服务,它可以看做是一个提供者,又可以看做是一个消费者,我们之前通过配置 eureka.client.register-with-eureka=false让注册中心不能注册自己,但是我们可以向其他的注册中心注册自己。

​   Eureka Server的高可用其实就是将自己作为服务向其他注册中心注册自己,这样就形成一组互相注册的服务注册中心,进而实现服务清单的互相同步,往注册中心A上注册的服务 ,可以复制同步到B注册中心上,所以任何一台注册中心上都能查到已经注册的服务,从而达到高可用的效果。
在这里插入图片描述

4-2. Eureka 注册中心高可用集群搭建

​   我们知道,eureka注册中心高可用集群是各个注册中心相互注册,所以。

  • 在Eureka注册中心的项目中创建两个A的配置文件中指向B ,B的配置文件中指向A (文件格式 application-A.properties)

  • #A的文件中配置
    eureka.client.service-url.defaultZone=http://B项目名:B的端口号/eureka
    #B的文件中配置
    eureka.client.service-url.defaultZone=http://A项目名:A的端口号/eureka
    
  • 然后在本地hosts文件中配置ip映射关系:C:\Windows\System32\drives\etc\hosts

127.0.0.1 A项目名
127.0.0.1 B项目名
  • 运行时,在运行配置 Program Arguments中配置
#运行那个项目用那个项目的配置文件即可
--spring.profiles.active=A项目名
--spring.profiles.active=B项目名

4-3. Eureka 注册中心高可用集群测试

  在服务者和消费者的配置文件中配置

eureka.client.service-url.defaultZone=http://A项目名:A的端口号/eureka,
http://B项目名:B的端口号/eureka
  • 启动服务者 可以看到两个注册中心服务都注册成功

  • 启动消费者 同个地址栏访问方法远程调用服务成功

4-4. Eureka 服务注册中心自我保护机制

​   自我保护机制是Eureka 注册中心的重要特性,当Eureka 注册中心进入自我保护模式时,在Eureka Server首页会出现以下提示信息
在这里插入图片描述

​   在没有Eureka 自我保护的情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销实例,但是发生网络故障时,那么微服务与Eureka Server之间将无法正常通讯,以上行为就变的非常危险了,因为微服务其实本身是正常的,此时不应该注销微服务。如果没有自我保护机制,那么Eureka Server就会将此服务给注销掉。

​   Eureka通过“自我保护模式”来解决这个问题, 当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络故障),那么它就会把这个微服务节点进行保护。一旦进入自我保护模式,Eureka Server就会保护服务注册表中的服务不被删除(也就是不会被注销)。当网络故障恢复后,自动退出自我保护模式。

​   所以自我保护模式时一种应对网络异常的安全措施,它的架构哲学就是宁可保留一切微服务,也不盲目的注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加的健壮和稳定。

  当然我们也可以使用配置项:eureka.server.enable-self-preservation=false 禁用自我保护模式。

​   但是自我保护模式也会给我们带来一些困扰,如果在保护期内某个服务提供者刚好非正常下线时,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端具有一些容错机制,如重试、断路器等。

​   Eureka的自我保护模式还是有意义的,该模式被激活后,它不会从注册列表中剔除因长时间没收到心跳导致注册过期的服务,而是等待修复,知道心跳恢复正常之后,自动退出自我保护模式。这种模式只在避免因网络分区故障导致服务不可以的问题。

​   例如:两个服务客户端实例A和B,A是消费者,B是提供者,但是由于网络问题,B未能及时的向Eureka发送心跳续约,这个时候Eureka不能简单的将B从服务注册表中剔除,因为如果删除了,A就将无法从Eureka Server中获取B注册的服务了,但是B服务这个时候是可用的。

  所以,Eurekas的自我保护模式最好还是开启它。

  关于自我保护几个配置如下:

#服务器端配置  测试时关闭自我保护模式,保证不可用的服务及时剔除
eureka.server.enable-self-preservation=false


#客户端配置  每隔2秒向服务端发送一次心跳 保证自己还活着  默认值为30s
eureka.instance.lease-renewal-interval-in-seconds=2   
#告诉服务端 如果10秒内没有发送心跳,就代表我故障了,将我剔除掉  默认值为90s
eureka.instance.lease-expiration-duration-in-seconds=10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值