把路由经验整包搬走:lncli querymc、importmc 与 loadmc 的三种搬运法
LND 的 Mission Control 会给每对节点记一本通过率账:从 A 到 B 最近一次成功送过多少钱、最近一次失败卡在多少钱。这本账默认只留在运行实例里慢慢积累,但运维里常有”把经验搬走”的需求——换机器前把攒了几个月的失败记录带走、测试网复现主网的路由行为、多台监听节点共用同一份判断。v0.19.0-beta 的 lncli 提供三条互补的通道:querymc 导出、importmc 单条写入、loadmc 整包灌入。本文全部以 LND v0.19.0-beta 源码为准。
querymc:先把账本原样打出来
lncli querymc 调用 Router 服务的 QueryMissionControl,返回一份 JSON 快照,结构是节点对数组:每对含 node_from、node_to 两个公钥,外加一份 PairData——fail_time(最近失败时间戳)、fail_amt_sat 与 fail_amt_msat(能确认送不过去的最小金额,与金额无关的失败记零)、success_time、success_amt_sat 与 success_amt_msat(最近确认能送过去的最大金额)。这份 JSON 同时是 loadmc 的输入格式,导出—编辑—回灌的工作流就建立在这条对称性上。
importmc:手工钉一条记录
lncli importmc [源节点] [目标节点] [unix秒] [毫秒] 一次只写一对节点的历史,参数顺序固定,四个都必填。默认写入的是成功记录(success 金额必须大于零);带 --failure 旗标则这条变成失败记录,金额含义翻转为”送不过去的最小值”,此时允许为零。它背后的 RPC 是 XImportMissionControl,帮助注释里写着两条重要边界:第一,实验性接口;第二,只有比本地现值更新的结果才会被导入,除非带 --force 强制覆盖。还有一条容易被忽略:导入只发生在内存,节点重启后这批数据不会保留——源码注释明确”will only be imported in-memory, and will not be persisted across restarts”。想把一条经验永久烙进账本,importmc 做不到,它天然是个试验工具。
loadmc:整包灌入并拨时间戳
lncli loadmc --mcdatapath=文件 读取一份 querymc 产出的 JSON 批量导入,同样走 XImportMissionControl,同样不落盘。它多出的关键旗标是 --timeoffset:给快照里每条时间戳统一加一个偏移,格式像 72h3m0.5s 这样。这个设计的用意写在帮助文本里——把旧数据”伪装得更年轻”,钻路径查找内置的信息衰减机制:Mission Control 会随时间推移逐渐恢复对失败边的信心,一个刚重启的节点带着三个月前的账本灌入并前移时间戳,等于告诉路由器”这些边昨天还失败过”。反过来把偏移设成 0s,输出会报告数据里最新的时间戳,正好用来量这份账本到底多旧。--force 允许文件里的旧记录压过本地更新的结果,--skip_confirmation 跳过交互确认。
三条命令的常见误用
第一,把导入当持久化。三条命令没有一条保证重启后账本还在,指望 importmc 改完就一劳永逸的运维,会在第一次例行升级后发现经验清零。第二,混淆 loadmc 与 setmccfg:灌的是”历史记录”,改的是”衰减规则与参数配置”,两本账互不覆盖,调错对象会得出”导入没生效”的错觉。第三,忽视时间戳的单向性:不带 --force 时,只有更新的结果才进得去,拿一份旧快照去灌新节点,大部分记录会被静默丢弃——先 querymc 看本地最新时间戳,再决定 --timeoffset 加多少,是比较稳的顺序。第四,第三方来源的快照直接灌入等于把别人的路由偏见注入自己的付款路径,来源不明的账本先肉眼看一遍失败分布再动手。第五,公钥写错不报错:importmc 只校验十六进制长度,导入一条拼错节点的记录会安静地躺在账本角落,既不生效也难被发现,写完随手 querymc 复核一遍是廉价保险。
风险提示:本文为闪电节点运维机制科普,命令与字段以 LND 当前版本源码为准,可能随版本调整;实验性接口的行为边界不承诺稳定;不构成投资建议。
一个最小工作流
把三条命令串起来看:先在旧节点上 lncli querymc > mc.json 存一份账本;新节点初始化后,用 lncli loadmc --mcdatapath=mc.json --timeoffset=72h 把记录整体前移三天再灌入;若只想临时试一条边,则 lncli importmc 单点写入,重启自动失效,等于自带回滚。整个流程不碰数据库文件、不需要停机,代价是全部效果都随重启蒸发——把它理解成”给路由器做短期记忆移植”而不是”数据迁移”,使用预期就对了。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。