Eureka注册中心高可用及常用配置项
一、前言
前面已经简单的介绍了 Eureka 注册中心的使用以及查看。下面将继续进行 Eureka 的说明以及应用。
二、Eureka 的高可用搭建
在实际生产项目中,为了保证服务的可用性,连续性,一般来说,都会去搭建应用的集群来保证服务高可用。Eureka 是天生集群的,搭建配置相当简单:不论你有多少的机器部署,只要相互之间指定对方的注册中心地址就可以了。无需更多的配置项,方便,快捷。
有几台机器部署 Eureka,就相互注册下关系,多个 Eureka Server 之间通过复制的方式完成注册服务的同步。本文中使用两个节点来进行模拟使用,如果三台或者更多机器的话,同理可配置。
1、创建配置文件
Eureka 注册中心的项目搭建,之前文中已经搭建并可以使用。新增配置文件:application-ha02.properties、application-ha03.properties
application-ha02.properties 配置如下
server.port=
spring.application.name=nativeEureka
eureka.environment=ha02 eureka.instance.hostname=server2
#是否将自己作为客户端注册到注册中心:false-不注册。默认为true。集群搭建中,设置true
eureka.client.register-with-eureka=true
#是否需要从注册中心检索获取服务的注册信息。默认值为true
#单机版的可设置成false,集群版的由于需要同步其他节点的服务注册数据,故设成true。
eureka.client.fetch-registry=true
#是否开启自我保护模式,默认值true
#eureka server默认在运行期间会去统计心跳失败比例在 分钟之内是否低于 %,如果低于 %,Eureka Server 会将这些实例保护起来,让这些实例不会过期,
#但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败
eureka.server.enable-self-preservation=false
#扫描失效服务的间隔时间,单位毫秒,默认值 *
eureka.server.eviction-interval-timer-in-ms=
#服务地址
eureka.client.service-url.defaultZone= http://server3:8083/eureka/
application-ha03.properties 配置如下
server.port=
spring.application.name=nativeEureka
eureka.environment=ha03 eureka.instance.hostname=server3
#是否将自己作为客户端注册到注册中心:false-不注册。默认为true。集群搭建中,设置true
eureka.client.register-with-eureka=true
#是否需要从注册中心检索获取服务的注册信息。默认值为true
#单机版的可设置成false,集群版的由于需要同步其他节点的服务注册数据,故设成true。
eureka.client.fetch-registry=true
#是否开启自我保护模式,默认值true
#eureka server默认在运行期间会去统计心跳失败比例在 分钟之内是否低于 %,如果低于 %,Eureka Server 会将这些实例保护起来,让这些实例不会过期,
#但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败
eureka.server.enable-self-preservation=false
#扫描失效服务的间隔时间,单位毫秒,默认值 *
eureka.server.eviction-interval-timer-in-ms=
#服务地址
eureka.client.service-url.defaultZone= http://server2:8082/eureka/
其中,server2、server3 为修改本地 hosts 文件。
2、分别启动服务
启动类 NativeEurekaApplication 中,修改加载配置文件,分别应用 ha02 、ha03 配置文件,组建高可用:
package com.cfang; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.annotation.Profile; @SpringBootApplication
@EnableEurekaServer
public class NativeEurekaApplication { public static void main(String[] args) {
// SpringApplication.run(NativeEurekaApplication.class, args);
SpringApplication application = new SpringApplication(NativeEurekaApplication.class);
// application.setAdditionalProfiles("ha02");
application.setAdditionalProfiles("ha03");
application.run(args);
}
}
上面代码中,两次分别启动 ha02 和 ha03,启动两个 Eureka 注册中心。
在单节点启动的时候,会持续报错 Cannot execute request on any known server、Caused by: java.net.ConnectException: Connection refused: connect。此类异常消息,是因为向集群中其他 Eureka 注册服务时候,因为未开启而报错。正常可忽略,待后续逐步启动了所有 Eureka 服务后,此异常会解决消失。
3、控制台查看
启动好后,在 Eureka 控制台中可查看,分别访问:http://server2:8082/、http://server3:8083/


