服务注册中心-Eureka

Eureka注册中心高可用集群概述

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

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

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

Eureka注册中心高可用集群搭建

Eureka注册中心高可用集群就是各个注册中心相互进行注册,所以:

1、在端口为8761的配置文件中,让它的service-url指向8762,在8762的配置文件中让它的service-url指向8761;

2、由于8761和8762互相指向对方,实际上搭建了一个双节点的服务注册中心集群:eureka.client.service-url.defaultZone=http://eureka8762:8762/eureka/
eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/

然后在本地hosts文件配置:C:\WINDOWS\System32\drivers\etc\hosts

127.0.0.1 eureka8761
127.0.0.1 eureka8762

运行时,在运行配置项目Program Arguments中配置:

--spring.profiles.active=eureka8761  // 表示激活哪一份配置文件

--spring.profiles.active=eureka8762

分别启动两个注册中心,访问两个注册中心页面,观察注册中心页面是否正常。

相互指向即成功搭建!!!

Eureka注册中心高可用集群测试

在要进行注册的服务中配置:

eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/,http://eureka8762:8762/eureka/

启动服务提供者服务,然后观察注册中心页面,可以看到服务会在两个注册中心上都注册成功

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

自我保护机制是Eureka注册中心的重要特性,当Eureka注册中心进入自我保护模式时候,在Eureka Server首页会输出如下警告信息:

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 Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例,但是当发生网络分区故障的时候,那么微服务与Eureka SErver之间将无法正常通信,以上行为可能变得非常危险了---因为微服务本身其实是正常的,此时不应该注销这个微服务,如果没有自我保护机制,那么Eureka Server就会将此服务注销掉。

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

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

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

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

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

例如,两个微服务客户端实例A和B之间有调用关系,A是消费者,B是提供者,但是由于网络故障,B未能及时向Eureka发送心跳续约,这个时候Eureka不能简单的将B从注册表中剔除,因为如果删除了,A就无法从Eureka服务器中获取B注册的服务,但是这个时候B服务是可用的;

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

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

服务器端配置:

#测试时关闭自我保护机制,保证不可用的服务及时被剔除

eureka.server.enable-self-preservation=false

客户端配置:

#每间隔2s(默认是30s),向eureka服务端发送一次心跳,证明自己存活

eureka.instance.lease-renewal-interval-in-seconds=2

#告诉eureka服务端,如果10s(默认是90s)之内没有给你发送心跳,就代表已经故障,将我剔除

eureka.instance.lease-expiration-duration-in-seconds=10

学习路径:SpringCloud微服务分布式架构项目开发实战-SpringCloud框架开发教程全套完整版从入门到精通_哔哩哔哩_bilibiliicon-default.png?t=L892https://www.bilibili.com/video/BV1Et411c7JD?p=23&spm_id_from=pageDriver

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值