Lotus Miner和分布式设置

 

通常为了让Miner更专注于挖矿,我们可以从系统结构上让它尽量优化,把它和节点机以及封装机分开在不同的机器上启动。

1. 首先是节点和Miner分开

启动节点机器后,创建一个可供Miner使用的token
jacky@jz-test lotus % ./lotus auth create-token --perm admin
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0._-MLwECHxqS30T5TRgWSfAV674rtn9GsTS28mpcU2BI
在Miner机器的环境变量上添加API变量,其中api_token为上面的输出,后面部分为节点机的ListenAddress,也可以在~/.lotus/api中看到
export FULLNODE_API_INFO=<api_token>:/ip4/<lotus_daemon_ip>/tcp/<lotus_daemon_port>/http
这样,就可以依照正常的Miner启动步骤启动挖矿程序了。

2. 将封装节点(lotus-worker)和Miner分开

为了进一步让Miner轻松点爆多些块,我们把封装工作也从它身上剥离开来,让单独的机器专门从事扇区封装的工作。 同样的,要让lotus-worker帮Miner干活,在启动Miner后,我们也要创建一个token给封装节点用。
jacky@jz-test lotus %./lotus-miner auth api-info --perm admin
MINER_API_INFO=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.yuwjWUWvlVBL-iVrB3N4fyoJmm0n_l1T2Els6Zw8kU0:/ip4/192.168.10.3/tcp/2345/http
同时,把Miner配置文件~/.lotus-miner/config.toml里的各种任务都关上
[Storage]
  AllowAddPiece = false
  AllowPreCommit1 = false
  AllowPreCommit2 = false
  AllowCommit = false
  AllowUnseal = false
在封装机中,设置环境变量。【重要】将上面的MINER_API_INFO放进去!
export TMPDIR=/fast/disk/folder3                    # used when sealing
export MINER_API_INFO:<TOKEN>:/ip4/<miner_api_address>/tcp/<port>/http
export BELLMAN_CPU_UTILIZATION=0      #设置为0表示在PC2或Commit不使用CPU
export FIL_PROOFS_MAXIMIZE_CACHING=1
export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 # 使用GPU
export FIL_PROOFS_USE_GPU_TREE_BUILDER=1   # 使用GPU
export FIL_PROOFS_PARAMETER_CACHE=/fast/disk/folder # > 100GiB!
export FIL_PROOFS_PARENT_CACHE=/fast/disk/folder2   # > 50GiB!

export FIL_PROOFS_USE_MULTICORE_SDR=1 #PC1使用多核计算
在后台启动lotus-worker程序
nohup lotus-worker run >> worker-start.log 2>&1 &
同样我们可以在其它封装机做相同的设置, 启动lotus-worker时,可以通过参数控制它要负责的封装步骤
#所有参数的默认值都是true
   --addpiece                    生成扇区数据
   --precommit1                  PC1 (32G 扇区会使用128GiB内存)
   --unseal                      解封扇区 (32G 扇区会使用128GiB内存)
   --precommit2                  PC2 (32G 扇区会使用96GiB内存)
   --commit                      Commit(32G 扇区会使用196GiB内存)
用lotus-miner命令可以看到各worker的情况
jacky@jz-test lotus% lotus-miner sealing workers
Worker 02560853-b4dd-4f00-939f-2fe7e06f0ed7, host test-01
	CPU:  [||||||||||||||||||||||||||||||||||||||||||||||||||||||          ] 54/64 core(s) in use
	RAM:  [||||||||||||||||||                                              ] 29% 588.7 GiB/1.957 TiB
	VMEM: [||||||||||||||||||||                                            ] 33% 668.7 GiB/1.957 TiB
	GPU: GeForce RTX 2080 Ti, used
Worker 05401163-2253-4390-9d0a-5b6e8c408c17, host test-02
	CPU:  [                                                                ] 0/128 core(s) in use
	RAM:  [                                                                ] 0% 6.929 GiB/755.4 GiB
	VMEM: [                                                                ] 0% 6.929 GiB/763.4 GiB
	GPU: GeForce RTX 3090, not used
Worker 07e78f0b-45e3-4f3e-b814-6eda1dde8ce9, host jz-test
	CPU:  [                                                                ] 0/128 core(s) in use
	RAM:  [                                                                ] 1% 5.864 GiB/503.8 GiB
	VMEM: [                                                                ] 1% 5.864 GiB/503.8 GiB
	GPU: GeForce RTX 2080 Ti, not used
	GPU: GeForce RTX 2080 Ti, not used
Worker 30f6a875-b250-4546-86b4-e91bba0b0760, host test-03
	CPU:  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||      ] 117/128 core(s) in use
	RAM:  [||                                                              ] 4% 36.73 GiB/755.8 GiB
	VMEM: [|||||                                                           ] 8% 156.7 GiB/1.738 TiB
	GPU: GeForce RTX 3090, used
这样,一个分布式挖矿环境就完成了。 ~_~