Eureka Server的高可用实现 - Eureka 集群模拟

Eureka 实现高可用

实现Eureka Server需要满足下面的条件实现高可用

  1. 需要有多个Eureka Server

  2. 微服务需要注册到所有Eureka Server上

  3. 消费者可以从各个Eureka Server上拉取服务

  4. Eureka Server之间需要彼此通讯,信息同步和备份

实例模拟Eureka高可用

准备两个EurekaServer

  • 1号server: 9100端口

spring:
    application:
        name: eureka-server
server:
    port: 9100
eureka:
    client:
        service-url:
            defaultZone: http://127.0.0.1:9000/eureka/
  • 2号server:9000端口

spring:
    application:
        name: eureka-server
server:
    port: 9000
eureka:
    client:
        service-url:
            defaultZone: http://127.0.0.1:9100/eureka/
  • 模拟启动两台server

这里需要配置springboot的Run Dashboard,它可以支持方便的多任务启动和调度监测。(见附录)

当两台不同端口的Eureka Server都启动了,打开Eureka管理页面, 能够看到两台server上都彼此互相为备份,自动把自己注册到了对方那里。

将微服务注册到两台EurekaServer上

在两台Eureka Server都启动都状态下, 重启微服务提供者module,能够将服务注册到9000端口的Eureka Server上,然后9000端口的server会将服务列表同步到9100端口上的Eureka Server上。

但是能够考虑到一个问题,就是当9000端口上的server挂掉了,因为微服务只注册到9000端口上,所以改微服务就失效了。所以应该修改配置将微服务分别注册到两个server上。

eureka:
    client:
        service-url:
            defaultZone: http://localhost:9000/eureka/, http://localhost:9100/eureka/
    instance:
        prefer-ip-address: true

手动配置微服务发布的instance-id

直接上代码:

eureka.instance.instance-id: 配置instance id名更方便在Eureka Server上看到相关明确标识

Eureka服务剔除配置

lease-renewal-interval-in-seconds: 设置每5秒发送一次心跳到server

lease-expiration-duration-in-seconds 如果10秒没有发送,则剔除该服务注册

eureka:
    client:
        service-url:
            defaultZone: http://localhost:9000/eureka/, http://localhost:9100/eureka/
    instance:
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        lease-renewal-interval-in-seconds: 5
        lease-expiration-duration-in-seconds: 10

 

Eureka 自我保护机制配置

关于自我保护机制的配置 自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:

1、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。

2、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。

3、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪

  • 通常在开发测试环境,我们需要关闭自我保护机制以便于测试。

    enable-self-preservation: false 关闭自我保护机制

    eviction-interval-timer-in-ms: 4000 server每4秒检查并删除失效的注册服务

eureka:
    instance:
        hostname: localhost
    client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
            defaultZone: http://127.0.0.1:9000/eureka/
    server:
        enable-self-preservation: false
        eviction-interval-timer-in-ms: 4000

附录

如何在IDEA 2019里面开启Run Dashboard

首先说明,查了网上很多很多资料,发现真的很坑。尝试了无数次,后台才发现2019开启Run Dashboard其实很简单。

  • 找到Services窗口

  • 点击上面的“+”号添加一个Run Configuration Type

  • 把Spring Boot的类型加入进去, 因为我已经加入了所以没有这个选项了。

  • 启动SpringBoot的应用,这时候就能看到Run Dashboard的树形结构了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值