当前位置:   article > 正文

SpringCloud-Eureka快速入门,集群搭建_eureka-server 监控页面

eureka-server 监控页面

Eureka

个人主页:https://blog.csdn.net/hello_list?type=blog

前言

第一章:SpringCloud环境搭建 — Rest使用

这里博主从说更新springcloud,发了第一篇之后好久又没更新了,这里不是没有学习了,其实我都已经把文章全部写好了,整个springcloud的,几大组件,所以大家在看文章的时候可以依赖会有变动,因为比如Eureka用着没什么问题,之后有用到Ribbon,zull可能依赖就有问题了,需要更换,不过也可能不会换前面的,所以大家还是可以出了问题就换依赖试一下
这里我么就说明了什么,如果发现有错误,大部分都是依赖问题,springcloud本身没有太多编码什么的,大多导依赖然后配置,不是依赖不行了,就是配置错了,很简单的,这里博主也都写好了,慢慢就都发出来了,所以大家可以关注点赞收藏不迷路!!!

学习Eureka那我们就要知道Eureka是什么,前面我们学过zookeeper了,注册中心,Eureka就是springcloud下被spring共公司封装了的注册中心,但是与zookeeper不同,具体不同,我觉得多说无益,都用一下就知道哪里不同了,下面是我从别人哪里复制的,可以看下这样的说话。

  • Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper

  • Eureka基本的架构

    • Springcloud 封装了Netflix公司开发的Eureka模块来实现服务注册与发现 (对比Zookeeper).
    • Eureka采用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,他是服务注册中心.
    • 而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行,Springcloud 的一些其他模块 (比如Zuul) 就可以通过EurekaServer来发现系统中的其他微服务,并执行相关的逻辑.

Eureka的架构设计图

在这里插入图片描述

Eureka-Server

新建一个普通的maven项目,导入eureka依赖,做一个注册中心,新建一个项目名springcloud-eureka-7001,还是那几个步骤,微服务就这么简单,我觉得比起成吨的java代码,理论上也好理解

1、导入依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、编写配置

新建application.yml文件

server:
  port: 7001


# Eureka配置
eureka:
  instance:
    hostname: localhost  # Eureka实例名称
  client:
    # 是否是客户端,是否注册自己,默认都是true这里我们选择false就是自己是注册中心
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #监控页面,这里改成我们自己定义的
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3、开启功能

创建springboot启动类

@SpringBootApplication
@EnableEurekaServer  //开启eureka服务端功能
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class,args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

启动程序,启动成功,访问http://localhost:7001/这里就是注册中心页面

在这里插入图片描述

Eureka-Client

同样的,这里我们直接注册8001服务

1、导入依赖,一会儿还有一个问题,我们稍后再说

<!--Eureka依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

<!--完善监控信息-->

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2、编写配置,这里是我们服务端配置,自动去注册中心注册

# Eureka配置,注册服务
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
  instance:
    instance-id: springcloud-provider-account8001  # 修改默认描述信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、开启功能,加到springboot启动类上

@EnableEurekaClient //启动客户端服务
  • 1

启动项目,可以看到,我们的服务就被注册了进来

在这里插入图片描述

自我保护机制

这个时候我们关闭8001服务,我们等待下,可以看到这样的报错,其实这就是euraka的自我保护机制,当服务出现宕机等问题时候,注册中心并不会立马清除服务,而且会保存服务等待服务恢复

不难理解吧,其实就是保持不会立马清楚这个服务,如果想深入了解下这个机制,可以自行了解,反正不难的很简单。

在这里插入图片描述

完善监控信息

当我们点击1的时候,我们发现跳转到2这个地址页面,是不是404什么都没有,这是因为我们还没有配置,这里我们可以添加服务的描述信息,这个地方我这里出问题了,最后参考这个文章配置了下,大家可以看看:(4条消息) Eureka 遇到/actuator/info不显示_dyao23的博客-CSDN博客_/actuator/info

1、导入actuator依赖,上面我们已经导入了,因为我这里出不来,所以加了这个插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>build-info</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2、编写配置,我这里也加了相对应的management配置

# 导入actuator可以完善监控信息配置
info:
  app.name: springcloud-account
  company.name: blog.csdn.net/hello_list

management:
  endpoints:
    web:
      exposure:
        include: "*"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

但是还是不可以,出来的这个

在这里插入图片描述

3、启动程序,因为上面出现的还是花括号,这里我用那个文章里的插件打包了下,就可以了,然后点击链接,就可以出来我们服务信息的描述,这样可以用来做我们服务信息的一个描述,在使用中查看

在这里插入图片描述

DiscoveryClient服务发现

Eureka我们叫注册中心,就是服务的注册和发现,我们了解了服务注册,我们如何去发现服务呢,客户端如何去发现服务然后调用服务,这里我们去尝试下DiscoveryClient发现服务,调用服务就不用说了吧,Eureka基于restful我们前面使用了restful调用服务,所以在调用前我们应该去发现服务

这里我们直接拿8001再次当成客户端,我们之前不是写过一个测试controller嘛,现在就用来做客户端。

注入bean,这里我们用的是springboot框架的,别导错包了

在这里插入图片描述

我们新加一个方法

