# Lotus 时空/爆块证明 Worker 集群配置

提示:

本文档仅适用于原语云 lotus-v1.14.1 以及以上的版本。

原语云的多 Miner 方案在 v1.14.1 版本之后在架构上做了比较大的调整。具体变通大致如下:

  1. 移除了时空证明 Miner 和 爆块证明 Miner 角色。目前只有一个主 Miner,负责所有的任务的调度工作(封装,时空证明,爆块证明),同时引入了证明 Worker 的角色,证明 Worker 负责做证明计算(包括时空证明和爆块证明),在程序运行过程中我们可以随时关闭某个 Worker 的时空证明计算/爆块证明计算功能。

  2. 根据你集群的大小,证明 Worker 可以横向扩展,对于那些超大集群,每个 Deadline 都包含多个甚至数十个 Partition,调度程序会根据你的设置,自动拆分 Partition,分配给不同的证明 Worker 去计算,主 Miner 会将各个证明 Worker 计算的结果合并提交上链。

  3. 由于调度任务均由主 Miner 完成,所以相关的调度日志也输出到主 Miner 的日志中了,之前是分开输出的,时空证明的日志是由 window miner 输出的,爆块证明日志由 winning miner 输出的,这一点请大家注意。

通常我们把负责调度的 Miner 称之为主 Miner(Root Miner),这个 Miner 会维持一个 SectorIndex 对象, 其他 Miner 通过 JSON-RPC 调用主 Miner 的接口去获取扇区的相关信息。

虽然看起来多了不少配置,但是新版的多 Miner 方案实施起来比旧版的还要简单了不少。

默认主 Miner 上的 爆块证明计算时空证明计算 功能都是打开的,也就是说主 Miner 会启动一个本地证明 Worker 承担时空证明和爆块证明计算任务,不过对于算力超过 1 PiB 的节点,我们还是推荐另外单独启动一个证明 Worker 来专门做时空证明/爆块证明计算,这样稳定一些。 每次需要进行时空证明或者爆块证明计算的时候,调度 Miner(主 Miner) 会随机选择一个可用的证明 Worker 去执行证明计算任务。

如果你临时想启用多 Miner 方案,已经不需要再重启主 Miner 了,只需要添加一台或者多台证明 Worker 即可。

# 1. 爆块证明 Worker 集群

  1. 双击桌面的 应用中心 图标,进入应用中心主界面.

  2. 点击 lotus-wining-worker 应用图标下的 添加 按钮.

  3. 添加完成之后桌面上会多出一个 lotus-wining-worker 应用图标(如果没有请刷新页面).

添加完成之后需要 lotus-wining-worker 的运行环境进行简单的配置:

  1. 把扇区存储 API 方式设置为 remoteIndex(远程模式)

  2. 配置完成之后安装 lotus-winning-worker 应用,这里需要注意的是,证明 Worker 的软件源是 lotus-miner 程序,而不是 lotus-worker。

  3. 将 Miner 上挂载的存储设备同时挂载到 winning-worker 节点,这是最关键的步骤,winning-worker 存储环境必须跟主 Miner 保持一致,因为 winning-worker 是共享主 Miner 的扇区存储信息,比如某一次爆块抽查的 100 号扇区,主 Miner 这边返回 100 号扇区是在 /data01/sealed/s-txxxx-100,那么意味着在 winning-worker 机器上读取这个路径必须能真实读到 100 号扇区的数据,否则 WinningPoSt 肯定计算失败。

    # 通过 NFS 把主 Miner 挂载的存储设备在 winning-worker 上也挂载一份,
    # (如果主 Miner 没有挂载的话,那么这一步就不需要) 例如:
    mount -t nfs 192.168.1.100:/data01 /data01
    mount -t nfs 192.168.1.101:/data02 /data02
    mount -t nfs 192.168.1.103:/data03 /data03
    
  4. 启动 lotus-winning-worker,如果你使用的是 CUDA 版本的 lotus-miner 程序直接通过原语云控制台页面直接点启动按钮就 OK 了。如果使用的是 OpenCL 版本的 lotus-miner 程序,您需要手动启动。

    nohup yy_lotus-winning-worker run \
    --storage-api=remoteIndex \
    --winning-post=false \
    --winning-worker=true \
    --window-post=false \
    --window-worker=false \
    --sealing-mgr=false \
    --sector-store=true \
    --deals-mgr=false >> /yuanyu/lotus-winning-worker/log/error.log 2>&1 &
    

    注意:

    如果其中启动失败,打印类似的日志:

    Register prover worker failed: connecting remote storage failed: RPC client error: 
    sendRequest failed: Post "http://192.168.xx.xx:2346/rpc/v0": dial tcp 192.168.20.55:2346: i/o timeout
    

    这是因为现在证明 Worker 和主 Miner 之间要相互连接,所以你只需要开放对应的端口即可:

    sudo ufw allow 2346/tcp
    
  5. 通常情况下,只要进程能够启动成功,没有报错,则说明 lotus-winning-worker 已经正确部署了,但是为了确保真的正常工作了,我们可以通过下面的命令列出所有的证明 Worker,看看刚才我们启动的 lotus-winning-worker 是否在列表中。

    yy_lotus-miner proving workers
    # 或者你可直接通过当前节点的 IP 或者 hostname 过滤
    yy_lotus-miner proving workers |grep '192.xxx.xxx.xxx'
    
  6. 确认爆块时间是否正常,每一个 winning-worker 连接上主 Miner 之后,都会做一次热身的爆块证明,你只需在主 Miner 的日志中直接查找 winning PoSt warmup 日志,日志会显示爆块的时间,以及对应证明 Worker 的主机名称和IP地址:

    grep "winning PoSt warmup" /yuanyu/lotus-miner/log/error.log 
    # 如果成功会有类似下面输出
    winning PoSt warmup successful {"worker": "winning-worker-yyyun-1700k", "address": "192.168.2.202:2346", "took": 1.37271456}
    

    爆块的时间在 5 秒以内都算是正常的,如果大于这个值,则建议重启 winning-worker 试试,如果如果重启多次还是出现爆块时间偏长,建议检查您的 GPU 驱动以及存储读写是否正常。 详细的检查流程请参考文档 爆块证明异常排查

