Spring Cloud 探索 | Eureka 高可用部署及 unavailable-replicas 问题

Eureka Server除了单点运行之外,还可以通过运行多个实例,并进行互相注册的方式来实现高可用的部署。所以我们只需要将Eureke Server配置其他可用的 serviceUrl 就能实现高可用部署。

下面我们在上篇文章的基础上来实现Eureka Server的高可用部署。部署图如下图所示:
在这里插入图片描述

将 application.yml 文件复制三分:application-9001.yml,application-9002.yml,application-9003.yml,分别添加配置项如下:

application-9001.yml

spring:
  application:
    name: eureka-server
  security:
    user:
      name: lpf
      password: root

server.port: 9001

eureka:
  instance:
    hostname: eureka-9001.com
    instance-id: eureka-9001
  client:
    service-url:
      defaultZone: http://lpf:root@eureka-9002.com:9002/eureka,http://lpf:root@eureka-9003.com:9003/eureka

logging.level.root: info

application-9002.yml

spring:
  application:
    name: eureka-server
  security:
    user:
      name: lpf
      password: root

server.port: 9002

eureka:
  instance:
    hostname: eureka-9002.com
    instance-id: eureka-9002
  client:
    service-url:
      defaultZone: http://lpf:root@eureka-9001.com:9001/eureka,http://lpf:root@eureka-9003.com:9003/eureka

logging.level.root: info

application-9003.yml

spring:
  application:
    name: eureka-server
  security:
    user:
      name: lpf
      password: root

server.port: 9003

eureka:
  instance:
    hostname: eureka-9003.com
    instance-id: eureka-9003
  client:
    service-url:
      defaultZone: http://lpf:root@eureka-9001.com:9001/eureka,http://lpf:root@eureka-9002.com:9002/eureka

logging.level.root: info

最后,在 hosts 文件中添加如下内容:

127.0.0.1 eureka-9001.com
127.0.0.1 eureka-9002.com
127.0.0.1 eureka-9003.com

注意:要把 application.yml 文件中的内容注释掉,否则会影响 Eureka 的集群部署。因为Spring Boot优先加载 application.yml 中的内容。

最后的最后,通过 spring.profiles.active 属性来分别启动三台服务器:

java -jar SpringCloudEurekaServer.jar --spring.profiles.active=9001
java -jar SpringCloudEurekaServer.jar --spring.profiles.active=9002
java -jar SpringCloudEurekaServer.jar --spring.profiles.active=9003

怎样在 IDEA 下打包,参考这里:idea打包java可执行jar包

此时访问 9001 的注册中心:http://eureka-9001.com:9001/ ,如下图所示,我们可以看到 registered-replicas 中已经有 9002 和 9003 节点的 eureka-server 了。同样地,访问 9002 的注册中心:http://eureka-9002.com:9002/ ,能看到 registered-replicas 中已经有 9001 和 9003 节点,并且这些节点在可用分片(available-replicase)之中。我们也可以尝试关闭 9001,刷新http://eureka-9002.com:9002/ ,可以看到 9001 的节点变为了不可用分片(unavailable-replicas)。
在这里插入图片描述


相信很多小伙伴在实验的时候都会出现这样一个问题:节点出现在 unavailable-replicas 下。下面我们来说一下可能的几种原因:

原因一:prefer-ip-address 配置项设置错误

比如,9001 服务器设置了prefer-ip-address: true,那么它注册到 9002 和 9003 服务器时应该使用 defaultZone:http://yourIP:9001/eureka/ ,但此时可以发现使用的仍然是 hostname 名,导致错误发生。

另一种原因是,三个9001、9002 和 9003 都设置了prefer-ip-address: true,导致最后解析出来的 hostname 都是相同的IP,使副本不可用。

原因二:register-with-eureka 配置项设置错误

看网上很多博客和资料都把此项设置成了 false,此时 eureka 不会注册到其他服务器上,所以出现错误。

原因三:其他原因

还有一些其他原因大家可以参考这里:Eureka高可用,节点均出现在unavailable-replicas下


大家有没有一个疑问:服务实例的注册信息会在各个 eureka server 之间同步,那么,如果几个服务器的某个配置参数不一致会出现什么情况,比如:eureka.server.eviction-interval-timer-in-ms: 7000。

经过测试,每个服务器会按照自己配置的时间间隔清理注册表。

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值