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机制也搭建完成了.