Spring Cloud 入门——1.2 Eureka 多集群模式

代码信息

本篇文章涉及代码版本

组件版本
Spring Boot2.0.8.RELEASE
Spring CloudFinchley.SR1

本篇文章涉及应用

应用说明
base-eureka-cluster服务发现集群(三个不同端口)

多eureka集群

上一篇我们已经搭建了一个简单的服务发现项目,现在我们要开始学习多个eureka组成集群

假如需要多个eureka组成集群对application.yml需要这样修改

服务1

spring:
  application:
    name: base-eureka
server:
  port: 8000
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/


服务2

spring:
  application:
      name: base-eureka
server:
  port: 8001
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/

服务3

spring:
  application:
      name: base-eureka
server:
  port: 8002
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/

假如只是用来调试也可以将三个配置写在一起

---
spring:
  profiles: peer1
  application:
    name: base-eureka
server:
  port: 8000
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/

---
spring:
  profiles: peer2
  application:
      name: base-eureka
server:
  port: 8001
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/

---
spring:
  profiles: peer3
  application:
      name: base-eureka
server:
  port: 8002
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/,http://peer3:8002/eureka/

启动的时候使用参数启动

在这里插入图片描述

eureka集群遇到的问题:节点均出现在unavailable-replicas下

之前按照网络上的配置很可能出现节点均出现在unavailable-replicas下的问题。这里主要原因有下面几个可能:

defaultZone使用了localhost
这里需要使用域名,比如上面的配置,peer1、2、3是我已经在/etc/hosts进行过配置的地址

127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3

应用名称不一致
spring.application.name参数在多个应用中被设置为了不同的名称。

关闭了eureka客户端认证

eureka.client.register-with-eurekaeureka.client.fetch-registry都是把eureka作为客户端进行注册的参数,系统默认设置为true。但是在初学eureka的时候很多教程都是设置为false。这样可以避免在单一应用的时候进行自我注册。但是在集群环境可以把这个配置删掉,系统会默认设置为true。

当节点在同一机器下的主机名
当节点在同一机器下eureka.instance.hostname的参数需要配置

网上还一种调整prefer-ip-address参数的方式。这个在上面配置情况下是没有起作用的。看了下参数的用途,应该是以IP配置服务地址的时候使用的参数。而在官方文档上我也看到这样内容事实上,如果您在一台知道自己的主机名的机器上运行(默认情况下使用java.net.InetAddress查找),则不需要eureka.instance.hostname。

多服务发现集群配置完成

在这里插入图片描述


本篇文章涉及的源码下载地址:https://gitee.com/daifylearn/cloud-learn

ps.上述的所有项目都是可以成功运行的。但是在后期为了实现每个应用端口尽量不冲突会有些许调整,而后续某次作死调整结构和名称可能会导致部分项目无法运行o(╯□╰)o,如果发现请留言我进行修改。


版权声明:本文为qq330983778原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。