-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
A instance cannot be list by openapi if ClientRegisterServiceEvent miss #12930
Comments
综上所述,你所描述的情况确实可能在某个中间时刻发生,但是这是AP协议所允许和预期内的, 服务发现本身比较适合AP场景,在状态正常的情况下,能保证实时性、可用性和一致性,在出现故障时(如网络故障)会出现一定程度的不一致性,但最终在恢复后能够保持一致。 |
我前面提出的是微观和局部的问题,我把整个问题描述一遍。 |
综上所述, distro协议AP会保证在故障恢复后的数据一致性, 但是如果节点一直处于故障状态,会存在一定程度的数据分区以保证服务的可用性;先对而言zk等CP协议会让故障节点直接报错,保证数据一致但牺牲可用性,具体可以查询CAP协议相关资料。 然后根据信息反馈,可以确定,server节点之间必然存在一定故障,可能是cluster.conf的配置存在错误,也可能是节点间的网络故障,也可能是某一个server node本身存在故障,但是具体是哪种,需要您自行排查。 |
1、超时问题:针对这个问题我上面提到我有去排除节点主机资源和网络资源问题,通过我自己的tcp长连接心跳服务可以证明,节点主机资源和网络环境都没有问题,那么只有可能是nacos节点内部的问题,我也看过jvm gc,是正常的,节点进程的线程池根据cpu核心算的,也是够大的(超过100个线程),而每分钟的集群总的请求量是2000,三个节点每分钟平均处理700个心跳事件,不应该线程并发能力不够。到这里我没有什么头绪查到超时的具体原因是什么了。 |
|
具体的情况还是得根据部署的环境和环境的具体内容来排查,至少目前最新版本里,Distro协议的数据同步机制没有发现什么太大的问题。可以考虑升级最新版本运行一段时间试试。 |
1、超时问题:我这里超时指的就是nacos服务端节点的MemberReportRequest超时,不是客户端超时。因为服务端member心跳超时导致了healthy server list changed,也就导致了问题2概率性发生。因此这里核心问题还是为啥服务端发送MemberReportRequest心跳的时候会超时。问题2反而不是那么重要了,因为问题1只要足够稳定,问题2发生的概率就很低。但是现在问题1经常发生,grpc 3秒心跳超时,这个并不是一个很重的操作,不知道为啥就频繁超时。服务端版本2.2.3。 |
目前发现一个环境上的问题点,就是微服务程序(nacos1.2.x客户端)是在k8s内部的,nacos集群(2.2.x)是在k8s的外部服务器的,那微服务的udp端口都是无法收到nacos服务端的push数据的,因为微服务是用k8s内部ip和端口注册的,外部nacos无法访问k8s内部微服务的ip和端口。 |
超时问题一样,server间通信本质也是client和server之间的request和response。只是走了不同的端口和worker线程池。 |
1.x的udp推送只是增加时效性的手段,不是强制依赖,1.x的订阅主要方式是轮询查询,默认每10s会对订阅的服务进行一次查询请求,并和缓存中的数据做对比,存在变化则会回调listener。 如果你现在在排查的问题是server间的数据不一致,可能和这个没有关系,但是不能完全排除, 可以查看naming-server的日志, 看下这个不一致的ip,是不是经常在变化。 |
嗯,实际表现确实1.x的udp推送机制哪怕有问题,也不会影响服务订阅,这个应该不是导致服务端之间grpc超时的原因。我现在排查的核心问题就是为什么服务端成员之间一个3秒超时的grpc(MemberReportRequest),会经常报超时。等我找到更多信息,再来反馈,谢谢。 |
Ok
Em qui., 2 de jan. de 2025, 00:53, 杨翊 SionYang ***@***.***>
escreveu:
… Closed #12930 <#12930> as not
planned.
—
Reply to this email directly, view it on GitHub
<#12930 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/A4MT7RHAO2B624ZUXIFKWHL2ISZ3BAVCNFSM6AAAAABTENWFQGVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJVG44TKMZVGEZDKNQ>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Describe the bug
In my Nacos cluster, I found a instance in a service can not be list by openapi from one nacos node. I found a defect in the source code
If the node miss the ClientRegisterServiceEvent because of the network fault temporary, then publisherIndexes will not put the clientid in it, so the instance list api cannot list this client never again.
在网络抖动的情况下,节点可能会丢失客户端信息,后续如果又错过了客户端注册事件,那么publisherIndexes里面将不在有该客户端信息,而service和instance的查询服务都是从publisherIndexes Map里面获取实例信息,就会导致该节点无法查询到该实例。
The text was updated successfully, but these errors were encountered: