5.7 Eureka Server 集群
-
在微服务架构中,一个系统往往由大量的服务组成,若将这些服务全部注册到一个Eureka Server 中,就极有可能导致Eureka Server 因不堪重负而崩溃,最终导致整个系统瘫痪。解决这个问题最直接的办法就是部署 Eureka Server 集群。
-
在 Eureka 实现服务注册与发现时一共涉及了 3 个角色:服务注册中心、服务提供者以及服务消费者,这三个角色分工明确,各司其职。但在 Eureka 中,所有服务都既是服务消费者也是服务提供者,服务注册中心 Eureka Server 也不例外。
-
在搭建服务注册中心时,在 microservice-cloud-eureka-7001包的application.yml 中涉及了这样的配置:
eureka:
instance:
hostname: localhost #eureka7001.com eureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
service-url: #监控页面地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址
-
这样设置的原因是 microservice-cloud-eureka-7001 本身自己就是服务注册中心,服务注册中心无法将自己注册到自己身上的,但服务注册中心是可以将自己作为服务向其他的服务注册中心注册自己的。如:A Eureka Server不能将自己注册到自己上,但可以作为一个服务把自己注册到 B Eureka Server上的,
-
这样就可以形成一组互相注册的 Eureka Server 集群,当服务提供者发送注册请求到 Eureka Server 时,Eureka Server 会将请求转发给集群中所有与之相连的 Eureka Server 上,以实现 Eureka Server 之间的服务同步。
-
通过服务同步,服务消费者可以在集群中的任意一台 Eureka Server 上获取服务提供者提供的服务。这样,即使集群中的某个服务注册中心挂掉,服务消费者仍然可以从集群中的其他 Eureka Server 中获取服务信息并调用,而不会导致系统的整体瘫痪,这就是 Eureka Server 集群的高可用性。
-
接下来我们基于基础工程,构建一个拥有 3 个 Eureka Server 实例的集群,除了已经构建的microservice-cloud-eureka-7001再创建两个 Eureka Server:microservice-cloud-eureka-7002,microservice-cloud-eureka-7003,这 3 个 Eureka Server 无论是 Maven 依赖、代码还是配置都是一模一样的。项目结构如图:
-
pom.xml 中引入以下依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>spring-cloud-microservice</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>microservice-cloud-eureka-7001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>microservice-cloud-eureka-7001</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--为服务注册中心引入 Eureka Server 的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--jetty-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
-
修改 microservice-cloud-eureka-7001、microservice-cloud-eureka-7002、microservice-cloud-eureka-7003 中 application.yml 的配置,具体配置如下。主要是修改eureka.instance.hostname和eureka.client.service-url.defaultZone
-
microservice-cloud-eureka-7001 中 application.yml 的配置如下。
server: port: 7001 eureka: instance: hostname: eurekaserver7001.com #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测) client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息 service-url: #监控页面地址 #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机 defaultZone: http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
-
microservice-cloud-eureka-7002 中 application.yml 的配置如下。
server:
port: 7002
eureka:
instance:
hostname: eurekaserver7002.com #eureka7001.com.eureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
service-url: #监控页面地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7003.com:7003/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
- microservice-cloud-eureka-7003 中 application.yml 的配置如下。
server:
port: 7003
eureka:
instance:
hostname: eurekaserver7003.com #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
service-url: #监控页面地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
- 由于我们是在本地搭建的 Eureka Server 集群,因此我们需要修改本地的 host 文件,Windows 操作系统的电脑在 C:/Windows/System/drivers/etc/hosts 中修改,Mac 系统的电脑则需要在 vim/etc/hosts 中修改,修改内容如下。
#Spring Cloud eureka 集群
127.0.0.1 eurekaserver7001.com
127.0.0.1 eurekaserver7002.com
127.0.0.1 eurekaserver7003.com
- 修改 microservice-cloud-provider-dept-8001(服务提供者)配置文件 application.yml 中 eureka.client.service-url.defaultZone 的取值,将服务注册到 Eureka Server 集群上,具体配置如下。
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
client:
service-url:
#defaultZone: http://localhost:7001/eureka/ #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群
fetch-registry: true
instance:
instance-id: microservice-provider-dept-8001 #自定义服务名称描述信息
prefer-ip-address: true #显示访问路径的 ip 地址
#zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
-
启动 microservice-cloud-eureka-7001,使用浏览器访问“http://eureka7001.com:7001/”,结果如下图。
-
由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7001,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7002 和 Eureka Server 7003。
-
启动 microservice-cloud-eureka-7002,使用浏览器访问“http://eureka7002.com:7002/”,结果如下图。
-
由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7002,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7001 和 Eureka Server 7003。
-
启动 microservice-cloud-eureka-7003,使用浏览器访问“http://eureka7003.com:7003/”,结果如下图。
-
由此可以看到, 服务提供者(microservice-cloud-provider-dept-8001)的服务已经注册到了 Eureka Server 7003,并且在 DS Replicas 选项中也显示了集群中的另外两个 Eureka Server:Eureka Server 7001 和 Eureka Server 7002。
-
至此我们就完成了 Eureka Server 集群的搭建和使用
下一篇:SpringCloud-12-Eureka:自我保护机制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123816.html