Skip to main content

耕种集群

农民集群是为较大规模的家民设计的,以有效地应对扩展方面的挑战。 它由四个主要部分组成,通过一个NATS服务器相互联系。

集群提供强大的远程计算功能。 例如,如果某台计算机适合耕种,而不是绘图, 您可以在该机器上运行耕种组件同时使用一个或多个远程机器绘图。 这确保了多个农场的连续绘图和重新绘图,在所有扇区完全绘制和重新绘图之前使绘图机的使用达到最优。

关于网络的考量

集群使用模块化架构来运营一个农场, 每个组件可以独立运行,可以通过运行多个组件的实例来扩展,以增加可扩展性和冗余性。 因此,必须确保有足够的局域网带宽,以便于在你网络中这些组件间数据的高效传输。

网络要求

对这样的流量来说,1 Gbit 网络很可能不够,特别是当使用 GPU 绘图或多个绘图服务器时。 在这种情况下,2.5 Gbit网络是满足需求的最低标准,对于更大的集群,应升级到 10 Gbit或更高。

带宽优化建议

您可以通过在同一机器上运行NATS、Controller、Cache和Plotter组件来减少局域网带宽使用量。 此设置允许大多数数据传输在本地环回接口上进行。

主要优势

  • 远程计算能力
    多个PC可以贡献他们的 CPU 和 GPU 资源用于绘图和重新绘图,而无需本地存储数据块。

  • 冗余
    每个进程在多台计算机运行增加冗余和系统稳定性。

  • 带宽效率
    Piece cache 的集中存储有助于节约局域网带宽。

  • 额外空间
    与独立运行农民相比较, 将piece cache 同步缓存重新安置到一个中心位置,可使耕作容量增加 1% 。

NATS

集群的核心是一个第三方软件,叫做 NATS,用于农场组件之间的通信。

The simplest way to install and run NATS is via Docker.

Set Up and Configure NATS
  1. 创建并保存 nats.config 配置文件,内容如下:
nats.conf
max_payload = 2MB
  1. 使用Docker启动NATS:
docker run \
--name nats \
--restart unless-stopped \
--publish 4222:4222 \
--volume /path/to/nats.config:/nats.config:ro \
nats -c /nats.config

组件配置

配置集群类似于配置独立运行的农民节点, 但每个组件必须根据您想要创建的集群设置进行配置。 请记住,所有组件通过您先前配置的NATS服务器相互通信。 下面是建立正常运行的集群所需的基本参数。

Controller (Manages node communication and orchestrates other components.)

启动的第一个组件是控制器。它连接到单个节点,您必须指定节点在网络上的位置。

Proper Port Forwarding

要让你的集群能够连接,打开默认端口30533并将其转发到控制器。 如果您更改了端口或使用了多个控制器,请使用--listen-on /ip4/0.0.0.0/tcp/<port>

如果您有IPv6地址,但没有公共IPv4地址,请使用--listen-on /ip6/::/tcp/<port>设置监听端口。 强烈建议接受IPv6连接。

参见我们端口转发 的指南。

./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
controller \
--base-path /path/to/controller-dir \
--node-rpc-url ws://<node_ip>:<rpc_port>

替换以下占位符:

  • <nats_ip>: 你的NATS服务器的 IP 地址。
  • /path/to/controller-dir: 保存控制器对等网络详细信息的路径。
  • <node_ip> and <rpc_port>: 你的节点的 IP 地址和RPC 端口。
Common Parameters

请参阅./subspace-farmer cluster controller --help 以了解每个选项及其默认值的解释。

--listen-on /ip4/0.0.0.0/tcp/<port>
--listen-on /ip6/::1/tcp/<port>

--cache-group
--in-connections
--out-connections
--pending-in-connections
--pending-out-connections
Cache (Downloads sector data from DSN peers and serves it to the plotter.)
Cache Size

缓存存储区块链的档案历史。为了优化性能,数据缓存必须足够大以便本地存储这些数据。 如果数据在缓存中不存在,绘图可能会因此减慢,因为它必须通过 DSN 从对等点获取。 当前,我们建议缓存至少200GiB。

当前存档历史记录大小可以在 Astral Block Explorer 顶部找到。

./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
cache \
path=/path/to/cache,size=<size>

替换以下占位符:

  • <nats_ip>: 你的NATS服务器的 IP 地址。

  • /path/to/cache<size>: 缓存的路径和大小。一个缓存组件支持多个缓存:

    path=/path/to/cache1,size=<size> \
    path=/path/to/cache2,size=<size>
Common Parameters

Refer to ./subspace-farmer cluster cache --help for an explanation of additional parameters and their default values.

--cache-group
Plotter (Generates and uploads plotted sectors, downloading pieces from cache as needed)
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter

替换以下占位符:

  • <nats_ip>: 你的NATS服务器的 IP 地址。
Common Parameters

Refer to ./subspace-farmer cluster plotter --help for an explanation of parameters and their default values.

Farmer (Manages farms, audits, and retrieves plotted pieces. Requests sector plotting from the Plotter.)
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>

替换以下占位符:

  • <nats_ip>: 你的NATS服务器的 IP 地址。

  • <reward_address>: 你获取的奖励将要发送到的奖励地址。

  • /path/to/farm<size>: 存储你的数据块的路径和大小。你可以向你的农田添加多块地块:

    path=/path/to/farm1,size=<size> \
    path=/path/to/farm2,size=<size>
Common Parameters

请参阅./subspace-farmer cluster farmer --help 以了解每个选项及其默认值的解释。

--create

分组组件

You can run Farming Cluster components individually or combine them to run simultaneously.
    cluster \
--nats-server nats://<nats_ip>:4222 \
controller \
--base-path /path/to/controller-dir \
--node-rpc-url ws://<node_ip>:<rpc_port>
-- \
cache \
path=/path/to/cache,size=<size>
-- \
plotter
-- \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>

进阶

NATS 集群

Just like every other component in the Farming Cluster, it is possible to have redundant NATS servers. Doing so requires an extra step of configuring those NATS servers in their own cluster.

查看 NATS.io集群指南 了解更多详情。

Example
./subspace-farmer cluster \
controller \
--nats-server=nats://<nats_ip_1>:4222 \
--nats-server=nats://<nats_ip_2>:4222 \
--base-path /path/to/controller-dir \
--node-rpc-url ws://<node_ip>:<rpc_port>

多组件

This will demonstrate how to run multiple components in one Farming Cluster: (1) NATS Server, (2) Controllers, (2) Caches, (2) Plotters, and (3) Farmers.
Multiple Cache Groups

Each cache group must have a unique name, and controllers can be assigned one or more. Specify an alphanumeric name for each using --cache-group <group_name>.

Example
Controller #1
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
controller \
--base-path /path/to/controller-dir \
--cache-group <group_1> \
--cache-group <group_2> \
--node-rpc-url ws://<node_ip>:<rpc_port>
Controller #2
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
controller \
--base-path /path/to/controller-dir \
--cache-group <group_2> \
--node-rpc-url ws://<node_ip>:<rpc_port>
Cache #1
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
cache \
--cache-group <group_1> \
path=/path/to/cache,size=<size>
Cache #2
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
cache \
--cache-group <group_2> \
path=/path/to/cache,size=<size>
Plotter #1
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter
Plotter #2
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter
Farmer #1
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>
Farmer #2
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>
Farmer #3
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>