Spring Cloud 实战(二)- Eureka 高可用注册中心
Eureka 高可用注册中心
点餐系统中的产品服务、订单服务已写了大半,但是注册中心高可用一直还没解决,今儿就把我遇到的坑尘现出来,避免以后再遇到此问题无章可循了。
Eureka Server1 配置
server:
port: 9009
# spring
spring:
application:
name: eureka
profiles:
active: peers0
#Eureka Server
eureka:
client:
service-url:
defaultZone: http://peers1:9010/eureka/
fetch-registry: true
register-with-eureka: true
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
hostname: peers0
prefer-ip-address: false
Eureka Server2 配置
server:
port: 9010
# spring
spring:
application:
name: eureka
profiles:
active: peers1
#Eureka Server
eureka:
client:
service-url:
defaultZone: http://peers0:9009/eureka/
fetch-registry: true
register-with-eureka: true
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
hostname: peers1
prefer-ip-address: false
hosts 配置
127.0.0.1 peers0
127.0.0.1 peers1
结果展示
坑点儿
网上看到的情况大都是这样子的:
unavailable-replicas 问题一大推,总结了几个原因会导致这类问题:
1. eureka.client.serviceUrl.defaultZone配置项的地址,不能使用localhost,要使用peers0、peers1之类的域名,通过host映射到127.0.0.1;
2. spring.application.name或eureka.instance.hostname必须一致;
3. 相互注册要开启:
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
我之前遇到的问题是,两个 eureka 服务的spring.application.name不一致导致。具体配置情况可参考 翟永超的《Spring Cloud微服务实战》 Page:46的详细说明。