从上面可以看出,DS Replicas、registered-replicas、available-replicas分别有了其他 Eureka 的地址,即:相互Replicate、相互注册,则说明Eureka集群成功。
4、客户端使用
客户端使用过程中,只需要修改配置文件中的注册中心地址就行了:
eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/
有几个 Eureka 提供服务,就在后面加上就行了。重启服务,则在所有的 Eureka 上都能查看到服务注册信息。
三、Eureka 的安全认证
Eureka 可以增加使用 用户名 和 密码 的方式进行安全访问验证。有点类似 ActiveMQ 的用户名密码认证。
1、开启认证
Eureka 注册中心项目 nativeEureka 中,增加 pom 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
新增config
package com.cfang.configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ @Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable(); //关闭csrf过滤
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
} }
修改配置文件 application.properties
server.port=
spring.application.name=nativeEureka eureka.instance.hostname= server1
#是否将自己作为客户端注册到注册中心:false-不注册。默认为true。
eureka.client.register-with-eureka=false
#是否需要从注册中心检索获取服务的注册信息。默认值为true
#单机版的可设置成false,集群版的由于需要同步其他节点的服务注册数据,故设成true。
eureka.client.fetch-registry=false
#是否开启自我保护模式,默认值true
#eureka server默认在运行期间会去统计心跳失败比例在 分钟之内是否低于 %,如果低于 %,Eureka Server 会将这些实例保护起来,让这些实例不会过期,
#但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败
eureka.server.enable-self-preservation=false
#扫描失效服务的间隔时间,单位毫秒,默认值 *
eureka.server.eviction-interval-timer-in-ms=
#安全认证信息
security.basic.enabled=true
spring.security.user.name=root
spring.security.user.password=
#服务地址
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
主要修改增加安全认证信息。
完成以上几个步骤后,启动 Eureka 注册中心,访问 http://server1:8081/。会弹出输入用户名、密码:

