likes
comments
collection
share

Eureka 高可用服务集群搭建

作者站长头像
站长
· 阅读数 53

EurekaSpring Cloud生态中用于服务注册与发现的重要组件之一。Eureka分为Server端和Client端。

  • Eureka Server是一个公共服务,为Eureka Client提供服务注册和发现的功能,维护注册到自身的Eureka Client的相关信息,同时提供接口给Eureka Client获取注册表中其他服务的信息,使得动态变化的Eureka Client能够进行服务间的相互调用。

  • Eureka Client将自己的服务信息通过一定的方式登记到Eureka Server上,并在正常范围内维护自己信息一致性,方便其他服务发现自己,同时可以通过Eureka Server获取到自己依赖的其他服务信息,完成服务调用,还内置了负载均衡器,用来进行基本的负载均衡。

  • Eureka ServerEureka Client之间通过心跳的方式通信。心跳(Heartbeat)即Eureka Client定时向Eureka Server汇报本服务实例当前的状态,维护本服务实例在注册表中租约的有效性。同时Eureka Client也会定时从Eureka Server中拉取注册表中的信息,并将这些信息缓存到本地,用于服务发现。

Eureka 高可用可以利用运行多个Eureka Server实例并相互注册的方式实现。Server节点之间会彼此增量地同步信息,从而确保节点中数据一致。本文将重点实战如何搭建一个高可用的Eureka Server

一、Eureka 高可用模型

1.Eureka Server 相互通信

Eureka 高可用服务集群搭建

2.Eureka Server 相互独立

Eureka 高可用服务集群搭建

二、搭建步骤

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 BootSpring CloudJDK
版本号2.6.142021.0.71.8

2.1 项目目录结构

Eureka 高可用服务集群搭建

  • 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 Eureka 高可用服务集群搭建

  • EurekaServer1 配置

Eureka 高可用服务集群搭建

  • EurekaServer2 配置

Eureka 高可用服务集群搭建

2.5 分别启动EurekaServer1EurekaServer2

Eureka 高可用服务集群搭建

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

  • EurekaServer1信息

Eureka 高可用服务集群搭建

  • EurekaServer2信息

Eureka 高可用服务集群搭建

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