一、Eureka简介

  Eureka是Netfix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间服务层,以达到负载均衡和中间服务层故障转移的目的,SpringCloud将他集成在其子项目spring-cloud-netfix中,以实现SpringCloud的服务发现过程。

 

1.Eureka组件

  Eureka包含两个组件:Eureka Server和 Eureka Client

  1.1Eureka Server

    Eureka提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用的服务节点信息,服务节点的信息可以在界面中直观的看到。

       Eureka Server本身也是一个服务,默认情况下会自动注册到Eureka服务中心

    如果搭建单机版的Eureka Server注册中心,则需要配置取消Eureka Server的自动注册逻辑,毕竟当前服务注册到当前服务中心是一个说不通的逻辑。

    Eureka Server通过 Register Get Renew等接口提供服务的注册、发现和心跳检测等服务。

1.2Eureka Client 

  Eureka Client是一个java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器,在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

1.3Application Server 

  服务提供方,是注册到Eureka Server中的服务

1.4Application Client

  服务消费方,通过Eureka发现服务,并消费

  在这里Application Server和Application Client不是绝对上的定义,因为Provider在提供服务的同事,也可以消费其他Provider提供的服务,Consumer在消费服务的同时,也可以对外提供服务。

 

2.Eureka Server架构原理简介

  

spring cloud redis 注册中心 spring cloud注册中心原理_Server

    Register(服务注册):把自己的IP和端口注册给Eureka

    Renew(服务续约):发送心跳包,每30秒发送一次,告诉Eureka自己还活着

    Cancel(服务下线):当provider关闭时会向Eureka发送消息,把自己从服务列表中删除

    Get Register(获取服务注册列表):获取其他服务列表

    Replicate(集群中数据同步):Eureka 集群中的数据复制与同步

    Make Remote(远程调用):完成服务的远程调用

 

Eureka Server

    Eureka Server既是一个注册中心,也是一个服务,那么单间Eureka Server的方式和以往搭建Dubbo注册中心ZooKeeper的方式必然是不同的,首先搭建一个单机版的Eureka Server。

 

二、搭建单机版的Eureka Server

  Eureka Server已经被Spring Cloud集成在其子项目Spring-Cloud-Netfix中,以下是创建流程。

  1.擦黄建SpringBoot项目并添加依赖

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_02

 

 

 

spring cloud redis 注册中心 spring cloud注册中心原理_Server_03

 

 

 

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_04

 

 

 

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_05

 

 

  2.全局配置文件Application.properties

    Eureka Server 本身也是一个服务,同时又是一个注册中心,在Spring Cloud中,启动的微服务会自动搜索注册中心并注册服务,在单机版的Eureka Server环境中,当前服务注册到当前服务,不合适,          所以搭建Eureka Server单机版服务时,需要提供特殊的全局配置,避免回路注册逻辑。同理,Eureka Server服务在注册中心中发现服务列表逻辑也是不必要的,毕竟注册中心是一个中立的服务管理平台,如果  是单机版,Eureka Server服务再去发现服务列表,明显也是不必要的,也需要通过全局配置,避免回路发现逻辑

  注意:

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%, Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务 提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题 需要服务消费者端要有一些容错机制,如重试,断路器等。 我们在单机测试的时候很容易满足心跳失败比例在 15 分钟之内低于 85%,这个时候就会触发 Eureka 的保护机制,一旦开启了保护机制,则服务注册中心维护的服务实例就不是那么准确了,此时我们可以 使用 eureka.server.enable-self-preservation=false 来关闭保护机制,这样可以确保注册中心中 不可用的实例被及时的剔除(不推荐)

  配置:

 

 

  #设置 Eureka Server 端口(自定义)

  server.port=9000

  #设置Spring应用名称(自定义)

  spring.application.name=eureka-server

  #注册中心路径

  eureka.client.service-url.defaulezone=http://127.0.0.1/eureka

  #是否将自己注册到eureka-server中(不向注册中心注册自己)默认值 true

  Eureka.client.register-with-eureka=false

  #是否从Eureka-server中获取服务注册信息,默认为true

  Eureka-client.fetch-registry=false

  #关闭自我保护机制

  Eureka.server.enable-self-preservation=false

 

 

  3.启动类配置

  

