存算分离部署,graphd重启后返回的数据不完整

nebula 版本:3.4.1
部署方式:集群 k8s
安装方式:源码
是否为线上版本:Y
硬件信息
存算分离部署:
Storage和Meta在一个容器,三个机器形成一个集群。
Graphd单独起容器多实例部署

现在遇到的问题是,graphd遇到超大查询崩溃之后会自动重启,但是重启之后重新查询数据会出现问题,返回的数据不完整。。
我再重启storaged和meta之后才会正常返回,这是什么原因呢?

你是用什么工具进行的数据查询?nebula-console 么?还是说是 nebula-studio 之类的可视化工具?

以及,你这个进行查询的过程中,你又变更 schema,或者是写入数据么?

nebula-console和用Java sdk都有这个问题。没有写入数据,查询都是一个schema。比较特殊的是我的部署方式,三个进程是一起部署,但其中3个容器只配置storaged和metad的配置项,只启了storaged和metad;另外3个容器只配置了graphd的配置项,只启动了graphd。

在graphd崩溃重启之后,查询数据出现了不完整的问题,且没有抛错。

能给出重现的最小流程么?

大概流程:混合部署nebula集群,某些机器只启动graphd服务, 某些机器启动storaged和metad服务–> 客户端配置graphd的ip,执行大查询导致graphd崩溃 → 重启graphd,然后执行查询,发现查询结果返回不完整。

不完整的时候 storage 什么状态呢?会不会 graphd OOM,storaged 也被 kill?

确实是有 storage 不全,有 paritial result 的情况

storaged没有崩,我们有配健康检查。

有可能Storaged没崩,但是仍然会影响返回的情况吗

你返回的数据不完整是怎样的?有没有截图(可以脱敏下)

我怀疑可能不是重启后导致的问题,而是之前版本的一个bug(当时是复合语句出的问题,不知道你这里是不是),你可以升级到最新的3.6版本试试。

2 个赞

@MuYi 建议,可以先升级最新排除一下么?


大概是这样,只有一个where过滤条件。存了一个tag和一个edge tag,可以查出tag的值,但是查不出那个edge tag

你这也是一会能查出来,一会查不出来吗?
你这个图里是一个语句还是不一样?

不一样的两个语句,一个是查Node,一个是查edge。Node查出来的数据不完整,Edge是完全查不出来,一直是这个结果。

麻烦也先排除简单的情况哈

  • 索引是什么时候建立的?如果是导入数据之后建立的,需要rebuild

那这个和你标题具体的关系是什么?是否可以描述完整些?

@MuYi 我在上面的回复里写了触发的情况,就是graphd崩了重启之后, 会导致返回的数据不完整。上面的截图贴了我的查询和数据返回,本来应该有返回的查询,没有返回结果。

索引是在一开始就创建的,先有索引后有数据,而且我试了下不加索引也不返回应有的数据

我的问题是,你graphd重启之后,执行多次,每次查询返回都不完整吗?
另外,你可以考虑升级到最新版本试试

是的 每次查询都不完整

确实在版本升级到3.6.0之后没有复现了。

但还是不清楚根因。是3.4.1版本部署在k8s上特有的吗?也没有看到有人问过。graphd重启后,就会导致查询的数据不完整,感觉还挺严重的。