打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring Cloud 探索 | Eureka 高可用部署及 unavailable

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: rootserver.port: 9001eureka:  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/eurekalogging.level.root: info

application-9002.yml

spring:  application:    name: eureka-server  security:    user:      name: lpf      password: rootserver.port: 9002eureka:  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/eurekalogging.level.root: info

application-9003.yml

spring:  application:    name: eureka-server  security:    user:      name: lpf      password: rootserver.port: 9003eureka:  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/eurekalogging.level.root: info

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

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

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

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

java -jar SpringCloudEurekaServer.jar --spring.profiles.active=9001java -jar SpringCloudEurekaServer.jar --spring.profiles.active=9002java -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。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从零搭建 Spring Cloud 服务(超级详细)
微服务框架Spring Cloud介绍 Part2: Spring Cloud与微服务
spring-cloud(二)分布式配置中心[Git]
spring cloud
SC中Eureka Server的HA和安全身份验证
对SpringCloud微服务架构的理解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服