Eureka介绍
Eureka是一个基于REST(Representational State Transfer)的服务,主要用于AWS cloud, 提供服务定位(locating services)、负载均衡(load balancing)、故障转移(failover of middle-tier servers)。我们把它叫做Eureka Server. Eureka也提供了基于Java的客户端组件,Eureka Client,内置的负载均衡器可以实现基本的round-robin负载均衡能力。在Netflix,一个基于Eureka的更复杂的负载均衡器针对多种因素(如流量、资源利用率、错误状态等)提供加权负载均衡,以实现高可用(superior resiliency)。
Eureka架构
上面的架构图描述了Eureka是如何在Netflix部署的,这也是Eureka集群的运行方式。在每个区域(region)都有一个eureka集群,它只知道该区域内的实例信息。每个分区(zone)至少有一个eureka服务器来处理本分区故障。
服务注册在Eureka上并且每30秒发送心跳来续租。如果一个客户端在几次内没有刷新心跳,它将在大约90秒内被移出服务器注册表。注册信息和更新信息会在整个eureka集群的节点进行复制。任何分区的客户端都可查找注册中心信息(每30秒发生一次)来定位他们的服务(可能会在任何分区)并进行远程调用。
部署注册中心 Eureka Server
一、新建Idea项目
微服务中的每一个组件都要向注册中心进行注册,再由网关进行统一调用
1、打开idea新建项目registry,进行依赖添加时,勾选Eureka Server,创建项目
创建完成后,可以看见pom.xml文件中可以看到spring-cloud-starter-netflix-eureka-server
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、 然后在项目的main方法所在的类中添加@EnableEurekaServer 启用注册中心
package vip.ablog.registry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
3、修改项目的application.yml文件,添加配置,这里使用Eureka默认的端口8761,spring.application.name为该应用的名称,也代表这个Eureka Server的id
spring:
application:
name: registry
server:
port: 8761
4、配置完成后,打开浏览器,输入http://localhost:8761 即可今日注册管理界面
5、默认Eureka的端口为8761,假设修改eureka server的端口,那么eureka client相应的端口也应进行相关的调节,则在配置文件进行修改即可,这里我们将端口修改为9000
【解析】可以看到,下面配置信息的server.port修改为9000,则还需要相应的配置eureka client的url,这里的eureka.client.server-url:表示客户端要连接哪个eureka server的地址,这里的defaultZone 表示的是默认连接,然后地址后面的/eureka为约定,照写即可
在默认配置下,Eureka Server会将自己也作为客户端来尝试注册自己,我们需要禁用它的客户端禁用行为。
在配置文件中添加 eureks.client.register-with-eureka: false 即可禁用自注册
spring:
application:
name: registry
server:
port: 9000
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka
Eureka Client 注册微服务
一、新建idea项目client
1、这里我们选择Web,因为client是一个Web项目,然后选择Eureka Discovery 设置为Eureka客户端
二、创建完成后,打开pom.xml文件:
1、会发现spring-cloud-starter-netflix-eureka-client ,即代表这是一个Eureka客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、在项目的main方法所在的类添加注解
@EnableEurekaClient 及代表开启Eureka客户端
package vip.ablog.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
3、修改配置文件application.yml文件
spring:
application:
name: client
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka/
5、启动完成后我们可以看到Eureka Server的控制中心页面,Eureka Client 已经自动注册微服务,正如上面所说,Eureka的底层采用轮询的方式,每隔30S发送心跳包自动检测服务的注册或撤销,实现动态刷新。
Eureka高可用与客户端负载均衡
一、什么是注册服务中心高可用
考虑到发生故障的情况,服务注册中心发生故障必将会造成整个系统的瘫痪,因此需要保证服务注册中心的高可用。
Eureka Server在设计的时候就考虑了高可用设计,在Eureka服务治理设计中,所有节点既是服务的提供方,也是服务的消费方,服务注册中心也不例外。
Eureka Server的高可用实际上就是将自己做为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。
2、然后修改配置文件application.yml
reg:9000 的配置文件,将注册时的客户端指向9001端口
spring:
application:
name: registry
server:
port: 9000
eureka:
client:
service-url:
defaultZone: http://localhost:9001/eureka
register-with-eureka: false
reg:9001的配置文件,将端口指向9000
spring:
application:
name: registry
server:
port: 9001
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka
register-with-eureka: false
这样就完成了eureka的相互注册,接下来我们打开这两个server的控制中心:
就可以发现,两个eureka注册中心完成了相互注册,共享客户端信息,这样就完成了Eureka的注册中心【高可用配置】
四、Eureka客户端的负载均衡配置
上面虽然注册中心的高可用配置完成了,但是我们现在的客户端只注册了一个注册中心的地址,假如这个注册中心崩了,客户端一样无法使用,现在我们就要进行Eureka客户端的负载均衡设置
1、打开client的application.yml配置文件,进行修改
在defaultZone中进行多注册中心url配置,这样客户端会选择可用的注册中心进行连接
spring:
application:
name: client
eureka:
client:
service-url:
#在客户端注册多个Eureka服务器地址,用逗号隔开,运行时Eureka会自动选择可用的服务器
#在运行时,由客户端选择注册中心的机制,被称为客户端负载均衡
defaultZone: http://localhost:9000/eureka/,http://localhost:9001/eureka/