[alibaba/nacos]nacos宕机后并发的问题

2022-02-23 810 views
7

### 在上述的测试中发现,4 和 6 不在预想当中,故此来咨询一下,解决方案

A B两个服务

1、两个服务都启动,用A调用B 可以正常访问

2、在 1 的基础上,访问一次成功后,停止nacos注册中心的服务

    A可以正常访问B     
    1分钟后: A可以正常访问B   
    5分钟后: A可以正常访问B

3、在 2 的基础上重启A 发现A不能访问B

4、在 3 的基础上, 启动nacos
观察nacos控制台,发现AB两个服务都已经注册到注册中心了,但是A还是不能访问B 重启A后,发现A可以正常访问B

5、在 2 的基础上 重启B
短暂的A可以访问B后, A就再也不能访问B了

6、在 5 的基础上, 启动nacos

    此时。B服务处于假死状态,B 自身服务虽然启动,也注册到了nacos中,但是B自身就不可以访问了  ,通过浏览器。 postman均不可访问, 
    查看进程和端口占用时,系统对应端口和服务进程均存在。

    使用openfeign从A访问B 也是不可以访问

7、在 6 的基础上,重启B

    B 移除了假死状态,已经恢复正常,通过浏览器或其他工具均可访问

    使用openfeign从A访问B,可以正常访问

回答

1

好问题!,请问nacos-service端和client端分别使用的是那个版本呢?

7

nacos server 2.0.3 nacos 客户端 1.1.4 (spring-cloud-alibaba-dependencies 2.2.0.RELEASE)

3

我自己尝试了一下,发现在高版本Client端下面如果nacos-service端停止的话,服务是无法启动的,会报错spring boot启动失败。(这样的话你描述的问题应该会规避掉)你这边是否可以尝试一下client端用尽量高一点的版本1.4.2以上呢?

5

image

我升级了nacos-client端到2.0.3版本,发现4的问题解决了, 6的问题还是存在,可以看到日志当中输入了 停止 tomcat ,tomcat虽然停止了,但是我的进程没有完全停止

我需要手动停止程序后,进程才会停止, image

2

5、在 2 的基础上 重启B 短暂的A可以访问B后, A就再也不能访问B了

当我执行到第五步 重启B的时候发现如果Nacos服务停止的话,B重启会失败(client 2.0.3)无法重现你说的步骤。(^▽^)

2

是否将服务A B都升级到高版本尝试呢?本质问题在于高版本当注册中心无法注册成功的时候整个spring容器是无法启动的!

3

我是将A B服务都升级到了高本版(2.0.3) 当nacos处于宕机状态下, 启动 A 或者B 显示启动失败,但是启动的程序进程并没有关闭。

6

我稍后把我的测试demo 发送出来。

0

请问,是通过什么方式启动?docker还是虚拟机。我是本机idea启动的。显示spring容器初始化失败。

3

我稍后把我的测试demo 发送出来。

0

我使用了两种方式, 一种是 IDEA启动 一种是 jar -jar 启动 两种方式启动失败后进程均不能退出

2

发出来了我也尝试一下复现

8

我用你的demo,加上本地起了最新的2.0.4集群模式,按照1、2、5、6步骤走了一遍,并没有出现你说的b服务假死,但是服务依然注册的情况,因为在第5步nacos挂掉的情况下,你重启B,这个时候B实际上是启动失败的,也没有注册到nacos中,第6步即使你启动了nacos,B服务依然还是处于启动失败的状态,不会自动注册到nacos中,如果你的预期是这种情况下在不重启B服务自动的重新注册,那么这确实是一个问题,nacos暂时不支持.

6

可能我描述的有问题

其实我想说的是 在第5步启动失败的情况下, 我期望的是进程应该自动关闭, 实际效果只有tomcat停止了,但是进程没有停止,这会导致在线上监控服务监控时误以为该服务还活着, 所以我必须通过ping和pong来确保我某个服务是否活着,但是这种方式又总感觉不是很OK

8

en ,这确实是个问题,我再看看代码,本质上是spring-cloud-alibaba这个包的问题