首页 > 编程知识 正文

redis集群主节点挂掉,eureka集群同步策略

时间:2023-05-06 11:55:03 阅读:128770 作者:4047

前言

在上一篇文章中,我们构建了一个微服务框架,并使用了服务治理(SOA ) Eureka

参考: Eureka注册中心

本文教您如何使用IDEA构建SpringCloud群集。 Spring有最简单的集群构建方法

一.使用IDEA

选择新建

二.部署

写下你配置的名字,01,02分区就可以了。 然后,对该模块进行聚类

三.端口号

-Dserver.port=10087

d是修改,必须写

四.启动项目

这就完成了两个Eureka项目

我们的yaml配置是

所以Eureka不显示有服务注册

两者都更改为true或删除,修改后重新启动:

五、客户端向集群注册服务

由于有多个EurekaServer,因此在注册服务时必须更改服务- URL参数。

eureka:

客户端:

service-url: # EurekaServer地址,多个地址用','分隔

efault zone :3358127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

5.1服务提供者

服务提供者必须在EurekaServer上注册服务,并完成服务更新等工作。

服务注册

服务提供器在启动时检测配置属性的" eureka.client.register-with-eru eka=true "参数是否正确,实际上缺省为true。 如果值为true,则将向EurekaServer发送Rest请求,并发送自己的元数据信息。 EurekaServer将这些信息存储在双重映射结构中。 第一层地图的密钥是服务名,第二层地图的密钥是服务的实例id。

更新服务

注册服务完成后,服务提供者会保持定期向EurekaServer发送Rest请求的心跳,并告诉EurekaServer“我还活着”。 这称为服务更新(renew );

更改服务更新的行为有两个重要参数:

eureka:

instance:

第二次世界大战336090

lease-renewal-in-seconds 336030

延迟间隔:服务更新(renew )的间隔,默认值为30秒

lease-expiration-duration-in-seconds :服务过期,默认值为90秒

也就是说,默认情况下,服务每隔30秒向注册中心发送一次心跳,以证明自己还活着。 如果90秒以上未发送心跳,EurekaServer将确定服务已停止,并将其从服务列表中删除。 这两个值在生产环境中不更改,默认情况下也可以。

但是在开发时,这个值有点太长了。 如果经常关闭服务,就会发现Eureka仍然认为服务是活着的。 所以我们可以在开发阶段适当缩小。

eureka:

instance:

lease-expiration-duration-in-seconds 33602 # 2秒过期

lease-renewal-interval-in-seconds 33601 # 1秒心跳1次

实例id

让我们先看看服务的状态信息。

在Eureka监视页面上,确认服务注册信息。

status列显示以下信息:

up(1) :表示当前已启动一个样本,没有集群

桌面-2mvec 12:用户服务33608081 :是示例的名称(实例- id ),

默认格式为$ { hostname } $ { spring.application.name } $ { server.port }

实例- id是区分同一服务的不同实例的唯一标准,因此不能重复。

可以使用instance-id属性更改配置。

eureka:

instance:

instance-id : $ { spring.application.name } : $ { server.port }

重新启动服务并重试:

6.

4.4.服务消费者

获取服务列表

当服务消费者启动是,会检测eureka.client.fetch-registry=true参数的值,如果为true,则会从Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。我们可以通过下面的参数来修改:

eureka:

client:

registry-fetch-interval-seconds: 5

生产环境中,我们不需要修改这个值。

但是为了开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点。

6.4.5.失效剔除和自我保护

失效剔除

有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。

可以通过eureka.server.eviction-interval-timer-in-ms参数对其进行修改,单位是毫秒,生成环境不要修改。

这个会对我们开发带来极大的不便,你对服务重启,隔了60秒Eureka才反应过来。开发阶段可以适当调整,比如10S

自我保护

我们关停一个服务,就会在Eureka面板看到一条警告:

这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。

但是这给我们的开发带来了麻烦, 因此开发阶段我们都会关闭自我保护模式:

在eureka的yml文件中配置

eureka:

server:

enable-self-preservation: false# 关闭自我保护模式(缺省为打开)

eviction-interval-timer-in-ms: 1000# 扫描失效服务的间隔时间(缺省为60*1000ms)

原理图

下一篇文章 负载均衡

祝你幸福

送你一首歌:《夢灯籠》 RADWIMPS 附一版MV 《你的名字》MV 新海诚

附图:《你的名字》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。