代码信息
本篇文章涉及代码版本
组件 | 版本 |
---|---|
Spring Boot | 2.0.8.RELEASE |
Spring Cloud | Finchley.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-eureka
和eureka.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,如果发现请留言我进行修改。