springcloud之Eureka高可用和用户认证

Eureka进阶

一、Eureka Server的高可用

因为单节点Eureka Server并不适合线上生产环境,Eureka Client会定时连接Eureka Server,获取服务注册列表中到的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka发生宕机,也不会影响服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Client中的缓存若不更新,就可能会影响微服务的调用,甚至影响整个应用系统的高可用性。因此,在生产环境中,通常会部署一个高可用的Eureka Server集群。

(1)实现高可用Eureka Server

Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server默认行为,还记得在Eureka基础中的eureka.client.registerWithEureka:false和eureka.client.fetchRegistry:false这两个配置吗,通过这两个可以取消互相注册。

(2)案例实现

1、配置系统的hosts文件

Windows系统的hosts文件路径是C:\Windows\System32\drivers\etc\hosts;
Linux及Mac Os等系统的文件路径是:/etc/hosts

2、修改application.yml文件,事项两个节点的Eureka Server相互注册

spring:
  application:
     name:该模块的服务名
---
spring:
  profiles:peer1
server:
  port:8761
eureka:
  instance:
  hostname:peer1
client:
  serviceUrl:
    defaultZone:http://peer2:8762/eureka/
---
spring:
  profiles:peer2
server:
  port:8762
eureka:
  instance:
  hostname:peer2
client:
  serviceUrl:
    defaultZone:http://peer1:8761/eureka/

注释:

“---”表示连接字符,用于将该application.yml文件分为三段。第二段和第三段分别为spring.properties指定了一个值,该值表示它所在的那段内容用在那个profile里。第一段由于并未指定spring.profiles,因此这段内容会对所有Profile生效。
配置文件的相关理解:我们定义了peer1和peer2这两个profile,当应用以peer1这个profile启动时,配置Eureka Server的主机名为peer1,并将其注册到http://peer2:8762/eureka/;反之,当应用以profile=peer2时,Eureka Server会注册到peer1节点的Eureka Server。

3、application.yml文件的另外一种配置方法

spring:
  application:
     name:该模块的服务名
     eureka:
  instance:
  hostname:peer1
eureka:
  client:
    serviceUrl:
      defaultZone:http://peer2:8762/eureka/,http://peer1:8761/eureka/
---
spring:
  profiles:peer1
server:
  port:8761
eureka:
  instance:
  hostname:peer1
---
spring:
  profiles:peer2
server:
  port:8762
eureka:
  instance:
  hostname:peer2

(3)将应用注册到Eureka Server集群上,修改application.yml文件

eureka:
  client:
    serviceUrl:
      defaultZone:http://peer2:8762/eureka/,http://peer1:8761/eureka/

通过配置多个Eureka Server地址,就可以将其注册到Eureka Server集群上,当然,微服务即使只配置Eureka Server集群中的某一个节点,也能正常注册到Eureka Server集群,因为多个Eureka Server之间的数据会相互同步。在正常情况下,这种方式与配置多个server节点的效果是一样的,不过为适应某些极端场景,建议在客户端配置多个Eureka Server节点。

二、用户认证

在我们前面的案例中,Eureka Server是允许匿名访问的,在实际项目中,可能希望经过用户认证才允许访问Eureka Server。

1、为Eureka Server添加用户认证,创建Eureka Server 模块

(1)、jar包依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

(2)、application.yml文件

server: port: 6868 security: basic: enabled: true user: name: user password: password123 eureka: client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://user:password123@127.0.0.1:${server.port}/eureka/

注释:

通过以上配置就为Eureka Server添加了基于HTTP basic的认证,如果不设置这段内容,账号默认是user,密码是一个随机值,该值会在启动时打印出来;

密码位置

(3)测试

当我们启动该模块后,在地址栏输入:http://127.0.0.1:6868/时就需要身份验证,通过输入用户名和密码后就可登录。

2、将微服务注册到需要认证的Eureka Server

(1)修改application.yml文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://user:password123[@127.0.0.1](https://my.oschina.net/u/567043):6868/eureka/

如果需要满足负责的需求,就可以通过创建一个类为为DiscoveryVlientOptionalArgs的@Bean,并向其中注入ClientFilter

package com.yczj;

import com.netflix.discovery.DiscoveryClient;
import com.sun.jersey.api.client.filter.ClientFilter;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import org.springframework.context.annotation.Bean;
import java.util.ArrayList;
import java.util.List;

public class DiscoveryVlientOptionalArgs {
    [@Bean](https://my.oschina.net/bean)
    public DiscoveryClient.DiscoveryClientOptionalArgs discoveryClientOptionalArgs() {
        DiscoveryClient.DiscoveryClientOptionalArgs discoveryClientOptionalArgs = new DiscoveryClient.DiscoveryClientOptionalArgs();
        List<ClientFilter> addit = new ArrayList<>();
        addit.add(new HTTPBasicAuthFilter("user", "password123"));
        discoveryClientOptionalArgs.setAdditionalFilters(addit);
        return discoveryClientOptionalArgs;
    }
}

注释:需要添加jar包

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.19.1</version>
</dependency>

转载于:https://my.oschina.net/u/3943993/blog/2413899

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值