@GetMapping("/client/discovery")
public Object discovery(){
    // 这里我们模拟操作下
    // 通过客户端去注册中心拿到服务信息,拿到服务信息后我们就可以restful去进行请求

    // 获取微服务的列表清单
    List<String> services = client.getServices();
    System.out.println("service======>"+services);

    // 我们还可以通过服务id得到一个具体的服务信息,这里调用的自己8001端口服务
    // 自己点一个下就那么几个属性
    List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-ACCOUNT");
    for (ServiceInstance instance : instances) {
        System.out.println(
            instance.getHost()+"\t"+
            instance.getPort()+"\t"+
            instance.getUri()+"\t"+
            instance.getServiceId()+"\t"+
            instance.getScheme()+"\t"+
            instance.getMetadata()
        );
    }
    return this.client;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

我们可以知道都有什么服务,服务信息是什么,这个就是我们的实例id

在这里插入图片描述

我们看一下都能得到什么,访问测试,我们可以拿到这些数据信息

在这里插入图片描述

在这里插入图片描述

有了这些信息,我们就可以通过restful去调用请求,然后完成远程调用,对吧,是不是很简单,其实我们发现本质还是调用请求。

Eureka集群搭建

特别简单,我们搭建一个三个注册中心的集群,我们再新建两个项目,其实本质就是一个项目复制粘贴,还是几步

1、导入依赖

2、编写配置

在这里插入图片描述

1,3步我们可以省略吧,这里我们主要看3个集群的配置,三个集群我们开三个端口7001,7002,7003,集群可简单我们看下配置就知道多简单了

这里我们为了方便和直观感受分布式,我们做一个主机映射,我这里必须管理员权限访问,这里大家就跟我一样吧,告诉大家这个方法,记事本管理员方式打开

在这里插入图片描述

Ctrl+o快捷键

在这里插入图片描述

然后在最末尾添加,这样我们访问eureka7001.com就都是在访问我们本地127.0.0.1

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
  • 1
  • 2
  • 3

这样做一个映射非常的直观,其实也可以不用做,我们下面不是有实例名嘛,修改下,可能会有问题,还是这样做吧,因为实例名不能都是localhost,然后不是localhost就不能访问本地回环地址,打不开网页;自己尝试试试看

7001配置

server:
  port: 7001


# Eureka配置
eureka:
  instance:
    hostname: eureka7001.com  # Eureka实例名称
  client:
    # 是否是客户端,是否注册自己,默认都是true这里我们选择false就是自己是注册中心
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #监控页面,这里改成我们自己定义的
      #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

7002配置

server:
  port: 7002


# Eureka配置
eureka:
  instance:
    hostname: eureka7002.com  # Eureka实例名称
  client:
    # 是否是客户端,是否注册自己,默认都是true这里我们选择false就是自己是注册中心
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #监控页面,这里改成我们自己定义的
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7003.com:7003/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

7003配置

server:
  port: 7003


# Eureka配置
eureka:
  instance:
    hostname: eureka7003.com  # Eureka实例名称
  client:
    # 是否是客户端,是否注册自己,默认都是true这里我们选择false就是自己是注册中心
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #监控页面,这里改成我们自己定义的
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3、主启动类,开启功能,把这三个都开启

我们访问eureka7001.com:7001,可以看到7002和7003的集群信息

在这里插入图片描述

同样的访问其他两个都是一样:

在这里插入图片描述

在这里插入图片描述

集群就搭建成功了,我们试着把8001的服务注册进去这几个注册中心,这里我们要注册三个,所以是不是应该修改下配置文件,这里做下修改就可以了

在这里插入图片描述

我们可以看到7002里已经把这个服务注册进来了

在这里插入图片描述

7001:

在这里插入图片描述

7003,可能是我得后台不稳定啊,不知道为什么说服务没了,可能后台服务不稳定,自我保护敏感吧,但是不影响使用

在这里插入图片描述

这里我们还可以把80consumer打开测试下,ok没有问题:

在这里插入图片描述

以下为其他原文,理论的大家可以看下:https://www.kuangstudy.com/bbs/1374942542566551554

1. 回顾CAP原则

RDBMS (MySQL\Oracle\sqlServer) ===> ACID

NoSQL (Redis\MongoDB) ===> CAP

2. ACID是什么?
  • A (Atomicity) 原子性
  • C (Consistency) 一致性
  • I (Isolation) 隔离性
  • D (Durability) 持久性
3. CAP是什么?
  • C (Consistency) 强一致性
  • A (Availability) 可用性
  • P (Partition tolerance) 分区容错性

CAP的三进二:CA、AP、CP

4. CAP理论的核心
  • 一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求
  • 根据CAP原理,将NoSQL数据库分成了满足CA原则,满足CP原则和满足AP原则三大类
    • CA:单点集群,满足一致性,可用性的系统,通常可扩展性较差
    • CP:满足一致性,分区容错的系统,通常性能不是特别高
    • AP:满足可用性,分区容错的系统,通常可能对一致性要求低一些
5. 作为分布式服务注册中心,Eureka比Zookeeper好在哪里?

著名的CAP理论指出,一个分布式系统不可能同时满足C (一致性) 、A (可用性) 、P (容错性),由于分区容错性P再分布式系统中是必须要保证的,因此我们只能再A和C之间进行权衡。

  • Zookeeper 保证的是 CP —> 满足一致性,分区容错的系统,通常性能不是特别高
  • Eureka 保证的是 AP —> 满足可用性,分区容错的系统,通常可能对一致性要求低一些

Zookeeper保证的是CP

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接收服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但zookeeper会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30-120s,且选举期间整个zookeeper集群是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因为网络问题使得zookeeper集群失去master节点是较大概率发生的事件,虽然服务最终能够恢复,但是,漫长的选举时间导致注册长期不可用,是不可容忍的。

Eureka保证的是AP

Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册时,如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保住注册服务的可用性,只不过查到的信息可能不是最新的,除此之外,Eureka还有之中自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

  • Eureka不在从注册列表中移除因为长时间没收到心跳而应该过期的服务
  • Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上 (即保证当前节点依然可用)
  • 当网络稳定时,当前实例新的注册信息会被同步到其他节点中

因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪

小结

都看到这里了,还不点个关注吗,bye~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/955813
推荐阅读
相关标签
  

闽ICP备14008679号