spring cloud redis 注册中心 spring cloud注册中心原理_Server_06

 

 

   4.启动程序

  在浏览器访问Eureka Server Web控制台:通过 IP:端口 来查看Eureka Server中的信息,本案例访问地址 为:http://localhost:9000

  

spring cloud redis 注册中心 spring cloud注册中心原理_Server_07

 

 

   访问成功!!!

 

三、搭建集群版的Eureka Server

  集群总结:相互注册,相互守望

  注册中心作为微服务架构中的核心功能,其重要性不言而喻,所以单机版的Eureka Server在可靠上并不符 合现在的互联网开发环境.集群版的Eureka Server才是商业开发中的选择.

  Eureka Server注册中心的集群和Dubbo的Zookeeper注册中心集群在结构上有很大的区别。

  ZooKeeper注册中心集群搭建后,集群中各节点呈现主从关系,集群中只有主节点对外提供服务的注册 和发现功能,从节点相当于备份节点,只有主节点宕机时,从节点会选举出一个新的主节点,继续提供 服务的注册和发现功能。

  而Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注 册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的 其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已 注册的服务,并发现其他节点中已注册的服务。所以Eureka Server注册中心集群版在搭建过程中有很多 的方式,找到一个最合适最可靠的搭建方式才能称为一个称职的程序员

  集群版Eureka Server可以通过Spring Boot多环境配置方式快速搭建。只要创建一个合适的Eureka Server工程,通过多个全局配置即可完成快速搭建。 本案例中搭建一个双节点的Eureka Server集群。 Linux版本为: CentOS 7 JDK版本为: 1.8 POM依赖 和单机版Eureka Server相同。

  1.全局配置文件

  本案例中两个节点会搭建在两个Linux系统中,为这两个Linux系统分别定义域名为eurekaserver1和 eurekaserver2

  在集群搭建过程中,全局配置文件的定义非常重要。其中euraka.client.serviceUrl.defaultZone属性是 用于配置集群中其他节点的。如果有多个节点,使用逗号','分隔。

有部分程序员只配置某一个集群节点信息,通过集群节点间的注册通讯实现节点的全面发现。这种 配置形式是不推荐的。因为Eureka Server在服务管理上,会根据连带责任来维护服务列表,如果某集 群节点宕机,那么通过这个节点注册过来的服务都会连带删除

    1.1eurekaserver1的全局配置文件内容

    

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_08

    

spring cloud redis 注册中心 spring cloud注册中心原理_spring_09

 

 

    

spring cloud redis 注册中心 spring cloud注册中心原理_Server_10

 

 

    1.3设置Linux主机域名

      修改/etc/hosts,设置主机域名,将主机域名和IP进行绑定,新增内容如下:两个Linux系统修改内容相同

      XX.XXX.XXX.XXX eurekaserver1

     XXX.XXX.XXX.XXX eurekaserver2

    可以在Linux终端中,通过java命令来启动Eureka Server。在启动的时候,可以通过启动参数来设置有 效的配置环境。具体命令如下:

 

 

       java -jar -Dspring.profiles.active=eurekaserver1 spring-cloud-eureka-servercluster-1.0.jar

    其中-Dspring.profiles.active启动参数,用于定义本次启动的Eureka Server应用的有效全局配置命名, 也就是全局配置文件的后缀。SpringBOOT在启动的时候,会根据启动参数来决定读取的有效全局配置 文件是哪一个

    1.4在浏览器中访问Eureka Server Web控制台

    

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_11

 

     

spring cloud redis 注册中心 spring cloud注册中心原理_单机版_12