0


记一次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端。

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

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


本文转载自: https://blog.csdn.net/qq_39692584/article/details/136629827
版权归原作者 卡哇1_ 所有, 如有侵权,请联系我们删除。

“记一次SpringCloud Eureka注册中心4节点的坑”的评论:

还没有评论