k8s部署后pod重启后,metad和storaged一直失败重启

  • nebula 版本:2.0.0

  • 部署方式:k8s,使用operator部署,但是没有使用helm,我把它解析成部署清单进行部署

  • 是否为线上版本:Y

  • 问题的具体描述:k8s部署后pod重启后,metad和storaged一直失败重启,这种情况常出现在k8s重启,docker重启,或者pod重启

  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)

# kubectl logs -f nebula-storaged-0
++ hostname
+ exec /usr/local/nebula/bin/nebula-storaged --flagfile=/usr/local/nebula/etc/nebula-storaged.conf --daemonize=false --local_ip=nebula-storaged-0.nebula-storaged.default.svc.cluster.local
cat nebula-storaged.INFO  
Log file created at: 2021/09/01 13:25:31
Running on machine: nebula-storaged-0
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
E0901 13:25:31.870828     1 GflagsManager.cpp:70] Load gflags json failed
F0901 13:25:32.205046     1 RocksEngine.cpp:116] Check failed: status.ok() IO error: While lock file: data/storage/nebula/1/data/LOCK: Resource temporarily unavailable
# cat nebula-metad.INFO
Log file created at: 2021/08/25 13:53:47
Running on machine: nebula-metad-0
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
E0825 13:53:47.871156     1 FileUtils.cpp:384] Failed to read the directory "data/meta/nebula" (2): No such file or directory
E0831 16:50:32.589563   112 CreateTagIndexProcessor.cpp:42] Create Tag Index Failed: item_index_0 has existed
E0831 16:50:32.754053   112 CreateTagIndexProcessor.cpp:42] Create Tag Index Failed: item_index_1 has existed
E0831 16:50:32.925880   112 CreateEdgeIndexProcessor.cpp:42] Create Edge Index Failed: chain_index_0 has existed

你好,请问你的nebula-operator用的是哪个版本,在storaged失败前做过哪些操作?,能截一下storaged pod crash的原因吗,比如用kubectl describe命令

我之前解决方式就是删除pvc,然后删除nebula重新创建,但是这样数据就没了

我之前解决方式就是删除pvc,然后删除nebula重新创建,但是这样数据就没了

我重新看了下,我使用的是helm进行安装,版本是v2.0.0。不过就如标题所说,我将charts解析后为几个部署清单yaml,失败操作就是docker重启或者主机重启,但是我测试手动delete pod让其重新创建就不会,kubectl describe storaged信息如上,它一直就只有那个信息

在目前失败的情况下,再手动delete一次pod,storaged会恢复吗,如果能恢复,目前最新版本的operator支持配置删除pod但不清理pvc,可以暂时解决这个问题

现在我测试的情况是无法恢复,你说的目前最新版本的operator支持配置删除pod但不清理pvc,这个和我手动删除pod一样啊,只有删除pvc,让其重启创建,才能正常。我觉得有没有可能是因为pvc中缓存的ip历史记录,就像nacos就会出现这种情况,只需要去pvc删除对应缓存文件夹,就可以正常使用,请问你们现在生产使用的是那种部署方式,版本多少

# cat nebula-storaged.INFO
Log file created at: 2021/09/01 14:11:39
Running on machine: nebula-storaged-0
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
E0901 14:11:39.472993     1 GflagsManager.cpp:70] Load gflags json failed
E0901 14:11:42.269022    63 FileBasedWal.cpp:440] LogId is not consistent0 30221
E0901 14:11:42.277607    65 FileBasedWal.cpp:440] LogId is not consistent0 30219

nebula-operator会考虑推出对应nebula 2.5.0的稳定版本,目前没有特定版本发布,可以支持到2.0.1

我并没有使用nebula-operator,而是:https://nebula-graph.com.cn/posts/how-to-deploy-nebula-graph-in-kubernetes/,又将charts解析后为几个部署清单yaml

现在我只能去将数据备份还原,我有几个集群环境,我发现有个集群的nebula可以直接将其他环境的metad和storaged复制到其pvc,重启就能还原,但是这个好像只能针对于正常的nebula的数据,而对于storaged一直失败重启的坏的nebula集群的数据,依旧还原不成功,storaged依旧一直失败重启

下面这个是storaged的stderr.log日志

# cat stderr.log
E0902 09:20:20.730405     1 GflagsManager.cpp:70] Load gflags json failed

有人知道怎么去纠正坏的 metad或者storaged 的数据,让其正常启动,或者数据目录的结构和逻辑

你的目的是要测试helm部署还是k8s下的数据备份恢复?

k8s

控制pv回收策略,启动新集群挂载之前老集群的PV,这种方式可供参考。BR工具在k8s环境下目前支持不是太友好,还在完善中。

pvc这边没问题,主要是当storaged一直失败重启后,重新创建挂载依旧,服务不能正常工作。如果是正常时,删掉服务,重新挂载旧pvc没问题,现在主要就是异常的恢复,备份我这边只能考虑备份pvc

感觉解决不了啊,哈哈

k8s平台只能提供如何管理,对于异常下的恢复,要具体分析是什么原因导致storaged启动失败,比方说前面提到的坏的metad或者storaged的数据,是怎样产生的。

试图分析过,但是没成功。不过已经解决了,重新创建,然后根据我们业务产生的相关持久数据,来进行恢复

不过不具有参考性,因为这个相关持久数据是我们业务的,所以我觉得k8s的nebula支持很不好

感谢你的反馈,我们会针对异常恢复数据场景进行优化。

1 个赞

浙ICP备20010487号