ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

服务注册中心-Eureka

2021-10-04 13:34:11  阅读:210  来源: 互联网

标签:保护模式 服务 中心 eureka 注册 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

标签:保护模式,服务,中心,eureka,注册,Eureka
来源: https://blog.csdn.net/kidchildcsdn/article/details/120602424

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有