005 Eureka的HA机制和保护模式

一 .概述

在springcloud之中,eureka作为服务注册中心是一个最为重要的核心组件,几乎整个架构都需要依赖其组件.为了保证其高可用,eureka提供了一系列的举措来完成这件事情.

 

二 .保护模式

在eureka之中,存在一个保护模式.该保护模式描述的情况如下:

[1]默认情况下,客户端需要和eureka的服务器建立心跳机制,为60秒一次心跳.

[2]当心跳丢失3次以上的时候,eureka服务器端就会剔除可能宕机的微服务.

[3]eureka可能会遭遇大规模服务丢失的情况,可能是自己本身出现了问题,但是eureka这个时候就进入了保护模式.

该保护模式直接不剔除任何的服务,因为无法确定是否应该剔除,因此选择保留.

触发的条件是15分钟之内,剔除的服务的数量占到了15%以上的比例.

 

保护模式实际上是说eureka在可能发生某种故障的时候,选择持有本应该受到剔除的服务,为了防止极端的情况,将所有的服务都剔除掉.

 

三.eureka的HA机制

eureka本身既是一个客户端,也是一个服务端,换句话说,它可以接受其他服务的注册,也可以将自己注册到其它的eureka之上.

因此HA机制就变得十分的简单了,我们只需要多创建几个eureka主机彼此之间互相注册就可以完成.

下面,我们模拟一下这个内容.

[1]首先创建一个springcloud-eureka-ha的子项目,然后添加依赖内容.

        <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-security</artifactId>
        </dependency>

[2]添加配置文件内容

spring:
  application:
    name: cloud-consumer
  profiles:
    active:
    - eureka1
security:
  basic:
    enabled: true
  user:
    name: trek
    password: 123
---
spring:
  profiles: eureka1
server:
  port: 9001
      
eureka:
  client:
    service-url:
      defaultZone: http://trek:123@eureka-server-9002:9002/eureka,http://trek:123@eureka-server-9003:9003/eureka 
  instance:
    prefer-ip-address: true
    instance-id: cloud-consumer-${server.port}
    
info:
  name : cloud-consumer
  version: 1.0X
  
---
spring:
  profiles: eureka2
server:
  port: 9002
      
eureka:
  client:
    service-url:
      defaultZone: http://trek:123@eureka-server-9001:9001/eureka,http://trek:123@eureka-server-9003:9003/eureka 
  instance:
    prefer-ip-address: true
    instance-id: cloud-consumer-${server.port}
    
info:
  name : cloud-consumer
  version: 1.0X
  
---
spring:
  profiles: eureka3 
server:
  port: 9003
      
eureka:
  client:
    service-url:
      defaultZone: http://trek:123@eureka-server-9001:9001/eureka,http://trek:123@eureka-server-9002:9002/eureka 
  instance:
    prefer-ip-address: true
    instance-id: cloud-consumer-${server.port}
    
info:
  name : cloud-consumer
  version: 1.0X

我们使用springboot给我们提供的profile特性,主要是方便我们后面启动eureka的时候更加方便.

[3]修改hosts文件内容

127.0.0.1  eureka-server-9001
127.0.0.1  eureka-server-9002
127.0.0.1  eureka-server-9003

[4]项目打包,然后使用--spring.profils.active启动

[5]访问说那个eureka的page页面,我们就会发现下面的内容

实际上这就表示我们的eureka的服务器节点之间现在已经就是复制的关系了,我们的eureka的HA机制也搭建完成了.

 

posted @ 2019-03-03 20:09  最爱五仁月饼  阅读(387)  评论(0编辑  收藏  举报