SpringCloud--Eureka集群与原理

Eureka集群与原理

原理

Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同。
Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。


  • CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。
    由于分布式系统中必须保证分区容错性,因此我们只能在A和C之间进行权衡。
    Zookeeper保证的是CP, 而Eureka则是保证AP。

组件调用关系

搭建Eureka注册中心集群,实现负载均衡+故障容错。

Eureka集群:==相互注册,相互守望。==

服务提供者

1、启动后,向注册中心发起register请求,注册服务

2、在运行过程中,定时向注册中心发送renew心跳,证明“我还活着”。

3、停止服务提供者,向注册中心发起cancel请求,清空当前服务注册信息。

服务消费者

1、启动后,从注册中心拉取服务注册信息

2、在运行过程中,定时更新服务注册信息。

3、服务消费者发起远程调用


数据存储结构

既然是服务注册中心,必然要存储服务的信息,我们知道ZK是将服务信息保存在树形节点上。而下面是Eureka的数据存储结构:

在这里插入图片描述
  • Eureka的数据存储分了两层:数据存储层和缓存层。Eureka Client在拉取服务信息时,先从缓存层获取(相当于Redis),如果获取不到,先把数据存储层的数据加载到缓存中(相当于Mysql),再从缓存中获取。值得注意的是,数据存储层的数据结构是服务信息,而缓存中保存的是经过处理加工过的、可以直接传输到Eureka Client的数据结构。

集群

在这里插入图片描述

我们使用笔记本 配置 Eureka 集群

  • 修改映射配置添加进hosts文件

mac系统的,接下来写的步骤是mac的。打开终端,输入sudo vim /etc/hosts来修改hosts文件。(权限不够需要加上sudo并输入密码)
在最后一行加入:

127.0.0.1       eureka7001.com
127.0.0.1       eureka7002.com
127.0.0.1       eureka7003.com

然后:wq!保存退出。

  • 修改 Eureka 7001 的 yml 配置
eureka:
  instance:
    hostname: eureka7001.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #集群版  相互注册,相互守望
      defaultZone: http://eureka7002.com:7002/eureka/, http://eureka7003.com:7003/eureka/ 
      

  • 修改 Eureka 7002 的 yml 配置
eureka:
  instance:
    hostname: eureka7002.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #集群版  相互注册,相互守望
      defaultZone: http://eureka7001.com:7001/eureka/, http://eureka7003.com:7003/eureka/ #相互注册,相互守望

  • 修改 Eureka 7003 的 yml 配置
eureka:
  instance:
    hostname: eureka7003.com  #eureka服务端的实例名称
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #集群版  相互注册,相互守望
      defaultZone: http://eureka7001.com:7001/eureka/, http://eureka7002.com:7002/eureka/ #相互注册,相互守望

在这里插入图片描述

在这里插入图片描述
  • 将客户端注册到 eureka 集群
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
在这里插入图片描述

actuator微服务信息完善

修改 eureka client 的yml文件:

# client:   
#    ...    instance要和client对齐
  instance:
    instance-id: payment8001
    prefer-ip-address: true   #访问路径可以显示ip地址

修改前:

在这里插入图片描述

修改后:


在这里插入图片描述

Eureka自我保护

保护模式主要用于一组客户端和Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其注册表的信息,不再删除服务注册表的数据,也就是不会注销任何微服务
[图片上传失败...(image-e04801-1597886548909)]
导致原因 :某时刻某一个微服务不可用了 ,Eureka不会立刻清理,依旧会对该微服务对信息进行保存,属于CAP里面对AP分支

  • Eureka自我保护机制
    为了防止EurekaClient 可以正常运行,但是Server 在网络不通对情况下,Server不会立即剔除Client

    在默认的情况下,如果EurekaServer 在一定时间内没有接收到某个微服务的实例心跳,EurekaServer将注销该实例 (默认90秒)。

    只有在一定时间内丢失大量服务的心跳才开启自我保护模式。

在这里插入图片描述

禁止自我保护

  server:
    #关闭自我保护,默认为true
    enable-self-preservation: false
    #心跳的间隔时间,单位毫秒
    eviction-interval-timer-in-ms: 2000

   #Eureka客户端向服务端发送心跳的时间间隔,单位秒(默认30秒)
   lease-renewal-interval-in-seconds: 1
   #Eureka服务端在收到最后一次心跳后等待的时间上限,单位秒(默认90秒),超时剔除服务
   lease-expiration-duration-in-seconds: 2


  • Springcloud 仓库地址 : github链接.

  • 个人博客: http://blog.yanxiaolong.cn/.

你可能感兴趣的:(SpringCloud--Eureka集群与原理)