# 2. 时空证明 Worker 集群

  1. 双击桌面的 应用中心 图标,进入应用中心主界面.

  2. 点击 lotus-window-worker 应用图标下的 添加 按钮.

  3. 添加完成之后桌面上会多出一个 lotus-window-worker 应用图标(如果没有请刷新页面).

添加完成之后需要 lotus-window-worker 的运行环境进行简单的配置:

  1. 把扇区存储 API 方式设置为 remoteIndex(远程模式)

  2. 配置完成之后安装 lotus-window-worker 应用

  3. 将 Miner 上挂载的存储设备同时挂载到 window-worker 节点,这是最关键的步骤,winning-worker 存储环境必须跟主 Miner 保持一致,因为 window-worker 是共享主 Miner 的扇区存储信息,比如某一次时空证明抽查到 100 号扇区,主 Miner 这边返回 100 号扇区是在 /data01/sealed/s-txxxx-100,那么意味着在 window-worker 机器上读取这个路径必须能真实读到 100 号扇区的数据,否则 WindowPoSt 肯定计算失败。

    # 通过 NFS 把主 Miner 挂载的存储设备在 winning-worker 上也挂载一份,
    # (如果主 Miner 没有挂载的话,那么这一步就不需要) 例如:
    mount -t nfs 192.168.1.100:/data01 /data01
    mount -t nfs 192.168.1.101:/data02 /data02
    mount -t nfs 192.168.1.103:/data03 /data03
    
  4. 启动 lotus-window-worker,直接通过原语云控制台页面直接点启动。

    注意:

    如果其中启动失败,打印类似的日志:

    Register prover worker failed: connecting remote storage failed: RPC client error: 
    sendRequest failed: Post "http://192.168.xx.xx:2346/rpc/v0": dial tcp 192.168.20.55:2346: i/o timeout
    

    这是因为现在证明 Worker 和主 Miner 之间要相互连接,所以你只需要开放对应的端口即可:

    sudo ufw allow 2346/tcp
    
  5. 通常情况下,只要进程能够启动成功,没有报错,则说明 lotus-window-worker 已经正确部署了,但是为了确保真的正常工作了,我们可以通过下面的命令列出所有的证明 Worker,看看刚才我们启动的 lotus-window-worker 是否在列表中。

    yy_lotus-miner proving workers
    # 或者你可直接通过当前节点的 IP 或者 hostname 过滤
    yy_lotus-miner proving workers |grep '192.xxx.xxx.xxx'
    

    如果你想要了解更多时空证明集群异常排查步骤,请参考文档 时空证明异常排查

# 3. 集群运维 {#cluster-opt-cmds}

  1. 查看证明 worker 列表

    yy_lotus-miner proving worker list
    
  2. 查看当前正在运行的时空/爆块证明任务列表

    yy_lotus-miner proving jobs
    
  3. 设置证明 Worker

    yy_lotus-miner proving worker set --wid=<Worker-ID> --key=<key> --val=<value>
    # 关闭某个证明 Worker 的时空证明计算功能
    yy_lotus-miner proving worker set --wid=<Worker-ID> --key=WindowWorker --val=false
    # 启用某个证明 Worker 的爆块证明计算功能
    yy_lotus-miner proving worker set --wid=<Worker-ID> --key=WinningWorker --val=true
    # 设置某个证明 Worker 在进行时空证明计算的时候,一次最多计算 3 个 partition
    yy_lotus-miner proving worker set --wid=<Worker-ID> --key=BatchPartitions --val=3
    
  4. 手动触发时空证明

    yy_lotus-miner proving challenge --really-do-it=true <DeadlineIndex>
    # e.g
    yy_lotus-miner proving challenge --really-do-it=true 0
    

    你还可以传入 <Parttion> 参数来做<DeadlineIndex> 指定某些 Partition 的扇区时空证明(多个 Partition 使用英文逗号隔开):

    yy_lotus-miner proving challenge --really-do-it=true --partitions=<Partition> <DeadlineIndex>
    

    更多相关详细文档,请移步 手动触发时空证明

上次更新: 2022/4/21 11:40:15