草庐IT

Eureka的搭建

cchpfu 2023-11-18 原文

Eureka

Eureka包含两个组件:Eureka Server和Eureka Client。

  • Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

  • Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

Eureka是做什么的

eureka主要负责完成微服务架构中的服务治理功能

为什么要使用Eureka

当服务的模块越来越多,系统的功能越来越复杂,以前用到的静态配置就会变得越来越难以维护,会消耗巨大的人力,所以通过使用服务注册与发现来完成对微服务应用的自动化管理。

服务治理

用来实现各个微服务实例化的自动化注册与发现。

服务注册

首先会构建一个服务中心,之后的每个服务单元向这个服务中心提供主机,端口号等信息登记自己提供的服务。

注册中心通过服务名分类组织服务清单,并对其进行维护。

服务注册中心需要以心跳的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除。

服务发现

服务之间不需要指定具体的实例地址,而是通过服务中心发起请求调用实现。所以,调用方并不需要知道服务提供方具体的位置,只需向注册中心发起请求,从而获取所有服务的实例清单,才能实现对具体服务实例的访问。

实际应用中,不会每次都向注册中心获取服务,使用了缓存和服务剔除等不同的策略。

Eureka的角色

要实现Eureka至少需要服务注册中心与服务提供者

服务注册中心

Eureka的服务端应用,提供服务的注册与发现功能。支持高可用配置,当集群中有分片故障时,Eureka就会进入自我保护模式,允许在有分片故障期间继续提供注册与发现的功能。当分片恢复正常,集群中的其他分片会将其状态同步回来。

服务提供者

会向注册中心注册并提供自身的服务,并周期性的发送心跳来更新它的服务租约。同时它能将服务端的注册信息查询并缓存到本地且周期性的刷新状态。

服务消费者

消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。

父项目

1.新建父项目(maven项目):springcloud-netflix
2.导入依赖

	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>1.4.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                <version>1.4.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

Eureka服务端搭建

eureka服务端即是服务注册中心,当前为单个eureka服务的搭建。

步骤:

  1. 新建maven子模块:springcloud-eureka-server
  2. 添加依赖
  3. 编写application.yaml
  4. 编写启动类
  5. 测试

实现

  1. 新建maven子模块:springcloud-eureka-server
  2. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
  1. 编写application.yaml
spring:
  application:
    name: springcloud-eureka-server
server:
  port: 2001

eureka:
  instance:
    hostname: eureka1 #hostname用于eureka集群服务器之间的区分
    lease-expiration-duration-in-seconds: 90 #最后一次心跳后,间隔多久认定微服务不可用,默认90
  client:
    register-with-eureka: false #不向自身注册。由于该应用为单个注册中心,所以设置为false,代表不向注册中心注册自己。
    fetch-registry: false #不从自身拉取注册信息。由于单个注册中心,不拉取自身信息。
    serviceUrl.defaultZone: http://localhost:2001/eureka/
  server:
    enable-self-preservation: false #eureka的自我保护状态。测试时将其关闭
  1. 编写启动类
@EnableEurekaServer //通过注解触发自动配置
@SpringBootApplication
public class SpringCloudEurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaServerApplication.class,args);
    }
}
  1. 测试

    访问:localhost:2001

​ 服务注册中心已成功启动,当前没有服务注册

Eureka客户端搭建

搭建eureka客户端作为服务提供者。

步骤

  1. 新建maven子模块:springcloud-eureka-client
  2. 添加依赖
  3. 编写application.yaml
  4. 编写启动类
  5. 测试

实现

  1. 新建maven子模块:springcloud-eureka-client
  2. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
  1. 编写application.yaml
spring:
  application:
    name: springcloud-eureka-client
server:
  port: 8001
eureka:
  instance:
    lease-expiration-duration-in-seconds: 30 #心跳间隔时间,默认为30s
  client:
    registry-fetch-interval-seconds: 30 #拉取注册信息间隔时间,默认30s
    service-url:
      defaultZone: http://127.0.0.1:2001/eureka #表示eureka服务注册中心的部署位置
# info配置
info:
  # 项目的名称
  app.name: 项目名-springcloud
  # 公司的名称
  company.name: 自定义配置
  1. 编写启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableEurekaClient //通过注解触发自动配置
@SpringBootApplication
public class SpringCloudEurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaClientApplication.class,args);
    }
}
  1. 测试

访问:localhost:2001

  • 显示当前客户端已注册

  • 点击status下的项目名可查看当前Info配置,显示的两项配置都是自定义配置

Eureka服务提供者的高可用

需要在搭建好单个服务注册中心和单个服务提供者的基础上进行

步骤:

1.打开Run/Debug Configurations:Run->Edit Configurations

2.修改Run/Debug Configurations


1.1 修改Name:将SpringCloudEurekaClientApplication 修改为 SpringCloudEurekaClientApplication-8001,用端口号做区分
1.2 写入Program arguments:–server.port=8001,写入服务端口号

1.3 复制SpringCloudEurekaClientApplication-8001
1.4 修改Name:将SpringCloudEurekaClientApplication-8001 修改为 SpringCloudEurekaClientApplication-8002,用端口号做区分
1.5 修改Program arguments:将 --server.port=8001 修改为 --server.port=8002

