本文详细介绍了如何运行Solana节点,包括所需硬件和软件配置、步骤指导以及实施过程中的注意事项。具体步骤包括安装Solana命令行工具、配置节点身份、设置服务器、优化系统配置以及验证节点运行状态等,确保用户能够成功运行并参与Solana网络。
更新于2025年3月6日
Solana 网络是一个前沿的区块链网络,以其无限的可扩展性和极速的交易而闻名。如果你想参与并积极参与 Solana 生态系统,你可以通过运行 Solana 验证节点来实现。
本指南将指导你如何运行 Solana 节点,包括其设置和操作。这样做将有助于增强网络,验证交易,并赚取奖励。
Solana 节点是通过 Solana 协议实施的共识规则验证交易和区块的计算机。Solana 节点通过存储区块链账本的副本参与 Solana 区块链网络。
要 成为 Solana 验证者,你需要强大的计算资源,快速的处理器,大量的 RAM 和 SSD 存储。继续阅读以查看具体的要求以及如何运行 Solana 节点的逐步过程。
本指南包括一些动手演示。下面我们列出了运行 Solana 节点的关键硬件和软件要求。要进行以下步骤,你应该具备以下条件:
服务器硬件规范
为区块链工作负载构建的高性能专用裸金属服务器。
虽然你可以在云计算平台上运行验证者,但长期来看可能不具成本效益。不过,在 VM 实例上运行非投票 API 节点以供内部使用可能会很方便。此用例包括建立在 Solana 上的交易所和服务。
实际上,团队运营的 mainnet-beta 验证者目前在 GCE n2-standard-32
(32 个 vCPU,128 GB 内存)实例上运行,配备 2048 GB SSD,以便于操作。
本演示使用了 Cherry Servers 的 AMD 区块链服务器。如需使用其他云平台,请选择硬件规范相似的服务器类型。
要开始本指南,你将在你信任的计算机上运行命令,而不是在你计划用于验证者操作的远程机器上。首先,在本地计算机上打开终端程序。本演示使用的是 Ubuntu 系统,可以通过 CTRL + Alt + T
打开终端。
要创建你的验证者投票账户,你需要在本地计算机上安装 Solana 命令行界面。
有多种方式可以安装 Solana 命令行界面,如 文档中所示,但我们将在本演示中使用安装工具。
💡 从源代码构建对希望获得更安全和潜在性能更高的可执行文件的人来说是一个不错的选择。
在你的终端中运行以下命令:
sh -c "$(curl -sSfL https://release.solana.com/v1.16.8/install)"
你应该会看到类似的输出,表示成功安装,并提示你重新打开终端或在现有 shell 中运行提供的命令以应用 PATH 更改:
你可以通过运行以下命令确认 Solana CLI 是否已成功安装:
solana --version
成功安装 CLI 后,下一步是更改 Solana CLI 的配置,使其向 testnet
集群发送请求:
solana config set --url https://api.testnet.solana.com
要验证配置是否已更改,运行:
solana config get
接下来,你需要创建运行验证者所需的三个 密钥对。执行以下命令来创建密钥对:
solana-keygen new -o validator-keypair.json
solana-keygen new -o vote-account-keypair.json
solana-keygen new -o authorized-withdrawer-keypair.json
上述命令将生成三个密钥对,一个用于验证者,一个用于投票账户,一个用于授权提取者,并将其保存到命令中指定的 JSON 文件中。
Solana 验证者负责维护网络和验证交易。投票账户用于选择验证者并确认网络的共识,而授权提取者是允许从账户中提取资金的实体。
💡 一些操作员选择为他们的身份和投票账户使用 虚荣密钥对。
在你创建投票账户之前,需要配置 Solana 命令行工具以使用验证者密钥对。
以下命令将你刚创建的验证者密钥对设置为 Solana 配置中的默认密钥对,从而允许 Solana CLI 或后续命令将其用于身份验证和其他目的:
solana config set --keypair ./validator-keypair.json
现在验证你的账户余额为 0
:
solana balance
接下来,你需要向该密钥对账户存入一些 SOL,以便创建交易(在此情况下,制作投票账户):
solana airdrop 1
现在,你可以使用 Solana 集群创建一个投票账户。 请注意,迄今为止提到的所有命令 都应在你信任的计算机上执行,而 不 应在你打算运行验证者的服务器上,因为你不应在任何计算机上创建账户凭据:
solana create-vote-account -ut \
--fee-payer ./validator-keypair.json \
./vote-account-keypair.json \
./validator-keypair.json \
./authorized-withdrawer-keypair.json
这将使用提供的参数创建一个新的投票账户。
接下来,你需要在所选云平台上设置符合指南中提到的硬件规范的 服务器。如前所述,这里使用了 AMD 区块链服务器(Ubuntu 22.04)。
你还需要将数据存储划分为两个独立区域:账本分区和账户分区。
通过将账本和账户分区分开,Solana 旨在实现可扩展性和性能。
另请阅读:如何运行 Ethereum 节点
接下来,使用适当的命令 SSH 连接到你的服务器。这将允许你远程访问和配置验证者。命令应如下所示:
ssh user@<server.hostname>
另请阅读:如何部署混合智能合约
现在你可以访问服务器,运行以下命令以更新系统包:
sudo apt update && sudo apt upgrade -y
接下来,在虚拟机上创建并启用防火墙,以允许所需端口上的传入和传出流量(8000 - 10000 UDP/TCP)。这些端口特定于 Testnet(因此请确保根据你的所需集群进行更新)。 在启用防火墙之前,请确保添加所有允许规则(尤其是 SSH),以免将自己锁定在服务器外。这些防火墙规则是基于操作验证者所需的最低要求。
sudo ufw allow "OpenSSH"
sudo ufw allow 8000:10000/udp
sudo ufw allow 8000:10000/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 8001/tcp
sudo ufw allow 8899/tcp
sudo ufw allow 8900/tcp
sudo ufw enable
sudo ufw status
你应该会得到如下图所示的输出:
另请阅读:如何运行 Polygon 节点
现在,使用 adduser
命令在服务器上创建一个新用户,以运行验证者服务。
sudo adduser sol
这将在服务器上创建一个名为“sol”的新用户。
接下来,在 Ubuntu 服务器上确保至少挂载了 2TB 的磁盘空间。可以使用 df
命令检查磁盘空间:
df -h
如果你有未挂载/未格式化的驱动器,需要设置分区并挂载驱动器。
要查看你可用的硬盘设备,可以使用列出块设备的命令:
lsblk -f
你可能会在列表中看到一些有名称但没有 通用唯一标识符(UUID) 的设备。任何没有 UUID 的设备都是未格式化的。
如果你有用于账本分区的额外 NVME 驱动器,可以使用 mkfs
命令格式化它:
sudo mkfs -t ext4 /dev/nvme1n1
驱动器的名称和位置在你的计算机上可能会有所不同。格式化后,你可以再次运行 lsblk -f
命令以确认该设备现在具有 UUID。
本演示中使用的服务器上的设备已被格式化,因此要挂载驱动器,首先使用以下命令为挂载 drives(nvme2n1 和 nvme3n1 驱动器将在这个应用中分别使用账本和账户)创建目录,并将所创建目录的所有权更改为“sol”用户:
sudo mkdir -p /mnt/ledger
sudo chown -R sol:sol /mnt/ledger
sudo mkdir -p /mnt/accounts
sudo chown -R sol:sol /mnt/accounts
上述命令将分别创建“/mnt/ledger”和“/mnt/accounts”目录,并更改其所有权为“sol”用户。
现在可以使用以下命令挂载驱动器:
sudo mount /dev/nvme2n1 /mnt/ledger
sudo mount /dev/nvme3n1 /mnt/accounts
为了确保系统性能正常以及验证者能够成功启动,重要的是通过修改 sysctl knobs 和增加 systemd 及会话文件限制来优化系统。请按照以下命令进行必要的更改:
通过运行以下命令优化 sysctl knobs:
sudo bash -c "cat >/etc/sysctl.d/21-solana-validator.conf <<EOF
## 增加 UDP 缓冲区大小
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728
## 增加内存映射文件限制
vm.max_map_count = 1000000
## 增加允许开放文件描述符数量
fs.nr_open = 1000000
EOF"
sudo sysctl -p /etc/sysctl.d/21-solana-validator.conf
接下来,增加 systemd 和会话文件限制。要增加 systemd 和会话文件限制,你需要修改 systemd 配置文件。
如果你有具体的针对 Solana 验证者的 systemd 服务单元文件,可以在该文件的 [Service] 部分添加 LimitNOFILE=1000000 参数。
如果没有特定的服务文件,但想为所有 systemd 单元设置文件限制,可以在 /etc/systemd/system.conf 文件中添加 DefaultLimitNOFILE=1000000 参数。你可以运行以下命令使用 Nano 文本编辑器打开 system.conf
文件:
sudo nano /etc/systemd/system.conf
找到 [Manager] 段落,并添加或修改 DefaultLimitNOFILE 参数。然后保存文件并退出文本编辑器。
重载 systemd 以应用更改:
sudo systemctl daemon-reload
接下来,运行以下命令以设置会话文件限制:
sudo bash -c "cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
* - nofile 1000000
EOF"
上述命令通过在 /etc/security/limits.d/90-solana-nofiles.conf 创建一个新配置文件,设置 Solana 的进程文件描述符计数限制,并增加进程文件描述符计数限制。
调整系统后,关闭所有打开的会话(注销再重新登录)。
现在,你需要使用 scp
命令将验证者密钥对和投票账户密钥对 JSON 文件从本地计算机复制到虚拟机。在生成密钥对的目录中运行以下命令:
scp -C vote-account-keypair.json user@<server.hostname>:/home/sol
scp -C validator-keypair.json user@<server.hostname>:/home/sol
上述命令将安全地将指定的 JSON 文件从本地计算机复制到远程服务器的“/home/sol”目录。user@<server.hostname> 部分应替换为适当的远程用户名和主机名。
复制密钥对到远程服务器后,请确保将其所有权更改为“sol”用户,可以使用以下命令:
sudo chown sol:sol validator-keypair.json
sudo chown sol:sol vote-account-keypair.json
切换回你 SSH 进入的远程服务器的终端,使用以下命令切换到 sol
用户:
su - sol
为了运行验证者软件,你需要在远程服务器上安装 Solana CLI。可以运行以下命令来完成:
sh -c "$(curl -sSfL https://release.solana.com/v1.16.8/install)"
在远程服务器上安装 Solana CLI 后,你需做的下一件事是为你的验证者创建一个启动脚本。
在“sol”用户的 bin
目录中创建一个 validator.sh
文件,运行以下命令:
mkdir -p /home/sol/bin
touch /home/sol/bin/validator.sh
chmod +x /home/sol/bin/validator.sh
上述命令将在 bin 目录中创建一个 validator.sh
文件,并使其可执行。
接下来,使用 nano 编辑器打开 validator.sh
文件:
nano /home/sol/bin/validator.sh
将以下内容复制并粘贴到 validator.sh
中,然后保存文件:
exec solana-validator \
--identity validator-keypair.json \
--vote-account vote-account-keypair.json \
--known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
--known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
--known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
--known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
--only-known-rpc \
--log /home/sol/solana-validator.log \
--ledger /mnt/ledger \
--rpc-port 8899 \
--dynamic-port-range 8000-8020 \
--entrypoint entrypoint.testnet.solana.com:8001 \
--entrypoint entrypoint2.testnet.solana.com:8001 \
--entrypoint entrypoint3.testnet.solana.com:8001 \
--expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
--wal-recovery-mode skip_any_corrupted_record \
--limit-ledger-size
你可以运行 solana-validator --help
命令获取有关此脚本中每个标志作用的更多信息。你也可以参考 Solana 官方文档中关于 操作验证者的最佳实践 的部分。
检查区块链 IaaS 平台 Zeeve 如何利用 Cherry Servers 的安全专用裸金属服务器来简化他们的操作。
现在要确认 validator.sh
脚本是否正常运行,可以执行以下命令:
/home/sol/bin/validator.sh
这应会执行 solana-validator
进程。
在另一终端窗口中,SSH 进入你的远程服务器并使用以下命令验证 solana-validator
进程是否正在运行:
ps aux | grep solana-validator
你应该会得到一条包含 solana-validator
的输出,以及所有被添加到 validator.sh
脚本中的标志。
你还可以查看位于 /home/sol/solana-validator.log
的日志,以确保一切正常工作。
你还可以实时监控 solana-validator.log
文件的内容。在新终端窗口中,SSH 进入远程服务器并运行以下命令以切换到“sol”用户并监控日志文件内容:
su - sol
tail -f solana-validator.log
这将持续监控文件的新增数据,并在终端中显示。你需留意包含 _ERROR_
的行,如果不看到任何,可以退出命令。
接下来,你可以通过检查它是否已经向 Gossip 网络注册来验证你的验证者是否正常运行。
在新终端中,SSH 进入你的远程服务器,以“sol”用户身份登录并提取公钥,该公钥将用于在 Solana 网络识别你的验证者节点,从 validator-keypair.json
文件中运行以下命令:
solana-keygen pubkey ~/validator-keypair.json
然后你可以运行以下命令,根据 solana gossip
输出显示与公钥相关的信息:
solana gossip | grep <pubkey>
将 <pubkey
替换为之前提取的验证者节点的公钥。如果验证者已经在 Gossip 网络上注册,你将获得类似于下图的输出:
在验证者进入 Gossip 网络后,你还可以使用以下命令确认验证者已经加入网络:
solana validators | grep <pubkey>
如果它已加入网络,你应该会得到如下图的输出。
你还可以使用 solana catchup
命令查看验证者处理区块的速度:
solana catchup <pubkey>
另请阅读:什么是区块链服务器?
在本指南中,我们定义了 Solana 节点的要求,并提供了关于如何运行 Solana 验证者节点的逐步说明。从安装 Solana CLI 到创建验证者启动脚本,我们定义了重要参数,如身份、投票账户、已知验证者、日志和账本路径、RPC 端口、入口点和预期创世哈希。该指南强调了通过执行启动脚本并检查进程状态,以验证验证者是否正常工作的重要性。
运行 Solana 验证者节点可以是一个值得的经历,此时你应该对运行 Solana 节点所需的了解有了更深入的理解。你可以利用这些知识,为 Solana 网络做出贡献,同时为自己赢得奖励。
在满足 Solana 验证者要求的专用硬件上部署你的节点。
分享此文章
- 原文链接: cherryservers.com/blog/h...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!