一、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架构原理简介
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项目并添加依赖
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.启动类配置
4.启动程序
在浏览器访问Eureka Server Web控制台:通过 IP:端口 来查看Eureka Server中的信息,本案例访问地址 为:http://localhost:9000
访问成功!!!
三、搭建集群版的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的全局配置文件内容
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控制台