Eureka注册中心(三)及工作流程

1 篇文章 0 订阅
1 篇文章 0 订阅

title: SpringCloud学习总结三
date: 2020-06-12
categories:

  • Eureka注册中心
    tags:
  • SpringCloud
  • Eureka注册中心
  • RestTemplate

Eureka注册中心(三)

1.Eureka高可用搭建
1.1 高可用原理

前面我们搭建的注册中心只适合本地开发使用,在生产环境中必须搭建一个集群来保证高可用。Eureka的集群搭建方法很简单:每一台Eureka只需要在配置中指定另外多个Eureka的地址就可以实现一个集群的搭建了。

以2个节点为例来说明搭建方式,假设我们有master和slaveone两台机器,需要做的就是:

·将master注册到slaveone上

·将slaveone注册到master上

1.2 搭建步骤

首先我们需要增加2个属性文件,通过不同的环境来启动不同的实例。

增加application-master.properties:

server.port=8761
#指向你的从节点的Eureka
eureka.client.service-url.default-zone=http://用户名:密码@slaveone:8762/eureka

master和slaveone是hostname,可以在hosts文件中添加,直接写IP也行。

在application.properties中添加下面的内容:

spring.application.name=euraka

eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#是否开启基本的鉴权,默认为true,不想要密码就设置为false
security.basic.enabled=true
security.user.name=ctzeng
security.user.password=123456

#指定不同的环境
spring.profiles.active=master

在A机器上默认用master启动即可,然后在B机器上加上—spring.profiles.active=slaveone启动即可。

这样master和slaveone就互相注册,无论谁挂掉了,应用都能继续使用存活的这个注册中心。

之前在客户端中我们通过配置eureka.client.service-url.default-zone来指定对应的注册中心,当注册中心有多个节点后。那就需要修改配置为多个节点的地址,多个地址用英文逗号隔开就好了。
2.常用配置详解

2.1 关闭自我保护

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景时。

可以在注册中心配置文件中配置:

#快速移除已经失效的服务信息
#关闭自我保护模式
eureka.server.enable-self-preservation=false
#默认60000毫秒
eureka.server.eviction-interval-timer-in-ms=5000

3.开启Eureka认证
3.1服务端配置
Eureka的pom.xml 引入spring-boot-starter-security坐标

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>

Eureka的application.properties 新增用户名密码配置

#开启认证
spring.security.basic.enable=true
#用户名
spring.security.user.name=ctzeng
#密码
spring.security.user.password=123456

3.2客户端配置

eureka.client.service-url.defaultZone:http://ctzeng:123456@localhost:8761/eureka/

注:

  • 需要注意的是spring.application.name=service-consumer中spring.application.name的值不能使用下划线,只能使用中划线。

  • SpringCouldEureka开启验证后无法连接注册中心
    Eureka的Server端和Client端本来已经联通成功,服务注册、发现都正常;
    后来开启了验证功能,Client端向Server端注册服务时,需要验证用户名和密码,问题就出现了
    出错原因:
    因新版(Spring Cloud 2.0 以上)的security默认启用了csrf检验,要在eurekaServer端配置security的csrf检验为false
    解决方法:
    1.在 Eureka Server 项目中添加一个类,继承WebSecurityConfigurerAdapter;
    2.在类上添加 @EnableWebSecurity 注解;
    3.覆盖父类的 configure(HttpSecurity http) 方法,关闭掉 csrf,至此完美解决
    代码如下:

    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();// 关闭csrf检验
        super.configure(http);
    }
    }
    

Eureka工作流程

1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息

2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务

3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常

4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例

5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端

6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式

7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地

8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存

9、Eureka Client 获取到目标服务器信息,发起服务调用

10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值