3.测试

3.1 启动server与两个client

3.2 访问http://localhost:2001/

3.3 一个服务可以通过两个端口访问

4.意义

不同端口可以配置不同的yaml,即为同一个服务的不同的端口配置不同的开发环境

Eureka服务管理者的高可用

需要在搭建好单个服务注册中心和单个服务提供者的基础上进行。

步骤

  1. 将springcloud-eureka-server的application.yaml再复制两份,将自身作为服务向其他服务注册中心注册自己,这样就形成了一组相互注册的服务注册中心,实现服务清单的同步,复制的yaml分别为:

    1. application-eureka1.yaml

      spring:
        application:
          name: springcloud-eureka-server
      server:
        port: 2001
      
      eureka:
        instance:
          hostname: eureka1 #hostname用于eureka集群服务器之间的区分
          lease-expiration-duration-in-seconds: 90 #最后一次心跳后,间隔多久认定微服务不可用,默认90
        client:
          register-with-eureka: true #不向自身注册。由于该应用为单个注册中心,所以设置为false,代表不向注册中心注册自己。
          fetch-registry: true #不从自身拉取注册信息。由于单个注册中心,不拉去自身信息。
          serviceUrl.defaultZone: http://localhost:2002/eureka/
        server:
          enable-self-preservation: false #eureka的自我保护状态。测试时将其关闭
      
    2. application-eureka2.yaml

      spring:
        application:
          name: springcloud-eureka-server
      server:
        port: 2001
      
      eureka:
        instance:
          hostname: eureka2 #hostname用于eureka集群服务器之间的区分
          lease-expiration-duration-in-seconds: 90 #最后一次心跳后,间隔多久认定微服务不可用,默认90
        client:
          register-with-eureka: true #不向自身注册。由于该应用为单个注册中心,所以设置为false,代表不向注册中心注册自己。
          fetch-registry: true #不从自身拉取注册信息。由于单个注册中心,不拉去自身信息。
          serviceUrl.defaultZone: http://localhost:2001/eureka/
        server:
          enable-self-preservation: false #eureka的自我保护状态。测试时将其关闭
      
  2. 修改Run/Debug Configurations

    1. 修改Name:将 SpringCloudEurekaServerApplication 修改为 SpringCloudEurekaServerApplication-2001,用端口号做区分
    2. 写入Program arguments:–spring.profiles.active=eureka1 --server.port=2001

    1. 复制SpringCloudEurekaServerApplication-2001
    2. 修改Name:将 SpringCloudEurekaServerApplication-2001 修改为SpringCloudEurekaServerApplication-2002,用端口号做区分
    3. 修改Program arguments:将 --spring.profiles.active=eureka1 --server.port=2001 修改为 --spring.profiles.active=eureka2 --server.port=2002
  3. 修改服务提供者的yaml:修改 eureka.client.service-url.defaultZone,将服务注册到两个注册中心

    spring:
      application:
        name: springcloud-eureka-client
    server:
      port: 8001
    eureka:
      instance:
        lease-expiration-duration-in-seconds: 30 #心跳间隔时间,默认为30s
      client:
        registry-fetch-interval-seconds: 30 #拉取注册信息间隔时间,默认30s
        service-url:
    #      defaultZone: http://127.0.0.1:2001/eureka #表示eureka服务器的部署位置
          defaultZone: http://127.0.0.1:2001/eureka,http://127.0.0.1:2002/eureka
    # info配置
    info:
      # 项目的名称
      app.name: 项目名-springcloud
      # 公司的名称
      company.name: 自定义配置
    
  4. 测试

    1. 启动两个server
    2. 访问http://localhost:2001/

    `

有关Eureka的搭建的更多相关文章

  1. LinuxGUI自动化测试框架搭建(二十二)-框架主入口main.py设计&log日志调用 - 2

    (二十二)-框架主入口main.py设计&log日志调用和生成1测试目的2测试需求3需求分析4详细设计4.1新建存放日志目录log4.1.1配置config.py中写入log的目录4.2`baseInfo.py`中加入日志4.3`test_gedit.py`中加入日志4.4主函数入口main.py中调用日志5调用日志主函数main.py源码6`baseInfo.py`源码7`test_gedit.py`源码8运行效果9目前框架结构1测试目的组织运行所有的测试用例,并调用日志模块,便于问题定位。

  2. 基于ActiveMQ搭建MQTT服务备忘(二):webapp集成 - 2

    (1)为什么写这个话题(Why)读万卷书不如行千里路。这次搭建MQTT服务,遇到了一些误解,特此记录备忘。主要包括:(1)服务(Broker)的账户管理与网页管理平台的账户(2)与web应用的集成(Spring系)(2)ActiveMQ版本选择因为JAVA环境是JDK8,所以按兼容性考虑选择了ActiveMQ5.15的最后版本5.15.15。如果你是JDK11则可考虑ActiveMQ的最新版本5.17或5.18。ActiveMQ支持MQTTv3.1.1andv3.1。(3)ActiveMQ与web应用的集成主要介绍与Spring系的webapp集成(SpringBoot和SpringMVC)。

  3. 【微服务笔记23】使用Spring Cloud微服务组件从0到1搭建一个微服务工程 - 2

    这篇文章,主要介绍如何使用SpringCloud微服务组件从0到1搭建一个微服务工程。目录一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件(2)微服务依赖1.2、搭建注册中心(1)引入依赖(2)配置文件(3)启动类1.3、搭建配置中心(1)引入依赖(2)配置文件(3)启动类1.4、搭建API网关(1)引入依赖(2)配置文件(3)启动类1.5、搭建服务提供者(1)引入依赖(2)配置文件(3)启动类1.6、搭建服务消费者(1)引入依赖(2)配置文件(3)启动类1.7、运行测试一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件这里主要是使用的SpringCloudNetflix

  4. ruby-on-rails - 搭建Ruby开发环境 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我目前正在尝试搭建一个学习Ruby的开发环境。环境主要是为了掌握这门语言,但我很可能会在很长一段时间后转向使用Rails进行开发。以Web开发为目标,我想了解首选的Web服务器和数据库。我打算在虚拟机上设置环境,所以我不担心把它弄坏。因此,我愿意使用Linux发行版、OSX或Windows作为操作系统。我正从C#转向,所以我想在一定程度上被迫采用Ruby的

  5. geth下载安装配置环境及联盟链的搭建 - 2

    以太坊概论考察课更具课堂教学讲解,参考开放资料。使用所学的知识,创建项目并完成要求的内容。包含的功能和要求具体如下:一:安装并运行geth客户端1、下载安装geth首先下载geth:https://geth.ethereum.org/downloads/​选择路径↓2、配置环境变量3、运行geth如下命令所示:查看geth命令。使用gethversion查看geth版本号,判断geth是否成功安装。如下命令所示:`gethversion`可以通过geth--help查看geth工具所支持的命令和相关参数,方便后期关于geth的操作。如下命令所示:geth--help运行结果如下:二:搭建get

  6. 五-1、elasticsearch集群搭建(ES集群搭建) - 2

    目录一、下载Elasticsearch1.选择你要下载的Elasticsearch版本二、采用通用搭建集群的方法三、配置三台es1.上传压缩包到任意一台虚拟机中2.解压并修改配置文件(配置单台es)3.配置三台es集群4.设置后台启动和开机自启(可选)一、下载Elasticsearch1.选择你要下载的Elasticsearch版本es下载地址这里我下载的是二、采用通用搭建集群的方法集群搭建方法三、配置三台es1.上传压缩包到任意一台虚拟机中上传方式有两种第一种:使用xftp上传直接拖动过去就可以了。第二种:使用lrzsz先安装yum-yinstalllrzsz切换到要上传的位置cd/opt/

  7. 【Element UI通用后台管理系统】(一)项目搭建 - 2

    一、使用Yarn作为项目的包管理工具1、Yarn是什么?“Yarn是由Facebook、Google、Exponent和Tilde联合推出了一个新的JS包管理工具,正如官方文档中写的,Yarn是为了弥补npm的一些缺陷而出现的。”这句话让我想起了使用npm时的坑:npminstall的时候非常慢,特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表的含义不同。 "5.0.3"   表示:安装指定的5.0.3版本"~5.0.3"  表示:安

  8. 手把手教你搭建SpringCloud Alibaba之生产者与消费者 - 2

      SpringCloudAlibaba全集文章目录:零、手把手教你搭建SpringCloudAlibaba项目一、手把手教你搭建SpringCloudAlibaba之生产者与消费者二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心四、手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置五、手把手教你搭建SpringCloudAlibaba之Nacos服务持久化配置六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量实时监控七、手把手教你搭

  9. 【保姆级】python最新版3.11.1开发环境搭建,看这一篇就够了 - 2

    【保姆级】Python最新版开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)文章目录【保姆级】Python最新版开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)一、Python解释器安装Windows安装步骤环境变量配置(非必要)MacOS安装步骤Linux安装步骤二、PyCharm安装三、创建Python工程工欲善其事必先利其器,在使用Python开发程序之前,在计算机上搭建Python开发环境是必不可少的环节,目前Python最新稳定版本是3.11.1,且支持到2027年,如下图所示本文手把手带你从0到1搭建Python最新版3.11.1开发环境,堪称保

  10. (一)PaddlePaddle(深度学习框架)的搭建、使用 - 2

    PaddlePaddle是百度公司2016年开源的深度学习框架,现如今可以方便部署到服务器、智能手机和嵌入式设备中。PaddlePaddle还开源大量常用的深度学习模型。一、PaddlePaddle快速入门:(1)PaddlePaddle的大部分API都在paddle.fluid中。接着定义两个PaddlePaddle常量x1和x2,形状是[2,2],也叫维度,并赋值为1,类型为int64,得到一个张良[[1,1],[1,1]],代码:#PaddlePaddle的大部分API都在paddle.fluid中。importpaddle#兼容PaddlePaddle2.0paddle.enable_

随机推荐