Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos 2.0.0-bugfix版本,选主失败,此时nacos-client-2.0.0版本服务注册成功,但是控制台不显示 #5361

Closed
MajorHe1 opened this issue Apr 13, 2021 · 13 comments
Labels
area/Document Category issues or prs related to document. contribution welcome kind/enhancement Category issues or prs related to enhancement.
Milestone

Comments

@MajorHe1
Copy link
Collaborator

Describe the bug
注意到有几个issue 在提2.0.0版本的 nacos-client无法注册服务的问题,例如
#5299
#5339
总体表现为客户端没有异常,但是控制台上看不到注册的服务。
我自己在测试的时候也发现了这个问题。

Expected behavior
其实这个时候服务是没有注册成功的,客户端应该给出异常信息

How to Reproduce
描述一下背景吧

  1. 首先nacos 集群 jraft 选主失败,假设此时存在三台机器 A、B、C,机器B、C处于 server is DOWN now 的状态,无法工作,剩下机器A正常工作
  2. 使用nacos-client-2.0.0版本向机器A注册服务,显示成功,没有异常,但是机器A的控制台并不能看到该服务,使用openAPI查询也查不到,证明此时服务注册其实并没有成功
  3. 使用nacos-client-1.4.1版本或更早的版本向机器A注册服务,显示成功,此时机器A的控制台可以看到该服务
  4. 使用nacos-client-2.0.0版本向机器A注册持久服务而非临时服务,显示成功,此时机器A的控制台可以看到该服务

原因分析
由上述2、3、4三种情况的对比可知,使用grpc协议注册出了问题,http协议注册是正常的。

分析代码
当grpc协议进行注册的时候:
image
可以看到只是publish 了事件就返回,所以客户端看不到异常。实际上事件的监听方在执行的时候,ClientRegisterServiceEvent 触发 ServiceChangedEvent,最后:
image
所以服务注册并没有成功。

修复建议
提交了一个简单的PR,将upgradeJudgement.isUseGrpcFeatures() 提前到注册之前就判断,可以临时解决一下
想知道nacos团队如何看待这个问题,有没有完善一点的解决方案
尤其是在做cp协议和ap协议分离的时候,因为这个问题我理解本质上是 jraft 选主失败导致的。

MajorHe1 added a commit to MajorHe1/nacos that referenced this issue Apr 13, 2021
@KomachiSion
Copy link
Collaborator

这是我们文档的疏漏,导致使用方法错误。

原因是因为集群没有正确升级到2.0模式,仍然使用的是1.X模式, 所以用grpc注册的服务,在1.X模式下看不到(看不到才正常)。

这里可能需要在文档中补充一下, 对于非升级用户。可以在搭建完成之后,直接执行curl -X PUT 'localhost:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false' 命令关闭双写, 直接升级到2.0模式。

@KomachiSion KomachiSion added area/Document Category issues or prs related to document. status/wontfix This will not be worked on labels Apr 14, 2021
@MajorHe1
Copy link
Collaborator Author

这是我们文档的疏漏,导致使用方法错误。

原因是因为集群没有正确升级到2.0模式,仍然使用的是1.X模式, 所以用grpc注册的服务,在1.X模式下看不到(看不到才正常)。

这里可能需要在文档中补充一下, 对于非升级用户。可以在搭建完成之后,直接执行curl -X PUT 'localhost:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false' 命令关闭双写, 直接升级到2.0模式。

我是直接搭建的2.0的集群,并不是从1.4.X升级到2.0的,所以不懂您说的没有正确升级是什么意思。
我这边的直接原因是目前集群处于选主失败的状态,一台可用,两台不可用,代码的执行结果如下
image
所以我理解在这种情况下,即使执行命令关闭了双写,isUseGrpcFeatures() 依然是false,grpc还是不可用。
退一步来说,对于每一个搭建2.0集群的用户,如果都要执行这个命令才能保证集群grpc可用,会不会对用户来说太不友好了?

@KomachiSion
Copy link
Collaborator

KomachiSion commented Apr 14, 2021

这是必须的,因为需要考虑升级用户。所以启动时必须时以1.X模式启动。

升级会有判断,需要集群中所有节点都达到可升级至2.0的状态,才可以升级成2.0模式。

https://nacos.io/zh-cn/docs/2.0.0-upgrading.html

直接部署的,文档也有提示直接跳到关闭双写步骤。麻烦按照文档操作再尝试。

目前计划是2.0作为1.X~2.X的一个升级过度版本。 2.1版本会移除这个恶心的双写和升级判断逻辑,启动就是2.0模式。

@KomachiSion
Copy link
Collaborator

之后再补充一个2.0的直接部署(非升级)文档。详细描述一下这个步骤和注意点。

@MajorHe1
Copy link
Collaborator Author

MajorHe1 commented Apr 14, 2021

2.1版本会移除这个恶心的双写和升级判断逻辑

