Eureka 高可用服务集群搭建
Eureka是Spring Cloud生态中用于服务注册与发现的重要组件之一。Eureka分为Server端和Client端。
-
Eureka Server是一个公共服务,为Eureka Client提供服务注册和发现的功能,维护注册到自身的Eureka Client的相关信息,同时提供接口给Eureka Client获取注册表中其他服务的信息,使得动态变化的Eureka Client能够进行服务间的相互调用。 -
Eureka Client将自己的服务信息通过一定的方式登记到Eureka Server上,并在正常范围内维护自己信息一致性,方便其他服务发现自己,同时可以通过Eureka Server获取到自己依赖的其他服务信息,完成服务调用,还内置了负载均衡器,用来进行基本的负载均衡。 -
Eureka Server与Eureka Client之间通过心跳的方式通信。心跳(Heartbeat)即Eureka Client定时向Eureka Server汇报本服务实例当前的状态,维护本服务实例在注册表中租约的有效性。同时Eureka Client也会定时从Eureka Server中拉取注册表中的信息,并将这些信息缓存到本地,用于服务发现。
Eureka 高可用可以利用运行多个Eureka Server实例并相互注册的方式实现。Server节点之间会彼此增量地同步信息,从而确保节点中数据一致。本文将重点实战如何搭建一个高可用的Eureka Server。
一、Eureka 高可用模型
1.Eureka Server 相互通信

2.Eureka Server 相互独立

二、搭建步骤
1. 准备工作
在单机环境下模拟部署两个Eureka Server节点。所以需修改hosts文件,因为单机部署使用ip(127.0.0.1)地址会有问题。
vim /etc/hosts
新增如下配置:
127.0.0.1 ek1.com
127.0.0.1 ek2.com
2.利用IDEA搭建工程
| Spring Boot | Spring Cloud | JDK | |
|---|---|---|---|
| 版本号 | 2.6.14 | 2021.0.7 | 1.8 |
2.1 项目目录结构

application-ek1.properties表示Eureka Server1实例配置application-ek2.properties表示Eureka Server2实例配置
2.2 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>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.14</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>eureka-server</description>
<properties>
<java.version>8</java.version>
<spring-cloud.version>2021.0.7</spring-cloud.version>
</properties>
<dependencies>
<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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.3 配置文件
application.properties配置
#
#应用名称,主要用于分组
spring.application.name=ek-service
#
#
application-ek1.properties配置
#
# 是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#
# 是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#
# 设置服务注册中心的URL,用于 client 和 server 端交流,此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://ek2.com:7902/eureka/
#
# 主机名:是用来查找主机地址的,也可以配置成ip地址(当前eureka服务部署的机器ip地址)
eureka.instance.hostname=ek1.com
#
# 服务端口
server.port=7901
application-ek2.properties配置
#
# 是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#
# 是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#
# 设置服务注册中心的URL,用于client 和 server端交流,此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://ek1.com:7901/eureka/
#
# 主机名:是用来查找主机地址的,也可以配置成ip地址(当前eureka服务部署的机器ip地址)
eureka.instance.hostname=ek2.com
#
# 服务端口
server.port=7902
2.4 启动服务
这里要重点说明一下,如何利用IDEA启动两个Eureka Server。
-
Edit Configurations
-
EurekaServer1配置

EurekaServer2配置

2.5 分别启动EurekaServer1和EurekaServer2

浏览器中输入http://ek1.com:7901/ 和 http://ek2.com:7902/进入到Spring Eureka后台查看集群信息
EurekaServer1信息

EurekaServer2信息

- 控制台信息说明
DS Replicas: 代表集群信息,当有多个Eureka Server组成集群时,DS Replicas会展示集群中的其他节点。比如:EurekaServer1中展示的是ek2.com,EurekaServer2中展示的是ek1.comtotal-avail-memory:总共可用的内存,540 mbnum-of-cpus:CPU 的个数,8 核current-memory-usage:当前已经使用内存的百分比,使用了 276 mb,使用率69%server-uptime:服务已启动时间registered-replicas:当前Eureka Server是往哪个Eureka Server进行注册的。本案例是Eureka Server1和Eureka Server2互为客户端unavailable-replicas:不可用的集群节点available-replicas:可用的相邻集群节点
转载自:https://juejin.cn/post/7247451971945660476