记一次SpringCloud Eureka注册中心4节点的坑

一、客户架构

在4台服务器部署了4套一模一样的springcloud服务,每个服务的defaultZone都配置4个注册中心的ip【17,18,19,20】,如图。

二、想要的效果

每台服务器都能以单节点启动,四套都启动后能互相复制,达到高可用。

即:纵向可单节点,横向可高可用。

三、现实情况

 所有服务都停掉。单独启动,其中2台服务器,启动失败,报错:无法注册到注册中心。

另外2台能正常全部启动,没报错。

满脑袋???????????????????

四、疑问点

1. 为啥打的日志看注册的顺序跟我配置的顺序不一致? 我配的4个ip是本机ip+其他3台ip,不是应该先注册自己吗?为啥打的日志是先注册的别人?就算是不按顺序也应该能轮到注册自己,也不至于失败啊?

2. 为啥4台服务器,2台能启动起来,2台启动不起来,要是不好使不应该都不好使吗?

百度一顿发现基本没什么4节点的注册中心,最多3个节点,没办法,我只能去扒源码了!!!

五、答案来了!还是要看源码!

解答1

defaultZone配置多个的时候,源码里面是会根据本机的ipv4硬件地址做一个随机数,将多个ip进行随机交换swap。

比如17服务器配的是 17,18,19,20, 打乱后顺序就是20,18,19,17

自己的ip被随机交换到了最后一个!

但是!哪怕是交换到最后一个,应该也可以注册到自己啊!为啥会失败嘞?接着看!

我去!这里有个注册中心重试3次机制!

重点!这个次数不能配置,写死的!我找了好几个小时也没找到!!!

所以其实他失败的原因是这样的

1、当把18,19,20全部stop掉以后,单独启17

2、17服务器配置 17,18,19,20 随机交换后 20,19,18,17

3、尝试注册第一次: 20-注册失败

     尝试注册第二次: 19-注册失败

     尝试注册第三次: 18-注册失败

     想要尝试注册第四次,终于可以轮到我自己17了吧,重试次数达到上限.......

完美破案,解答了之前的疑问!

解答2

每台机器的ipv4地址不同,获取到的随机数也不同,当随机swap把自己交换在前3台ip里时,重试3次总是能轮到自己,那么也就能启动成功。

如18每次都能成功,因为随机交换完顺序是: 17,20,18,19  第三次尝试注册自己就可以成功!

如17每次都失败,因为随机交换完顺序是:20,19,18,17  前三次尝试都没注册自己就失败了!

这也就解释了为什么4台服务器,有2台好使,2台不好使,巧了么不是!

六、解决方案

说了这么多,那到底咋解决这个问题?

首先,我们要先理解正确,什么是Eureka的高可用。其实SpringCloud的注册中心高可用根本就不是我上面描述的4套单节点一套一套启动这么玩的!

正确的如下图:

人家是这么玩的。多个注册中心互相注册组成高可用,注册中心是服务端的集群

其他服务都相当于是客户端来注册自己的信息。

启动顺序也是第一步先启动所有注册中心,然后在启动其他服务往注册中心注册。

所以解决方式:

其他服务的defaultZone:  自己+其他2个节点ip    【为了注册服务】

注册中心的defaultZone: 4个节点ip都配置,任意顺序都可以 【为了互相复制】

可能有人会问:那配3个还是4节点的高可用了吗? 你看你还是没明白,4节点高可用指的是注册中心高可用,咱们注册中心依然还是配了4个ip,可以互相复制的,你别说你配3个ip,你就是配2个,他也是4节点高可用,咱们说的高可用是指注册中心挂了一个,他会自动注册到其他注册中心上去,所以只要保证注册中心配了4个,其他服务配1个都没问题!

可能还有人会问:为啥注册中心配4个不怕注册不上,笨蛋!他自己就是注册中心,配置defaultZone是为了高可用节点复制的,不是为了注册的,他是server端不是client端。

好了就说到这吧,如果你没看懂,当我没说。

如果你非要弄懂,那就评论区见吧!

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
动力节点(PowerNode)是一个培训机构,其提供了关于 Spring Cloud 的学习课程。通过参加动力节点Spring Cloud 培训课程,你可以深入学习和实践 Spring Cloud 框架的各个组件和功能。 在动力节点Spring Cloud 培训课程中,你可以学习以下内容: 1. Spring Cloud 的基本概念和架构:学习 Spring Cloud 的核心原理、微服务架构的设计思想,以及 Spring Cloud 的整体架构。 2. 服务注册与发现:学习如何使用 Spring Cloud Netflix Eureka 或 Consul 实现微服务的注册与发现功能,以及如何配置和管理服务的注册中心。 3. 服务间通信:学习如何使用 Spring Cloud Feign 或 Ribbon 实现微服务之间的通信,包括声明式的 REST 调用和负载均衡等功能。 4. 服务网关:学习如何使用 Spring Cloud Gateway 或 Zuul 构建和管理微服务的统一访问入口,实现路由、过滤和认证等功能。 5. 分布式配置管理:学习如何使用 Spring Cloud Config 实现分布式配置管理,通过集中管理配置文件来实现配置的动态更新和管理。 6. 熔断器和容错机制:学习如何使用 Spring Cloud Hystrix 实现微服务的熔断、降级和容错等机制,确保系统的可靠性和稳定性。 7. 消息总线和服务追踪:学习如何使用 Spring Cloud Bus 和 Sleuth 实现消息总线和分布式跟踪功能,方便系统的监控和调试。 通过动力节点的培训课程,你可以系统地学习和实践 Spring Cloud 的各个组件和功能,掌握构建分布式系统的技术和最佳实践。建议你访问动力节点的官方网站或咨询他们的客服了解更多关于 Spring Cloud 培训课程的详细信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值