耕种集群
农民集群是为较大规模的家民设计的,以有效地应对扩展方面的挑战。 它由四个主要部分组成,通过一个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
- 创建并保存
nats.config
配置文件,内容如下:
max_payload = 2MB
- 使用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 (管理节点通信并协调指挥其他组件。)
启动的第一个组件是控制 器。它连接到单个节点,您必须指定节点在网络上的位置。
要让你的集群能够连接,打开默认端口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 节点下载扇区数据并提供给绘图器)
缓存存储区块链的档案历史。为了优化性能,数据缓存必须足够大以便本地存储这些数据。 如果数据在缓存中不存在,绘图可能会因此减慢,因为它必须通过 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。
必须为每个控制器和缓存组件分配一个唯一的缓存组。 这可以通过--cache-group <group_name>
指定一个数字字母组合的缓存组名字来完成。
示例
./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>
./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>
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
cache \
--cache-group <group_1> \
path=/path/to/cache,size=<size>
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
cache \
--cache-group <group_2> \
path=/path/to/cache,size=<size>
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
plotter
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>
./subspace-farmer \
cluster \
--nats-server nats://<nats_ip>:4222 \
farmer \
--reward-address <reward_address> \
path=/path/to/farm,size=<size>