多台机器组成的集群创建快照不完整

三台机器组成的集群(源码版本1.0,每台机器metad、graphd、storaged各一个)执行 CREATE SNAPSHOT ,只有一台机器上能生成快照。问题稳定复现



show hosts正常吗?

或者用SHOW PARTS;验证一下集群环境是否正确。

集群正常运行

只有一个storage节点有创建snapshot的日志信息?其他两个没有日志信息,没有创建snapshot是吗?

你好,两次snapshot,一次成功了3个,另一次成功了1个?两次创建时的环境有什么差异吗?能说一下复现步骤吗?

158.101是meta的master吧,meta只做master的snapshot

是的,只有一台机器的storage里有snapshot日志

开始集群只有一台机器,创建一次快照成功了;之后往集群添加了2台机器(每台机器部署storage、graph各一个),创建快照不完整,只有一台机器上有。
忽略上面复杂步骤,重新写一下问题的完整复现步骤:

  1. 申请三台机器部署一个nebula集群,每台机器上部署graphd、storaged、metad各一个
  2. 创建NBA图谱的schema,插入样例数据
  3. 执行create snapshot,console返回成功
  4. show snapshots查看快照,显示存在快照
  5. 到各机器的data/storage/nebula/174目录下发现仅有一台机器有checkpoint文件夹
  6. 到各机器storage log里搜索checkpoint关键字, 发现只有一台机器有checkpoint执行log

嗯,meta快照生成没问题

感谢,这个问题已经fix了,PR已经提交,待merge到master后我会及时通知您。

1 个赞

我看了下PR,有个疑问,如果搭建的图数据库集群有3台机器,3个space,定义如下
CREATE SPACE A(partition_num=10, replica_factor=1);
CREATE SPACE B(partition_num=10, replica_factor=3);
CREATE SPACE C(partition_num=1, replica_factor=1);
那么生成快照情况是怎样的呢?
对于B,会在每个副本下都生成快照吗?
对于C,生成快照的命令只会发到唯一的数据所在机器不?

@jude-zhu 帮忙确定下这个fix会在哪个release (e.g. 1.1.0 or 1.0.3)发

fix已经合并到master了。

你好 @dengchang , 已经修复并合并到master了。感谢你的report.

1.0.2 :grinning: :grinning:

对于B,每个副本下都会生成快照,为了避免单点故障。
对于C,只会在集群中的某一个storageNode中生成快照,因为单副本的space只可能存在于某一个storageNode中。另外,如果集群中有多个storageNode,但是创建space的时候为(partition_num=1, replica_factor=1)的话,可能会存在其他的问题,我来进一步验证一下。

我试了一下,对于C这种情况,目前的实现还是有些问题。
生成快照的逻辑是否可以这样调整:
遍历集群中的每个space,对于遍历到的space,获取该space对应的storage节点,然后对每个storage节点发送生成快照命令,类似MetaHttpDownloadHandler::dispatchSSTFiles实现

有区别,SST不需要考虑副本