首页 技术 正文
技术 2022年11月18日
0 收藏 733 点赞 2,669 浏览 4117 个字

Eureka简介

Eureka是Netflix开发的一个Service Discovery组件,spring cloud将其整合用来做服务注册中心,Eureka包括两部分Eureka Server 和 Eureka Client

  • Eureka Server:服务注册中心,治理注册到eureka server的服务
  • Eureka Client:用来和eureka server交互,注册服务

Eureka中有下面几种概念:

  • 心跳机制:eureka client定期向eureka server通信,表明自己的存活状态,默认时间30s
  • 续约:eureka client 通过心跳机制向注册中心续租,避免自己被eureka server剔除注册信息,可以理解为心跳,说法不一样
  • 同步:eureka集群中,server节点会提取其他节点注册信息,保证每个server节点数据一致
  • 服务下线:eureka server会定期清理过期服务,也就是在指定时间内没能发送心跳的eureka client
  • 自我保护机制:eureka server为了保护服务注册信息的一种处理方式。

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务Eureka Client与Eureka Server之间无法正常通信,也就是心跳机制不能正常进行,但实际上微服务是处于可用状态,这种情况是不应该删除服务注册列表该服务的注册信息。

Eureka server通过自我保护机制来解决这种问题,当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障,默认15分钟内85%的丢失率,可以自定义配置),那么这个节点就会进入自我保护模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务),自我保护期间某个eureka server节点新注册的服务不会被同步到其他节点,当网络故障恢复后,Eureka client可以通过心跳机制续约,该Eureka Server节点会自动退出自我保护模式。

Eureka自我保护机制是一种应对网络异常的安全保护措施,即使同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不随便注销任何健康的微服务,自我保护机制,可以保证Eureka集群的高可用,CAP三大定理中,与Zookeeper使用的CP不同,Eureka选择保留了AP原则。

Eureka Standalone Mode

eureka的单机模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在application.yml做如下配置

eureka:
instance:
hostname: localhost
client:
#不注册自己到eureka serve
registerWithEureka: false
#不提取注册中心的消息
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动eureka一段时间后,如果没有服务注册,会有提示

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 Cluster

作为微服务的服务注册中心,首先要保证自己的高可用,如果服务中心挂掉,整个微服务系统都会处于瘫痪状态,eureka在集群中server既是server也是client,server之间会相互注册,复制其他节点的数据,保证eureka的高可用。

eureka的集群模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

搭建eureka集群时为了便于区分不同的节点,在hosts文件中做如下映射

# eureka erver
127.0.0.1eureka-7901
127.0.0.1eureka-7902
127.0.0.1eureka-7903

在application.yml做如下配置

spring:
application:
name: eureka-cluster
---
spring:
profiles: eureka-7901
server:
port: 7901
eureka:
instance:
#eureka server通讯地址
hostname: eureka-7901
#显示在注册中心的微服务名称
instance-id: eureka1
#是否显示IP地址
prefer-ip-address: true
#client发送心跳间隔时间 默认30s
lease-renewal-interval-in-seconds: 30
#表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到次心跳,则将移除该instance
lease-expiration-duration-in-seconds: 90
client:
#是否提取服务端注册信息
fetch-registry: true
#是否注册自己
register-with-eureka: true
#eureka server自身作为client时将要注册到的服务端地址
service-url:
defaultZone: http://eureka-7902:7902/eureka/,http://eureka-7903:7903/eureka/
server:
#自我保护机制
enable-self-preservation: true
#eureka server清理无效节点的时间间隔,默认60000毫秒
eviction-interval-timer-in-ms: 60000
---
spring:
profiles: eureka-7902
server:
port: 7902
eureka:
instance:
hostname: eureka-7902
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka2
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7903:7903/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
---
spring:
profiles: eureka-7903
server:
port: 7903
eureka:
instance:
hostname: eureka-7903
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka3
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7902:7902/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000

在idea中启动时,指定启动参数

注意:两个配置启动参数的地方配置一个就可以了

启动ar包可以使用命令

java -jar  eureka-server.jar  --spring.profiles.active=eureka-7901

在application.yml中register-with-eureka: true将自身注册为eureka server,在defdeaultZone中指定其余eureka server指定除自己外的所有节点,互相注册,每个节点在启动过程中会去请求连接其他节点,因此在初始启动阶段会报错,等所有节点启动稳定后,就会相互注册。

访问http://eureka-7901:7901,可以看到eureka-7901中注册了eureka-7902,eureka-7903,表明互相注册成功

Eureka配置项

Eureka的配置项还是比较多的,如果不明白其中的含义,也就没有办法配置合适的环境,Eureka的配置可以分为三大部分,分别是clieninstanceserver,下面列出每一部分常用的配置项说明列表。

Eureka Client

Eureka Instance

Eureka Server

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894