简介
Eureka是基于REST(Representational State Transfer,代表性状态传输)的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Eureka包含两个组件:Eureka Server 和 Eureka Client。
一、服务器的搭建配置以及测试
1、Eureka服务器端的搭建以及配置和测试
1.1 pom.xml文件的依赖
- 可在SpringBoot起步依赖中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.2 application.yml文件基本配置
spring:
application:
name: eureka-server # 指定Eureka服务器名称
server:
port: 2001 # 指定服务端口
eureka:
server:
enable-self-preservation: false # 是否开启保护模式
instance:
hostname: eureka1 # 指定主机名称 Eureka集群服务器之间,通过**hostname**来区分
client:
# 是否开启Eureka服务器之间的相互调用,如果是单台服务器则不需要自己调用自己
register-with-eureka: false
# 是否开启Eureka服务器之间的相互拉取,如果是单台服务器则不需要自己拉取自己
fetch-registry: false
instance:
# 最后一次心跳后,间隔多久认定微服务不可用,默认90
lease-expiration-duration-in-seconds: 90
1.3 主程序配置
- 在主程序上添加
@EnableEurekaServer
注解,表示该程序为Eureka服务器
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class Sp05EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(Sp05EurekaApplication.class, args);
}
}
1.4 修改 hosts 文件,添加 eureka 域名映射
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 eureka1
1.5 启动并测试
- http://eureka1:2001
2、Eureka客户端
2.1 pom.xml文件的依赖
- 可在SpringBoot起步依赖中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 application.yml文件的配置
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka # Eureka服务器的注册地址
eureka.instance.lease-renewal-interval-in-seconds
心跳间隔时间,默认30秒,建议不要更改- defaultZone,默认位置,可以修改为具体地理位置,比如:beiJing, shangHai, shenZhen 等,表示 eureka 服务器的部署位置, 需要云服务器提供
eureka.client.registry-fetch-interval-seconds
拉取注册信息间隔,默认30秒,建议不要更改
2.3 主程序
- 在主程序上添加
@EnableDiscoveryClient
注解,表示该程序为Eureka客户端。在新版本中可以不加。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(Sp04OrderserviceApplication.class, args);
}
}
2.4 启动,并访问 http://eureka1:2001
查看注册信息
3、Eureka 集群的搭建(高可用)
3.1 在hosts文件中新增一行配置
127.0.0.1 eureka2
127.0.0.1 eureka1
127.0.0.1 eureka2
3.2 在application.yml当前目录中添加两个 profile配置文件
application-eureka1.yml
eureka:
instance:
hostname: eureka1
client:
register-with-eureka: true # profile的配置会覆盖公用配置
fetch-registry: true # profile的配置会覆盖公用配置
service-url:
defaultZone: http://eureka2:2002/eureka #eureka1启动时向eureka2册
application-eureka2.yml
eureka:
instance:
hostname: eureka2
client:
register-with-eureka: true # profile的配置会覆盖公用配置
fetch-registry: true # profile的配置会覆盖公用配置
service-url:
defaultZone: http://eureka1:2001/eureka #eureka1启动时向eureka2册
3.3 创建多份启动项
- 3.3.1 在 Boot Dashboard 中选中Eureka服务项目,右击选中 Open Config 选项
- 3.3.2 点击Arguments,添加
--spring.profiles.active=eureka1 --server.port=2001
启动参数
- 3.3.3 复制当前启动项,添加
--spring.profiles.active=eureka2 --server.port=2002
启动参数
- 如果是打包后在cmd中运行,可以使用该命令
java -jar xxx.jar --spring.profiles.active=eureka1 --server.port=2001
如果是创建多个客户端启动项,与上面操作相同,不需要配置 profile 文件,只需把启动参数改为
--server.port=xxxx
即可
只要遵循application-{profile}.yml 的命名规范就可以省略 application-
和 .yml
所以在命令中写为--spring.profiles.active=eureka1
- 呈现结果
3.4 访问 Eureka 服务器
可以看到两台服务器互为对方的副本,并且有两台 Eureka 服务器成功注册
3.5 修改**服务提供者(provider)**的yml配置文件,同时向两台服务器注册
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
至此 Eureka 服务器集群搭建完成。如果可以看到两台Eureka服务器互为副本,并且客户端服务都可以成功注册,则集群搭建成功。
需要注意的问题
同组eureka server的eureka.instance.appname或者spring.application.name要取相同的名字,hostname不能相同,hostname如果相同就会冲突,appname不同就不会形成一个集群
Eureka服务器的搭建以及配置和测试成功
二、Eureka 原理
每启动一个 Eureka 客户端,都会把自身信息注册到 Eureka 服务器上,然后把服务器中的注册地址表拉取到本地缓存。
二、Eureka 总结
1、CAP原则:基于AP,强调可用性,具有容错机制
2、服务器集群结构:对等结构
3、运行参数
- 1.1 注册
一次次反复尝试注册,直到注册成功 - 1.2 拉取
客户端每30秒从服务器拉取一次注册表 - 1.3 心跳机制
客户端每30秒发送一次心跳,eureka服务器连续3次收不到心跳,就会删除该服务 - 1.4 自我保护模式
15分钟内85%服务器心跳异常,启动保护模式,保护所有的服务注册信息,不被删除,心跳稳定后,退出保护模式,恢复正常,开发期间为了方便测试,可以关闭保护模式
4、实现高可用
在客户端注册时,避免只向一台服务器进行注册,防止因当前服务器宕机而造成的服务无法注册。
与zookeeper的区别:
1、CAP原则注重点不同:Eureka强调可用性(AP),而zookeeper强调一致性(CP)。
2、服务器集群结构不同:Eureka是对等结构,zookeeper为主从结构。
CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。