使用spring cloud eureka构建高可用注册中心遇到的神坑,备忘

来源:互联网 发布:如何查手机mac地址 编辑:程序博客网 时间:2024/06/05 21:04

最近开始尝试spring cloud框架构建分布式服务,开启近年来十分火热的微服务之旅。

接触过分布式微服务技术概念的都应该知道,分布式服务构建应遵循的最著名的CAP理论,而对分布式架构起着关键核心作用的组件之一,莫过于服务注册与发现组件。

对比当前比较流行的一些分布式服务注册中心,只有eureka最贴近标准的分布式构架理论,提供了高可用保障和分区容错机制。因此在一段时间的理论基础准备后,着手构建基于spring cloud eureka的高可用注册中心。因为在本机单机环境中,注册中心由一个spring boot应用组成, 分成三个不同的profile,通过启动不同的profile来启动不同的注册中心实例,我的注册中心配置中,每个profile对应的主机都是localhost(未修改hosts映射 ),不同profile通过设置不同的端口来达到启动多个注册中心的目的。下面问题就来了:

启动结果 :

    三台服务注册中心都可以正常启动,且在启动后的几分钟(大概2-3分钟)内,每一个注册中心上的服务实例(由其它注册中心作为客户端注册进来的)都正常。

    不正常结果 :几分钟之后,各注册中心上注册的其他服务实例都会被莫名其妙的剔除,即使开启eureka的自我保护机制,依然不能阻止服务被剔除,在这个过程中并没有任务异常抛出,查看各注册中心控制台输出日志,发现服务实例续约心跳请求也正常,服务不应该被剔除。而且新注册的服务提供者实例也无法进行数据同步,所以找了很多资料,对照源码分析,发现服务注册,续约,失效剔除等功能貌似都没有问题,能做的配置尝试也基本都做了,依然解决不了问题。

 正题: 直接上最终的解决结果: 修改注册中心配置,配置eureka.instance.preferIpAddress = true 。问题解决。。。

 三个不同的profile上的eureka.instance.hostname 都设为localhost ,就会出现上述服务被剔除且无法同步,why ? 算不算eureka内部bug呢?

阅读全文
0 0