Dgraph跨机器迁移后Liveload报Uid超出lease错误及方案咨询
Dgraph跨机器导入关联数据问题解答
首先,你的整体方案思路是可行的,但当前因为缺失zw目录导致报错,所以现在的执行方式不可行。
为什么会出现cannot be greater than lease错误?
Dgraph的bulk loader在导入数据时,会一次性分配大量UID(比如你RDF里的0x15f91、0x70271b这些值远大于默认的lease上限10000),并把UID lease的状态信息存在zw目录里。当你只复制out/p目录到新机器启动alpha时,新节点会从默认的UID lease起始值(10000)开始初始化,此时你要导入的RDF里的UID已经远超这个上限,就会触发系统的安全校验错误,阻止你使用未被节点“认可”的UID。
复制zw目录能不能解决问题?
完全可以!zw目录是Dgraph用来管理UID分配 lease 的核心目录,它记录了当前集群已经分配出去的UID范围上限。把bulk loader生成的out目录下的所有子目录(包括p和zw)完整复制到新机器的alpha数据目录后:
- 启动alpha节点时,它会读取
zw里的lease状态,知道已经分配过的UID范围; - 此时再用liveloader导入包含已有UID的关联RDF,节点会识别这些UID是合法的已分配值,不会再触发lease超限的错误。
额外注意事项
- 确保新机器上的Dgraph版本和生成
out目录的机器版本完全一致,避免版本不兼容导致的数据读取问题; - 复制目录后,要检查数据目录的权限,保证Dgraph进程拥有读写这些目录的权限;
- 执行liveloader时,不需要额外调整UID相关参数,节点会自动读取
zw里的状态来处理已有UID的 mutation。
内容的提问来源于stack exchange,提问作者Aishwat Singh
相关产品推荐
相关产品推荐

