TZ_13_Eureka的高可用

痞子三分冷 提交于 2019-12-28 01:22:28

1.Eureka Server即服务的注册中心,在刚才上一篇中,我们只有一个EurekaServer,事实上EurekaServer也可以是一个集群,形成高可用的Eureka中心。

  目的:多个Eureka Server之间也会互相注册为服务,当服务提供者注册到Eureka Server集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到Eureka Server集群中的任意一个节点,都可以获取到完整的服务列表信息。

 

2.搭建2台Eeueka Server服务配置相反 实现你中有我,我中有你的注册

  Erueka Server1

#配置自己的端口号
server:
  port: 10086
#配置注册中心让自己也能注册到自己 Client就不会因为注册不到自己而报错了
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10087/eureka
# 指定status是自己指定的ip地址  而不是自己的主机名
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1

#配置自己的服务名
spring:
  application:
    name: eureka-service

   Erueka Server1

#配置自己的端口号
server:
  port: 10087
#配置注册中心让自己也能注册到自己 Client就不会因为注册不到自己而报错了
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
# 指定status是自己指定的ip地址  而不是自己的主机名
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1

#配置自己的服务名
spring:
  application:
    name: eureka-service

 

 

 

 3.失效剔除和自我保护

  1>失效剔除

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

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

  2>自我保护

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

 

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

关闭自我保护模式:

eureka:
  server:
    enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

 

 

 

4常用配置

命令 描述
server:  port: 10087
#配置自己的端口号

eureka:  client:    service-url:      defaultZone: http://127.0.0.1:10086/eureka

 将自己注册到某台Eureka Server上

   instance:
    prefer-ip-address: true
      ip-address: 127.0.0.1

 

 

 指定自己的ip地址
   spring:
    application:
      name: eureka-service
 配置自己在Eureka Server上的服务名
spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/shop    username: root    password: 12345
配置数据库

#配置别名mybatis:  type-aliases-package: com.hdh.pojo

 配置实体类的别名

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

 

 

修改Status为服务名+id

但是实际访问

的还是你自己指定的ip地址

 

 

instance:    lease-renewal-interval-in-seconds: 30s

设置客户端向服务端发送一个

Rest请求告诉服务端我还可以

使用 默认30s

instance:
  lease-expiration-duration-in-seconds: 90s

设置最长发送请求时间,

如果在最长时间内都没有发送请求

则Eureka视为你已经死亡默认90s

eureka:  client:    fetch-registry: true    registry-fetch-interval-seconds: 30

 配置是否拉取服务列表

配置拉取服务列表的周期

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!