查询数据报错,graph 日志是LEADER_LEASE_FAILED,storage没有任何日志

提问参考模版:

  • nebula 版本:v3.1.0
  • 部署方式:分布式
  • 安装方式:源码编译
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘 5TSSD
    • CPU 64核、内存信息512G
  • 问题的具体描述
    每次ingest完数据,查询的时候都会抱错,ingest数据量大概在100G到几百G左右
    只有graph有报错信息,查看rocksdb的LOG会出现对应的Stalling write
    meta和 storage都没有错误日志

graph日志如下:

0230107 10:06:27.521723 227377 QueryInstance.cpp:137] Storage Error: part: 148, error: E_RPC_FAILURE(-3).
E20230107 15:58:33.065451 227379 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 133
E20230107 15:58:33.065511 227379 StorageAccessExecutor.h:155] Storage Error: part: 133, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 15:58:33.065533 227379 QueryInstance.cpp:137] Storage Error: part: 133, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 15:58:33.887745 227380 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 63
E20230107 15:58:33.887795 227380 StorageAccessExecutor.h:155] Storage Error: part: 63, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 15:58:33.887814 227376 QueryInstance.cpp:137] Storage Error: part: 63, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.067999 227375 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 108
E20230107 20:12:40.068053 227375 StorageAccessExecutor.h:155] Storage Error: part: 108, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.068073 227379 QueryInstance.cpp:137] Storage Error: part: 108, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.236263 227375 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 168
E20230107 20:12:40.236303 227375 StorageAccessExecutor.h:155] Storage Error: part: 168, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.236340 227377 QueryInstance.cpp:137] Storage Error: part: 168, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.246220 227383 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 175
E20230107 20:12:40.246264 227383 StorageAccessExecutor.h:155] Storage Error: part: 175, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.246285 227383 QueryInstance.cpp:137] Storage Error: part: 175, error: E_LEADER_LEASE_FAILED(-3531).
E20230107 20:12:40.250849 227383 StorageAccessExecutor.h:57] GetVerticesExecutor failed, error E_LEADER_LEASE_FAILED, part 175
E20230107 20:12:40.250869 227383 StorageAccessExecutor.h:155] Storage Error: part: 175, error: E_LEADER_LEASE_FAILED(-3531).

ingest数据指的是什么?可以说一下前后具体操作吗?

大概知道原因了,我这边尝试复现下,感觉像一个bug

meta storage 有时候也会将非致命信息打成 INFO,所以也可以贴下。
另外,你说的大概知道原因是指知道怎么复现了吗?

ingest 或者触发了rocksdb 的write stop write stall的时候,leader的心跳信息write rocksdb会被阻塞,leader的租期续期会失败。这时候有查询进来就会失败

但是心跳follower还是一直能收到,所以就会出现不会选主,但是leader租期一直过期的问题,只有ingest结束|| write stall 或者wirte stop 结束,续租还会成功,这个是符合设计预期的吗?

但是心跳follower还是一直能收到,所以就会出现不会选主,但是leader租期一直过期的问题,只有ingest结束|| write stall 或者wirte stop 结束,续租还会成功,这个是符合设计预期的吗?

这个描述有点前后矛盾,没太看懂。心跳能收到,也不会导致租期过期,follower也不会发起选举。
现在是有两种心跳:一种会经过rocksdb写入的日志心跳,的确会因为write stall导致切主,另外一种心跳是不会落盘的,就是为了防止rocksdb阻塞。

2 个赞

可以调下跟L0相关的那几个参数,降低下ingest影响

write stall是因为影响心跳写入导致切主吗?还是影响follower的心跳接受处理?

现在确实有问题:

  1. write stall 会阻止 apply
  2. 如果该 leader 没有 commit 过(现在是 commit 同步 apply),就会导致读取阻塞。因为 leader read 需要确认 lease valid
  3. 但不会引起切主,有一个额外的不需要写 rocksdb 的心跳。
1 个赞