输入配置文件中配置的用户名、密码后,登入 Eureka 控制台。
2、Eureka client 端修改
client 端,只需要修改配置文件,在注册的时候的地址信息就好了,带上认证信息:
server.port=
spring.application.name=nativefshService #是否将自己作为客户端注册到注册中心:false-不注册
eureka.client.register-with-eureka=true
#安全认证信息
spring.security.user.name=root
spring.security.user.password=
#服务地址
#eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
如果用户名、密码配置不正确的话,服务注册失败,会报错:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 。
四、Eureka 的常用配置项
1、通用配置
spring.application.name=xxxxxxxxxxxxx :应用名称配置,将会出现在 Eureka 注册中心 Application 列
server.port=8701 :应用端口,默认值为 8761
eureka.instance.hostname= server1 :服务注册中心应用实例主机名
eureka.instance.ip-address=127.0.0.1 :应用实例ip
eureka.instance.prefer-ip-address=false :客户端向注册中心注册时,相较于 hostname 是否有限使用 ip。在服务中心注册后,鼠标放到服务的 Status 列的链接上,无需点击,左下角能看出配置的变化。
eureka.instance.environment=dev :该实例的环境配置
eureka.client.register-with-eureka=false :是否将自己注册到 Eureka 注册中心。单机情况下的 Eureka Server 不需要注册,集群的 Eureka Server 以及 Eureka Client 需要注册。默认值 true
eureka.client.fetch-registry=false :是否需要从注册中心检索获取服务的注册信息。单机情况下的 Eureka Server 不需要获取。集群的 Eureka Server 以及 Eureka Client 需要获取。默认值 true
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/ :Eureka 服务的地址信息,中间的占位符为安全认证开启时使用,如果 Eureka Server 为集群状态,则逗号分隔,依次书写即可。
2、Eureka Server 配置
eureka.server.enable-self-preservation = false :是否开启自我保护模式,eureka server默认在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败。默认 true
eureka.server.eviction-interval-timer-in-ms=10000 :扫描失效服务的时间间隔。单位 毫秒。 默认值 60 * 1000
security.basic.enabled=true :开启 Eureka 安全认证
spring.security.user.name=root :安全认证用户名
spring.security.user.password=123456 :安全认证密码
3、Eureka Client 配置
eureka.client.registry-fetch-interval-seconds=30 :客户端获取服务注册信息时间间隔,单位 秒。默认 30
eureka.instance.appname=eureka-client :服务名,默认取 spring.application.name 配置值,如果没有则为 unknown
eureka.instance.lease-expiration-duration-in-seconds=90 :服务的失效时间,失效的服务将被注册中心删除。时间间隔为最后一次注册中心接收到的心跳时间。单位 秒,默认 90
eureka.instance.lease-renewal-interval-in-seconds=30 :应用实例给注册中心发送心跳的间隔时间,用于表明该服务实例可用。单位 秒。默认30
eureka.client.eureka-server-connect-timeout-seconds=5 :client 连接 Eureka 注册中心的超时时间,单位 秒,默认 5
eureka.client.eureka-server-read-timeout-seconds=8 :client 对 Eureka 服务器读取信息的超时时间,单位 秒,默认 8
eureka.client.eureka-connection-idle-timeout-seconds=30 :client 连接 Eureka 服务端后空闲等待时间,单位 秒,默认 30
eureka.client.eureka-server-total-connections=200 :client 到 所有Eureka 服务端的连接总数,默认 200
eureka.client.eureka-server-total-connections-per-host=50 :client 到 Eureka 单服务端的连接总数,默认 50
Eureka注册中心高可用及常用配置项的更多相关文章
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费
由于 Eureka 注册中心只是在内存中保存服务注册实例,并且没有将服务注册实例进行同步,因此我们需要对服务提供和消费进行调整,需要指定服务提供和消费的注册.服务发现的具体Eureka 注册中心配置, ...
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用搭建
高可用集群 在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对与微服务和服务注册中心都需要高可用部署,Eureka 高可用实际上就是将自己 ...
- Eureka注册中心高可用集群配置
Eureka高可用集群配置 当注册中心扛不住高并发的时候,这时候 要用集群来扛: 我们再新建两个module microservice-eureka-server-2002 microservic ...
- Spring Cloud Eureka 注册中心高可用机制
一.Eureka 正常工作流程 Service 服务作为 Eureka Client 客户端需要在启动的时候就要向 Eureka Server 注册中心进行注册,并获取最新的服务列表数据. Eurek ...
- springCloud 之 Eureka注册中心高可用配置
springCloud的eureka高可用配置方案思路是:几个服务中心之间相互注册,比如两个注册中心,A注册到B上,B注册到A上,如果是三个注册中心则是:A注册到BC上,B注册到AC上,C注册到AB上 ...
- Spring Cloud 之服务注册中心高可用
服务注册中心高可用 服务注册中心 eureka-server 高可用实施 版本 Spring Boot 版本 # Spring Boot 版本: <parent> <groupId& ...
- SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)
微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...
- Spring cloud之Eureka(二)注册中心高可用
背景 在实际的生产环境中,注册中心如果只有一个,是很危险的,当这个注册中心由于各种原因不能提供正常服务或者挂掉时,整个系统都会崩溃,这是很致命的的,所以在Spring cloud 设计之初就考虑到了注 ...
- spring cloud 学习(2) - eureka server注册中心高可用及安全认证
接上节继续,注册中心单点肯定是不牢靠的,可以参考下面的方案做成注册中心集群: 弄成3个节点,每个节点向其它节点注册,这样只要集群中有一个节点正常工作即可.为了方便在本机弄出这种效果,我们先修改下hos ...
随机推荐
- clang和llvm的安装
https://blog.csdn.net/qq_31157999/article/details/78906982
- springboot自定义错误页
静态错误页放在 动态可以放在freemaker或者thymeleaf 匹配规则: 先找动态页面再找静态页面 先找精确错误页面再找模糊页面 注:精确错误页面=50 ...
- JS——数组中push对象,覆盖问题,每次都创建一个新的对象
今天写运动框架时,发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸. 如果你也有类似问题,可以继续看下去哦. 下面 ...
- springboot + 注解 + 拦截器 + JWT 实现角色权限控制
1.关于JWT,参考: (1)10分钟了解JSON Web令牌(JWT) (2)认识JWT (3)基于jwt的token验证 2.JWT的JAVA实现 Java中对JWT的支持可以考虑使用JJWT开源 ...
- luogu P1125 笨小猴 x
P1125 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设max ...
- 立神gvim
set cursorlineset history=1700set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nufiletype ...
- 手写Tomcat源码
http://search.bilibili.com/all?keyword=%E6%89%8B%E5%86%99Tomcat%E6%BA%90%E7%A0%81 tomcat源码分析一:https: ...
- 解决:未能加载文件或程序集“MiniProfiler”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
参考:https://www.lanhusoft.com/Article/120.html 产生的原因: 公司原来的项目用的是MiniProfiler 3.0.11新项目本来想使用4.0,但是无奈网上 ...
- 配置maven方法
配置maven方法 1.官网下载maven, http://maven.apache.org/download.cgi Only the binaries are required, so look ...
- Maps.newHashMap 和 new HashMap的区别
区别: (1)Map<String, Object> result = new HashMap<String,Object>(); 这种是java原生API写法,需要你手动加泛 ...