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,用于农场组件之间的通信。

安装和运行 NATS 的最简单方式是通过 Docker。

设置并配置 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 (管理节点通信并协调指挥其他组件。)

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

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 端口。
通用参数

请参阅./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
缓存 (从 DSN 节点下载扇区数据并提供给绘图器)
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>
通用参数

请参阅./subspace-farmer cluster cache --help 以获取额外参数及其默认值的解释。

--cache-group
绘图器 (生成和上传绘制过的数据块,需要时从缓存中下载pieces)
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter

替换以下占位符:

  • <nats_ip>: 你的NATS服务器的 IP 地址。
通用参数

参考./subspace-farmer cluster plotter --help以了解参数及其默认值的解释。

农民(管理农场、审计和检索绘制过的块。向绘图器请求绘制扇区)
./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>
通用参数

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

--create

分组组件

您可以单独运行集群组件,也可以将它们组合起来同时运行。
    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 集群

就像耕种集群中的其他组件一样,也可以使用冗余 NATS 服务器。这样做,需要一些额外步骤,即在nats自己的集群中配置这些 NATS 服务器。

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

示例
./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>

多组件

以下演示如何在一个 Farming 集群中运行多个组件:(1) NATS 服务器、(2) 控制器、(2) 缓存、(2) 绘图仪和 (3) Farmers。
Multiple Cache Groups

必须为每个控制器和缓存组件分配一个唯一的缓存组。 这可以通过--cache-group <group_name> 指定一个数字字母组合的缓存组名字来完成。

示例
Controller #1
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
controller \
--base-path /path/to/controller-dir \
--cache-group <group_1>
--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>