/lotus-1.4.0

Primary LanguageGoOtherNOASSERTION

Filecoin 挖矿软件分布式Miner版本,支持PoSt-miner、Deal-miner、Seal-miner功能分离,实现多Miner的分布式部署。

解决了哪些问题?

  • 单Miner节点负载过高,机器不稳定容易导致时空证明失败掉算力的问题;
  • 解决Miner节点负载过高,出块时由于计算不够快,导致的出块失败问题;
  • 解决Window-PoSt和Winning-PoSt同时进行时,显卡锁定冲突的问题;
  • 解决接单的时候,由于内存占用过高导致Miner异常崩溃,掉算力、出块失败等问题;

功能说明

  • 支持同一个MinerId在多台机器上分布式部署;
  • 支持Window-post-miner、Winning-post-miner、Deal-miner、Seal-miner功能分离:
    • PoSt-miner:负责Window-PoSt和Winning-PoSt,可分开为两台机器,也可由一台机器完成;
      • Window-post-miner:负责扇区窗口证明时的扇区抽查及提交;
      • Winning-post-miner:负责出块时扇区的随机抽查;
    • Deal-miner:负责接单和检索,和订单扇区密封的任务分配;
    • Seal-miner:负责普通扇区密封的任务分配。
  • 调度管理基于自定义的任务数量,可以精确控制机器的工作状态

Image text

实现思路

1. 解决SectorID不重复

利用一台Miner集中分配SectorID,由任意一台Miner的--sctype=alloce参数实现。 并由启用--sclisten=IP:PORT参数的Miner作为分配SectorID的Server,其他Miner设置--sctype=get作为Client,从Server Miner上申请SectorID。

lotus-miner run --sctype=alloce --sclisten=192.168.1.50:1357

2. 解决时空证明由单独的机器完成

由任意一台Miner的--wdpost=true--wnpost=true参数实现时空证明由一台/两台独立的机器完成,其他Miner要设置--wdpost=false--wnpost=false

lotus-miner run --wdpost=true --wnpost=true

3. 解决接单及检索

由任意一台Miner的--p2p=true参数实现,接单的Miner需要配置多地址。

lotus-miner run --p2p=true

参数说明

  • --wdpost [boolean] 是否允许window-PoSt证明,默认true
  • --wnpost [boolean] 是否允许winning-PoSt证明,即出块,默认true
  • --p2p [boolean] 是否允许接单,默认true
  • --sctype [alloce | get] 扇区分配服务类型,alloce表示分配SectorID,get表示获取SectorID;
  • --sclisten [string] 扇区分配服务端监听的地址和端口;

配置举例

现有的单Miner集群要切换到分布式Miner,需要先停掉原有Miner和所有Worker,保证没有进行中的任务。然后将原有单Miner的$LOTUS_STORAGE_PATH目录,复制到其他Miner上,并将$LOTUS_STORAGE_PATH/config.toml文件中[API]部分的ListenAddressRemoteListenAddressIP改为当前所在Miner的内网IP。

比如有3个Miner,由PoSt-miner负责SectorID分配(也可由其他Miner分配)。

1. PoSt-miner

lotus-miner run --wdpost=true --wnpost=true --p2p=false --sctype=alloce --sclisten=192.168.1.50:1357

其中192.168.1.50为PoSt-miner的内网IP,1357为扇区分配服务的监听端口。

如果PoSt-miner为两台机器,则需要分别配置--wdpost--wnpost参数:

Window-post-miner(负责窗口抽查证明)配置为:

lotus-miner run --wdpost=true --wnpost=false --p2p=false

Winning-post-miner(负责出块的证明)配置为:

lotus-miner run --wdpost=false --wnpost=true --p2p=false --sctype=alloce --sclisten=192.168.1.50:1357

注意:负责扇区分配的Miner,首次部署的时候,需要修改$LOTUS_STORAGE_PATH/sectorid文件(首次部署需要创建该文件),将其中的数字改为大于当前所有扇区ID的一个数字。

2. Deal-miner

lotus-miner run --wdpost=false --wnpost=false --p2p=true --sctype=get --sclisten=192.16810.50:1357

其中--sclisten监听的地址和端口为做扇区分配Server Miner的IP和端口。
Deal-miner需要配置外网端口转发和lotus-miner actor set-addrs配置多地址。

注意:Deal-miner也只能配置一台,不然订单检索的时候会路由失败。

3. Seal-miner

lotus-miner run --wdpost=false --wnpost=false --p2p=false --sctype=get --sclisten=192.16810.50:1357

需要注意的几个问题:

  • Seal-miner和Deal-miner的配置参数相同,原理上都是密封扇区的Miner;
  • Seal-miner可根据自己的集群规模,配置多台;

Worker配置

使用分布式Miner以后,需要根据配置的Seal-miner和Deal-miner数量,将Seal-worker分为多个组,和Miner一一对应。

假设现在有1台Deal-miner,2台Seal-miner,5台Seal-worker,因为Deal-miner的接单速度比较慢,可以给Deal-miner分配一台Seal-worker,其他两台Seal-miner各分配2台Seal-worker。