chapter04:简单的Eureka搭建

一、单机环境

1.1 Eureka Server

1. 导入依赖

        <!--    eureka-server    -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.0.3</version>
        </dependency>

2. yml文件

server:
  port: 7001

eureka:
  instance:
    # eureka服务端的实例名称
    hostname: localhost
  client:
     # false表示不向注册中心注册自己
    register-with-eureka: false
    # false表示自己端就是注册中心,我的职责就是维护服务器的实例,不需要去检索服务
    fetch-registry: false
    service-url:
      # 设置与eureka sever交互的地址与查询服务、注册服务
      defaultZone : http://${eureka.instance.hostname}:${server.port}/eureka/

3. 启动类

添加@EnableEurekaServer注解

1.2 Eureka Cilent

1. 导入依赖

        <!--    eureka-client    -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2. yml文件

server:
  port: 80

spring:
  application:
    # 微服务的名称
    name: cloud-consumer-order

eureka:
  client:
    # true表示向注册中心注册自己,默认为true
    register-with-eureka: true
    # 是否从EurekaServer抓取已有的注册信息,默认为true。
    # 单节点无所谓,集群必须设置true才能够配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      # 设置与eureka sever交互的地址与查询服务、注册服务
      defaultZone : http://localhost:7001/eureka/

3. 启动类

添加@EnableEurekaClient

1.3 测试

浏览器输入http://localhost:7001/
发现 cloud-consumer-order已经注册到服务中心里面了。
在这里插入图片描述

二、集群环境

2.1 简介

目的:避免单个EurekaServer出现故障,导致整个服务不可用
实现:简单来说,我们就是对外就是一个大的整Eureka,里面就包含了好几台:比如说 7001,7002…。 而里面的服务就相互注册,互相守望(你注册我,我注册你)。
在这里插入图片描述

2.2 步骤

现在就创建 7001 与 7002。

1. 搭建集群

(1) 修改映射配置

找到 host文件:C:\Windows\System32\drivers\etc ,修改host映射配置,直接写入

127.0.0.1  eureka7001.com
127.0.0.1  eureka7002.com

注 :mac执行命令 sudo su 切换root账号,然后 vim /etc/hosts进入编辑页面,然后按字母i就可以编辑了,编辑完成后按esc,然后:wq就行了,最后su - 普通账户

注:win拒绝访问解决办法,点开文件属性,安全,设置Users,添加修改写入权限

(2) 修改yml文件

主要是修改hostname, defaultZone
三台的话defaultzone内容逗号分离,
service-url: defaultZoo url1,url2

  1. 修改7001
server:
  port: 7001

eureka:
  instance:
    # eureka服务端的实例名称 对应host的修改
    hostname: eureka7001.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      # 设置与eureka sever交互的地址与查询服务、注册服务
      # 向 http://eureka7002.com:7002/eureka/ 注册
      defaultZone : http://eureka7002.com:7002/eureka/
  1. 修改7002
server:
  port: 7002

eureka:
  instance:
    # eureka服务端的实例名称
    hostname: eureka7002.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      # 设置与eureka sever交互的地址与查询服务、注册服务
      # 向 http://eureka7001.com:7001/eureka/ 注册
      defaultZone : http://eureka7001.com:7001/eureka/

重启7001与7001,浏览器输入:http://eureka7002.com:7002/http://eureka7001.com:7001/
在这里插入图片描述

2. 微服务注册到集群

修改微服务的 defalutZone
在这里插入图片描述


三、Eureka细节修改

导入 spring-boot-starter-actuator依赖,这是程序的监控系统,可以实现健康检查

3.1 修改实例id

在这里插入图片描述

3.2 访问显示IP

在这里插入图片描述


四、Eureka自我保护机制

在这里插入图片描述
如果在15分钟内,客户端节点正常的心跳比例低于85%的,也就是超过15%的客户端节点没有正常心跳才会触发自我保护机制。

目的:针对网络异常波动的安全保护措施,为了保证健壮性,高可用。
自我理解:当 Eureka 捕获到大量的心跳失败时,它不会认为是服务不行了,而是认为是网络问题,不会把服务剔除。

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

4.1 自我保护的关闭

配置 eureka.server.enable-self-preservationtrue打开false禁用。默认是打开。

主要是用于开发环境。开发中启动的服务数量较少而且会经常修改重启。如果开启自我保护机制,很容易触发Eureka客户端心跳占比低于85%的情况。使得Eureka不会剔除我们的服务,从而在我们访问的时候,会访问到可能已经失效的服务,导致请求失败,影响我们的开发。
eureka-server

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone : http://eureka7002.com:7002/eureka/
  server:
    # 关闭自我保护机制
    enable-self-preservation: false
    # 设置扫描失败的间隔时间,单位是毫秒,默认60s(60 * 1000),
    # 每隔2s扫描一次
    eviction-interval-timer-in-ms: 2000

eureka-client

server:
  port: 8001

spring:
  application:
    # 微服务的名称
    name: cloud-payment-service

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/, http://eureka7002.com:7002/eureka/
  instance:
    instance-id: payment-service8001
    prefer-ip-address: true
    # Eureka客户端向服务端发送心跳的间隔时间,单位为s(默认30s),这里设置为1s
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳后等待时间上限,单位为s(默认90s),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

五、总结

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

Eureka Server启动完成之后,微服务节点向注册中心进行注册。如果默认时间90s没有收到来自Client的心跳,会这个服务节点移除。
Eureka Client:内置的、使用轮询(round-robin)负载算法的负载均衡器。启动后,向Eureka Server发送心跳,默认周期为30秒。

key存储服务名,value存放服务地址。
在这里插入图片描述

上一章:chapter03:搭建子模块

下一章:chapter05:简单搭建服务提供方集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值