Eureka 实现高可用
实现Eureka Server需要满足下面的条件实现高可用
需要有多个Eureka Server
微服务需要注册到所有Eureka Server上
消费者可以从各个Eureka Server上拉取服务
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的树形结构了.