Eureka Server 配置

Eureka Server 配置

一、初级配置(傻瓜式,单节点)

1、新建一个 Spring Boot 项目

2、在 pom.xml 文件中添加

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3、在 application.java 中开启注解如下:

@SpringBootApplication
@EnableEurekaServer
public class MicroserviceDiscoveryEurekaApplication
{

    public static void main (String[] args)
    {
        SpringApplication.run(MicroserviceDiscoveryEurekaApplication.class, args);
    }

}

4、在 application.yml 中添加如下配置

server:
  port:  8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      eureka: http://localhost:8761/eureka/
  • register-with-eureka 表示是否将自己注册到 Eureka Server 中
  • fetch-registry 表示是否从 Eureka Server 中获取注册信息
  • service-url Eureka Server 地址,以 Map 的形式存放

5、启动 application

二、 Eureka Server 集群

构建三个节点的 Eureka Server 集群以及添加用户认证

1、在 C:\Windows\System32\drivers\etc 下的 host 文件中添加如下几项:

127.0.0.1 eureka-node-a
127.0.0.1 eureka-node-b
127.0.0.1 eureka-node-c

2、添加 Spring Boot Security

<!--- 添加用户认证 -->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--- end -->

3、复制三份 application.yml 文件,重命名为 application-node-a.yml、application-node-b.yml、application-node-c.yml,分别配置如下

application-node-a.yml

server:
  port: 8761

eureka:
  client:
    service-url:
      defaultZone: http://zolmk:zolmk@eureka-node-b:8762/eureka/,http://zolmk:zolmk@eureka-node-c:8763/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    hostname: eureka-node-a
    prefer-ip-address: false
spring:
  security:
    user:
      name: zolmk
      password: zolmk
  application:
    name: eureka-server

application-node-b.yml

server:
  port: 8762

eureka:
  client:
    service-url:
      defaultZone: http://zolmk:zolmk@eureka-node-a:8761/eureka/,http://zolmk:zolmk@eureka-node-c:8763/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    hostname: eureka-node-b
    prefer-ip-address: false
spring:
  security:
    user:
      name: zolmk
      password: zolmk
  application:
    name: eureka-server

application-node-c.yml

server:
  port: 8763

eureka:
  client:
    service-url:
      defaultZone: http://zolmk:zolmk@eureka-node-a:8761/eureka/,http://zolmk:zolmk@eureka-node-b:8762/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    hostname: eureka-node-c
    prefer-ip-address: false
spring:
  security:
    user:
      name: zolmk
      password: zolmk
  application:
    name: eureka-server

需要注意以下几点,不然会出现 Unavailable replicas

  • 需配置 hostname
  • eureka.instance.prefer-ip-address 需 = false
  • register-with-eureka 需 = true
  • 集群中的 spring.application.name 最好相同
  • 认证配置是在 defaultZone: user:password@hostname:port/eureka/ 这里体现

4、配置三个Spring Boot 启动项,Active profiles 文件中分别填写 node-a、node-b、node-c。

5、分别启动这三个应用,构建一个集群,访问 http://eureka-node-a:8761http://eureka-node-b:8762http://eureka-node-c:8763

三、微服务的自我保护模式

进入自我保护模式最直观的表现是首页输出的警告。

默认情况下,如果 Eureka Server 在一定时间内没有收到某个微服务实例的心跳,Eureka Server 将会注销该实例(默认90秒),但是当网络分区故障发生时,微服务无法与 Eureka Server 进行通信,这时候 Eureka Server 如果删除该微服务就变得很危险了。

Eureka 通过“自我保护”来解决这个问题——当 Eureka Server 节点在短时间内丢失过多客户端时,那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server 就会保护服务注册表中的信息,不再删除服务注册表中的数据。当网络故障恢复后,该 Eureka Server 节点会自动退出保护模式。

在 Spring Cloud 中,可以使用 eureka.server.enable-self-preservation = false 禁用自我保护模式。

posted @ 2020-12-02 15:22  zolmk  阅读(852)  评论(0编辑  收藏  举报