官方吐槽哈哈哈
移除的意思是连带 UpgradeJudgement.java 这个类一并移除吗?
另外请问一下2.1版本大概计划在什么时候发布呢?非常期待,毕竟2.0太痛苦了

@KomachiSion
Copy link
Collaborator

2.1版本会移除这个恶心的双写和升级判断逻辑

官方吐槽哈哈哈
移除的意思是连带 UpgradeJudgement.java 这个类一并移除吗?
另外请问一下2.1版本大概计划在什么时候发布呢?非常期待,毕竟2.0太痛苦了

肯定是要移除的,这个就是为了1.X升级2.0添加的,稳定跑2.0版本之后肯定不需要了。

2.1计划需要3~4个月后发布。 需要等待2.0的功能更加稳定再进行,2.1会对包结构和冗余代码做比较大量的调整。需要先将基础功能稳定好。

@KomachiSion
Copy link
Collaborator

关于PR 可以保证不会临时解决一下。 不过提示可能要改一下。

@MajorHe1
Copy link
Collaborator Author

MajorHe1 commented Apr 15, 2021

2.1计划需要3~4个月后发布。 需要等待2.0的功能更加稳定再进行,2.1会对包结构和冗余代码做比较大量的调整。需要先将基础功能稳定好。

2.0版本升级2.1版本可以无缝替换升级吗

MajorHe1 added a commit to MajorHe1/nacos that referenced this issue Apr 15, 2021
KomachiSion pushed a commit that referenced this issue Apr 16, 2021
…GRPC protocol (#5365)

* [ISSUE #5361] check isUseGrpcFeatures() when register instance using GRPC protocol

* [ISSUE #5361] change hint message when register instance failed using GRPC
@KomachiSion KomachiSion added kind/enhancement Category issues or prs related to enhancement. and removed status/wontfix This will not be worked on labels Apr 16, 2021
@KomachiSion KomachiSion added this to the 2.0.1 milestone Apr 16, 2021
@KomachiSion
Copy link
Collaborator

2.1计划需要3~4个月后发布。 需要等待2.0的功能更加稳定再进行,2.1会对包结构和冗余代码做比较大量的调整。需要先将基础功能稳定好。

2.0版本升级2.1版本可以无缝替换升级吗

肯定可以啊,但是需要升级并运行在2.0模式之后。

@MajorHe1
Copy link
Collaborator Author

好的,非常期待~

@MajorHe1 MajorHe1 reopened this Apr 19, 2021
@MajorHe1
Copy link
Collaborator Author

重新开一下issue。。。
开始提交PR的时候只关心了 ActionTypes 是 WRITE 的 服务注册和去注册逻辑
后面发现,SubscribeServiceRequestHandler 这个类的服务监听和去监听方法,一样用的事件发布机制
image
image
所以同样会因为 upgradeJudgement.isUseGrpcFeatures() = false 这样的情况而导致没有监听上,而客户端不知情

是否需要同样将 upgradeJudgement.isUseGrpcFeatures() 提前到监听之前就判断,让客户端知情?

MajorHe1 added a commit to MajorHe1/nacos that referenced this issue Apr 19, 2021
MajorHe1 added a commit to MajorHe1/nacos that referenced this issue Apr 20, 2021
MajorHe1 added a commit to MajorHe1/nacos that referenced this issue Apr 21, 2021
KomachiSion pushed a commit that referenced this issue Apr 22, 2021
…GRPC (#5411)

* [ISSUE #5361] check isUseGrpcFeatures() when subscribe service using GRPC

* [ISSUE #5361] add a GrpcRequestFilter to check isUseGrpcFeatures() when using GRPC protocol

* [ISSUE #5361] add a judgement whether request instance of AbstractNamingRequest

* [ISSUE #5361] reformat code using nacos-code-style-for-idea.xml
@weissxu
Copy link

weissxu commented May 10, 2021

按照该case的描述,nacos集群应该没有启动成功,这种场景下不应该对外提供服务吧?
瞬时和持久的服务创建都应该失败,才比较符合逻辑,我理解的对吗?

@MajorHe1
Copy link
Collaborator Author

按照该case的描述,nacos集群应该没有启动成功,这种场景下不应该对外提供服务吧?
瞬时和持久的服务创建都应该失败,才比较符合逻辑,我理解的对吗?

@weissxu 其实这个问题最关键的地方在于,使用grpc注册服务是失败的,看不到异常,http却能够注册成功。
原因是nacos集群认为自己还没有准备好使用grpc协议,但是对于客户端而言,临时服务默认使用的grpc协议,还看不到异常
所以解决思路就是当集群认为自己还没准备好使用grpc协议的时候,让客户端知情。
如果认为集群没问题,强行要使用grpc协议,按照对话里面的强制关闭双写就好。
不过这毕竟不是最终的解决办法,最终还是要等到2.1版本去掉升级和双写逻辑才行。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/Document Category issues or prs related to document. contribution welcome kind/enhancement Category issues or prs related to enhancement.
Projects
None yet
Development

No branches or pull requests

3 participants