eureka服务端配置

eureka是选择CAP理论中AP进行设计的,所以从下面配置中可以看出由于配置问题或者本身设计问题,可能会经常出现服务下线后注册中心发现的不及时,或者注册中心剔除了因为网络抖动等其他原因,本不应该被剔除的服务。
因此使用eureka作为注册时,我们应当考虑按照AP原理设计所带来的问题。

eureka.client.fetch-registry

默认为true
表示此客户端是否应从eureka服务器获取eureka注册列表信息。一般eureka服务端要设置为false。

eureka.client.register-with-eureka

默认为true
表示此实例是否应将其信息注册到eureka服务器以供其他服务发现。一般eureka服务端要设置为false。

eureka.server.eviction-interval-timer-in-ms

默认为60s
Eureka Server会定时(间隔值是eureka.server.eviction-interval-timer-in-ms)进行检查,如果发现实例在一定时间(此值由eureka.instance.lease-expiration-duration-in-seconds定义,默认值为90s)内没有收到心跳,
则会注销此实例。

配置eureka.server.eviction-interval-timer-in-ms=1000,可以看到输出日志1秒一次检查。

2020-05-26 10:06:58.837  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:06:59.837  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:00.837  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:01.837  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:02.838  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:03.838  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:04.838  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:05.839  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:06.840  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:07.840  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-05-26 10:07:08.840  INFO 17208 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms

eureka.server.enable-self-preservation

默认为true

自我保护,生产上要设置为true,避免网络抖动原因造成剔除正常的服务。

如果开启了,则会判断上一分钟的续约数是否小于自我保护阀值,
如果上一分钟的续约数(numOfRenewsInLastMin—Renews (last min))小于自我保护阀值(numberOfRenewsPerMinThreshold—Renews threshold),则开启自我保护机制,不再进行服务的剔除。

Renews threshold(自我保护阀值) = 服务总数 * (60S/客户端续约间隔(eureka.instance.lease-renewal-interval-in-seconds)) * 自我保护续约百分比阀值因子(renewalPercentThreshold默认是85%)。

protected void updateRenewsPerMinThreshold() {
        this.numberOfRenewsPerMinThreshold = (int) (this.expectedNumberOfClientsSendingRenews
                * (60.0 / serverConfig.getExpectedClientRenewalIntervalSeconds())
                * serverConfig.getRenewalPercentThreshold());
    }

Renews (last min) = 上一分钟的续约数

续期数低于阈值,自我保护关闭,可能造成注册中心的实例出了问题却不能及时下线。
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

在这里插入图片描述
自我保护开启,续期数低于阈值,不再剔除服务。
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.

在这里插入图片描述

自动保存模式关闭。可能无法在出现网络/其他问题时保护实例到期。
THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

在这里插入图片描述

当开启自我保护后,如果服务端强制停掉(kill),可能会造成到达自我保护阈值而无法下线

解决方式:

1、关闭自我保护(不建议)
2、降低自我保护触发的阈值(不建议)
3、eureka.server自我注册,高可用(推荐)

如何让eureka快速发现服务下线

  • client端心跳默认30s,可以适当快一点
  • client续约到期时间默认90s可以适当快一点
  • server端定时检查,同样默认90s,可以适当快一点
  • client下线触发shutdown,server是可以立即感知的,因为会通知server
  • 向注册中心发送delete请求,localhost:11111/eureka/apps/applicationName/ip:port
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Eureka服务端配置的详解: 1. eureka.server.enable-self-preservation:该配置项用于开启或关闭Eureka服务端的自我保护机制。当Eureka服务端在一段时间内没有收到来自客户端的心跳时,会进入自我保护模式,不会剔除注册表中的实例。默认值为true。 2. eureka.server.eviction-interval-timer-in-ms:该配置项用于设置Eureka服务端清理无效实例的时间间隔。默认值为60000毫秒(1分钟)。 3. eureka.server.response-cache-update-interval-ms:该配置项用于设置Eureka服务端响应缓存的更新间隔。默认值为30000毫秒(30秒)。 4. eureka.server.enable-self-preservation-threshold:该配置项用于设置Eureka服务端自我保护机制的阈值。当Eureka服务端收到的心跳数低于阈值时,会触发自我保护模式。默认值为0.85。 5. eureka.server.renewal-percent-threshold:该配置项用于设置Eureka服务端续约阈值的百分比。当Eureka服务端收到的续约数低于阈值时,会触发续约阈值警告。默认值为0.85。 6. eureka.server.max-registration-duration-ms:该配置项用于设置Eureka服务端最大注册时长。当Eureka服务端收到的注册请求中的注册时长超过最大注册时长时,会将注册时长设置为最大注册时长。默认值为180000毫秒(3分钟)。 7. eureka.server.min-registration-duration-ms:该配置项用于设置Eureka服务端最小注册时长。当Eureka服务端收到的注册请求中的注册时长低于最小注册时长时,会将注册时长设置为最小注册时长。默认值为30000毫秒(30秒)。 8. eureka.server.wait-time-in-ms-when-sync-empty:该配置项用于设置Eureka服务端在同步注册表为空时的等待时间。默认值为5000毫秒(5秒)。 9. eureka.server.eviction-interval-timer-in-ms:该配置项用于设置Eureka服务端清理无效实例的时间间隔。默认值为60000毫秒(1分钟)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值