- nebula 版本:3.0.0
- 部署方式:分布式
- 安装方式:RPM
- 是否为线上版本:Y
- 硬件信息
- 磁盘( 推荐使用 SSD)
- CPU、内存信息
问题的具体描述:
我们的 Nebula 集群共三台机器节点,每个节点上分别部署一个 metad、storaged、graphd 服务。
最近我们在对我们的服务进行故障演练,需要模拟一台机器宕机的场景。我们手工停止 metad 或 graphd 服务,发现在 console 中都还可以正常对图数据进行查询。但是当我们停掉一个 storage 服务后,查询就会报 Storage Error 这样的错:
(root@nebula) [xxj_20221201_002]> MATCH (v1:PRESS)-[e1:PRESS_BOOK]->(v2:BOOK) WHERE id(v1) IN ['30'] RETURN v2;
[ERROR (-1005)]: Storage Error: part: 6, error: E_RPC_FAILURE(-3).
Thu, 08 Dec 2022 19:11:18 CST
(root@nebula) [xxj_20221201_002]> MATCH (v1:PRESS)-[e1:PRESS_BOOK]->(v2:BOOK) WHERE id(v1) IN ['30'] RETURN v2;
[ERROR (-1005)]: Storage Error: Not the leader of 5. Please retry later.
Thu, 08 Dec 2022 19:11:21 CST
此时用 show hosts
查看节点,发现宕机的节点状态仍然是 ONLINE,大约过 30s 左右的时间,才变成 OFFLINE,Leader count 也正确分配到其他节点上。此时就可以正常查询了。
我的问题是,从宕机到自动恢复中间的 30s 是否可以调整?没有找到这方面的配置。或者是否可以在客户端做到无缝的 failover?目前测试 Java SDK 和 nebula console 都会报错。
我们的服务需要保障高可用,30s 的等待时间有点久了,不知道可有比较好的解决方案?