如何搭建并运行 Solana 验证节点:从零到完全配置指南

·

本文将详细介绍如何从技术层面搭建并运行一个 Solana 主网验证节点。我们会配置必要的工具和参数以简化日常运维,但更高级的节点操作技巧(如吸引质押或申请补贴等)不在本文讨论范围内。

请注意,运行验证节点需要对 Linux 系统管理有基本了解。你不需要是程序员或系统专家,但应熟悉终端命令操作、基础 Shell 脚本编写及配置文件处理。


什么是 Solana 验证节点?

Solana 命令行工具套件中包含一个名为 solana-validator 的可执行文件,它能够实现以下功能:

Solana 验证节点也可称为客户端(因它需连接至验证节点网络并请求数据)、服务器(因它需响应其他节点的请求并提供数据)或节点。

RPC 节点是一种不参与质押、不参与投票的 Solana 验证节点,仅用于响应数据请求而不参与共识过程。“Solana 验证节点”一词有时也指代在 Solana 生态中运行具备质押和投票功能的节点并参与共识的实体。


准备服务器硬件

你需要一台性能强劲且专用于运行验证节点的计算机。如果还想同时运行测试网和主网节点,则需准备第二台设备。目前官方推荐的硬件最低配置为:

如果想节省成本仅运行主网节点,请注意必须同时运行测试网节点才有资格申请 Solana 基金会委托计划(SFDP)。

你可以选择自行购买和运维硬件,或从数据中心服务商租用设备。尽管也可使用云服务提供商,但通常成本较高且可能存在性能问题。Solana 基金会服务器计划旨在帮助验证节点运营者更方便地从数据中心租用硬件。

为促进网络去中心化,建议选择目前 Solana 节点或质押量较少的自治系统(ASN)和城市部署节点。部分质押池和 SFDP 会根据节点在 ASN 和城市层面的去中心化程度给予奖励。


本地安装 Solana CLI 工具

建议在本地安装 Solana CLI 工具,以便在本地生成所有必要的密钥对,并将提现密钥与验证服务器隔离。安装完成后,可通过以下命令配置默认连接至测试网:

solana config set --url https://api.testnet.solana.com

若连接主网,可使用以下默认端点:

solana config set --url https://api.mainnet-beta.solana.com

公共主网端点常因请求过多而饱和。若对性能不满意,可注册并使用专属 RPC 端点。

搭建和启动验证节点需执行交易,因此必须准备含有一定数量 SOL 的钱包。若刚开始设置测试网,可通过以下命令创建默认钱包并获取测试网 SOL:

mkdir -p ~/.config/solana
solana-keygen new --outfile ~/.config/solana/id.json
solana airdrop 1 ~/.config/solana/id.json

强烈建议为测试网和主网使用不同的钱包。尽管密钥格式相同,但应避免混用,以防误操作。


设置投票账户

投票账户通过 solana create-vote-account 命令创建,需准备三对密钥:

  1. 身份密钥对:验证节点用它向网络标识自己并提交投票等交易。私钥需存放在服务器上,因此切勿存入超过投票所需数量的 SOL(约 1 SOL/天)。
  2. 投票账户密钥对:指投票账户本身,用于查询账户并委托质押。创建后仅需公钥,私钥仅用于证明所有权(不可更改)。
  3. 提现密钥对:作为投票账户的主密钥,用于提取奖励、更改身份或提现密钥等操作。这是三对密钥中最敏感的一对,不应在服务器上生成或存储。主网操作建议使用纸钱包、硬件钱包或多签方案。

生成密钥对

可通过以下命令为测试网生成密钥对:

solana-keygen new -o identity.json
solana-keygen new -o vote.json
solana-keygen new -o withdraw.json

使用纸钱包存储提现密钥

纸钱包是将 12 或 24 个助记词抄写在纸上,每次需签名时通过键盘输入的方式。运行以下命令生成纸钱包:

solana-keygen new --no-outfile

将显示的助记词抄写在纸上,并记录公钥、所用命令及 solana-keygen 版本号。使用前需验证能否正确访问该密钥:

solana-keygen verify ASK

切勿丢失助记词纸张,且完成后请清除终端缓冲区中的记录。

创建投票账户

密钥对准备就绪后,通过以下命令创建投票账户:

solana create-vote-account --fee-payer ~/.config/solana/id.json vote_account.json identity.json withdrawal.json

若使用纸钱包作为提现密钥,命令如下:

solana create-vote-account --fee-payer ~/.config/solana/id.json vote_account.json identity.json ASK

可通过以下命令查看投票账户状态:

solana vote-account <投票账户公钥>

此时,身份密钥对将用于运行验证服务器,提现密钥对需保密并仅用于投票账户的提现和更改操作,投票账户密钥对则不再需要(但请记住公钥)。

设置佣金比例

create-vote-account 命令支持以可选参数形式设置佣金,默认值为 100%(即私有验证节点)。若想吸引外部质押,需设置较低佣金。例如,若想将佣金设为 8%,且使用纸钱包提现密钥,可运行:

solana vote-update-commission --fee-payer ~/.config/solana/id.json <投票账户公钥> 8 ASK

配置多签方案

多签是一种需多个钱包签名才能执行交易的特殊钱包类型,适用于多人共同管理投票账户。即使独立运营节点,也可考虑使用多签以便未来灵活添加管理成员。

Squads 是 Solana 上支持多签管理的工具,提供专用于共享验证节点管理的功能。具体设置流程包括安装支持的钱包插件、创建多签小组、通过开发者界面添加验证节点等步骤。完成后需验证提现公钥是否已更新。

👉 探索更多节点管理策略与多签配置细节


配置验证服务器

根据服务器初始状态的不同,操作步骤会有所差异,但最终目标一致:

系统与用户设置

确保系统更新并创建 sol 用户:

sudo apt update
sudo apt upgrade
sudo adduser sol

如需授予 sudo 权限(会牺牲部分安全性换取便利性),可执行:

sudo usermod -aG sudo sol

系统调优

根据 Solana Labs 的建议,修改 sysctlsystemd 配置以提高文件描述符、内存映射文件等限制。当验证节点成为当前或下一轮块领导者时,整个网络都会尝试与其建立连接并发送交易,因此文件描述符限制尤为重要。

硬盘配置

当前建议配备 2 块物理 1TB+ 固态硬盘,分别存储账户数据和账本数据(操作系统也可安装于此)。由于 IOPS 要求较高,不建议将账户和账本放在同一磁盘。

除官方指南外,也可将多块硬盘配置为单个 RAID0 卷,通过 RAID 控制器优化数据条带分布,最大化整体 IOPS 性能。若采用单一 RAID0 卷,只需在 sol 用户目录下创建数据目录:

sudo su sol
mkdir -p /home/sol/accounts
mkdir -p /home/sol/ledger
mkdir -p /home/sol/snapshots
mkdir -p /home/sol/logs

在验证服务器上安装 Solana CLI

sol 用户身份重复本地安装步骤,在验证服务器上安装 Solana CLI。此次强烈建议从源码构建。若使用 Solana 安装工具,可通过 solana-install 命令未来更新至新版本(必须更新才能持续参与集群)。

安装 Jito 验证节点客户端

Jito Labs 分叉了 Solana 验证节点并发布了自带 MEV(最大可提取价值)功能的版本。MEV 指通过添加或重排区块中的交易获利。Jito 创建了一个愿支付溢价进行此操作的市场(“搜索者”)。若运行 Jito 验证节点,他们会向你的节点发送 MEV 交易捆绑包以包含在生产的区块中,并支付额外小费。

Jito 验证节点会增加运维复杂性和延迟,但可开辟 MEV 小费这一额外收入来源。配置大体相同,但需额外关注:


创建验证节点运行脚本

创建 validator.sh Shell 脚本

首先将验证节点身份密钥对复制到远程服务器:

scp identity.json [email protected]:/home/sol

通过包装成 Shell 脚本管理验证节点配置是标准做法。创建脚本并赋予执行权限:

sudo su sol
cat >/home/sol/validator.sh << EOF
#!/bin/sh
exec solana-validator \
 --identity /home/sol/identity.json \
 --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
 --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
 --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
 --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
 --only-known-rpc \
 --log /home/sol/logs/solana-validator.log \
 --accounts /home/sol/accounts \
 --snapshots /home/sol/snapshots \
 --ledger /home/sol/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
EOF
chmod +x /home/sol/validator.sh

这些设置适合在测试网上快速安全地启动。一切就绪后,需返回此脚本,运行 solana-validator --help 查看全部配置选项并进行定制。

尝试运行脚本启动验证节点:

/home/sol/validator.sh

首次启动需同步至集群当前状态。

验证验证节点正常运行

可从集群任意位置通过以下命令查看外部可见的进度:

solana catchup <验证节点身份公钥> --url <测试网或主网RPC>

sol 用户会话中可通过以下命令内部查看进度:

solana-validator --ledger /home/sol/ledger monitor

设置验证节点为守护进程

创建 systemd 单元文件将其作为守护进程管理:

sudo cat >/etc/systemd/system/sol.service << EOF
[Unit]
Description=Solana Validator
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=1024000
LogRateLimitIntervalSec=0
Environment="PATH=/bin:/usr/bin:/home/sol/.local/share/solana/install/active_release/bin"
ExecStart=/home/sol/validator.sh

[Install]
WantedBy=multi-user.target
EOF

启用并启动服务:

sudo systemctl enable sol
sudo systemctl start sol

检查状态和日志:

sudo systemctl status sol
sudo journalctl -u sol -f

监控验证节点

设置 Solana 看门狗(Watchtower)

Solana 看门狗是一款监控验证节点并在检测到问题时发送警报的工具。可通过以下命令安装:

cargo install solana-watchtower --locked

看门狗需配置集成以发送警报。以下示例展示如何设置 PagerDuty 集成:

cat >/home/sol/watchtower.sh << EOF
#!/bin/sh
exec &> /home/sol/watchtower.log
env PAGERDUTY_INTEGRATION_KEY=<你的PagerDuty集成密钥> \
solana-watchtower \
 --validator-identity <你的验证节点身份公钥> \
 --monitor-active-stake \
 --interval 20 \
 --minimum-validator-identity-balance 3 \
 --url https://api.testnet.solana.com
EOF

Solana Labs 还提供了使用 Telegram 发送警报的示例。不建议将看门狗与验证节点放在同一台机器上运行,因为若整机宕机将收不到通知。但若具备多种监控形式并能单独监控这些情况,或可勉强接受。

看门狗资源消耗不高,可在 AWS 或 GCP 等云或服务器less计算环境中运行。Solana 社区内也有许多人监控集群并愿基于看门狗提供的类似条件提供警报。

Stakewiz 提供基于 Telegram 的 Solana 验证节点监控服务。请注意,社区监控旨在让用户了解所质押验证节点的问题。作为验证节点运营者,不应完全依赖他人监控服务。

通过 getHealth RPC 方法自定义监控

若想直接获取验证节点健康状况,可轮询验证节点 JSON RPC 接口中的 getHealth 方法,了解节点是否健康及任何问题信息。

第三方监控解决方案

当验证节点规模扩大且需保护收入流时,可考虑商用级 SaaS 监控解决方案(如 Datadog 或 Splunk)。这类方案通常通过在你的服务器上运行守护进程监控日志和指标并导出至提供商,或通过提供 getHealth 或类似状态端点供提供商远程轮询你的验证节点来实现。


向验证节点添加质押

Solana 网络通过权益证明(PoS)投票过程达成共识,验证节点的投票权重与其被委托的 SOL 质押量成正比(类似股份公司的股东投票权)。此外,验证节点成为块领导者的频率也与其被质押的 SOL 数量成正比。

许多钱包、dApp 和其他工具可方便地将 SOL 质押给现有验证节点,但以下是通过 CLI 手动操作的步骤:

  1. 使用 solana-keygen new 创建 3 对密钥;
  2. 使用 solana create-stake-account 从密钥对创建质押账户;
  3. 向质押账户转入一些 SOL(测试网可通过 solana airdrop 实现);
  4. 使用 solana delegate-stake 将存入的质押委托给验证节点;
  5. 等待下一纪元激活质押,并通过 solana stake-account 检查。

创建密钥对和质押账户

创建密钥对和质押账户的过程与创建投票账户类似,3 对密钥分别为:

  1. 质押权限密钥对:允许在质押账户上执行委托、取消委托、拆分、合并等操作任务;
  2. 质押账户密钥对:标识质押账户本身的公钥(创建后不再需要私钥);
  3. 提现密钥对:用于提现质押及重置质押账户上权限密钥对的主密钥对。需谨慎对待,考虑使用硬件钱包、纸钱包或多签方案。

强烈建议出于与投票账户相同的原因为测试网和主网使用不同的密钥。但可在该集群内为多个质押账户复用单一的质押权限和提现权限密钥对。对质押账户使用相同密钥是合并它们的先决条件。

以下示例展示如何在测试网上使用基于文件的钱包为密钥对创建含有 1 SOL 的质押账户,从你的 id.json 钱包提供资金,并将该质押委托给你的新验证节点:

solana-keygen new -o stake_auth.json
solana-keygen new -o stake_acct_1.json
solana-keygen new -o stake_withdrawal_auth.json
solana airdrop 1 ~/.config/solana/id.json
solana create-stake-account --from ~/.config/solana/id.json stake_acct_1.json 1 --stake-authority stake_auth.json --withdraw-authority stake_withdraw_auth.json --fee-payer ~/.config/solana/id.json
solana delegate-stake --stake-authority stake_auth.json --fee-payer ~/.config/solana/id.json <质押账户公钥> <验证节点投票账户公钥>

现在可检查质押是否正在激活及将在哪个纪元激活:

solana stake-account <质押账户公钥>

一旦下一纪元开始且质押激活,验证节点的投票将开始计数,可通过 solana vote-account 命令查看近期投票。如果仅添加了少量 SOL(如示例中),不要期望验证节点成为块领导者。

投票每天成本约 1-2 SOL,因此按当前价格计算,验证节点仅投票每天就需花费约 200-300 美元。


发布验证节点信息

如果浏览常见的 Solana 验证节点目录(如 validators.app),会发现所有验证节点都有名称、描述、徽标和其他元数据。这些数据在每个集群中所有注册验证节点的链上发布,可通过运行 solana validator-info get 查看。

一旦验证节点启动运行,你可能想发布信息,尤其是在主网上运行并试图吸引质押时。

以下是如何发布元数据的基本示例:

solana validator-info publish "我的超赞验证节点" \
--website "https://awesome-validator.xyz/" \
--icon-url "https://awesome-validator.xyz/icon360x360.png" \
--keypair validator_identity.json \
--details "全球最棒的验证节点!"

创建元数据记录后,它会有自己的密钥,之后可使用 --info-pubkey 参数更新。请注意,图标 URL 最大长度为 80 个字符。


常见问题

运行 Solana 验证节点需要多少技术背景?

需要熟悉 Linux 系统管理、终端命令操作和基础 Shell 脚本编写。无需编程或高级系统管理 expertise,但应能从容处理配置文件和命令行操作。

验证节点硬件配置有哪些关键要求?

目前推荐 12 核/24 线程 CPU、256GB 内存、2 块 1TB SSD(建议 RAID0)及 10GB 网络连接。硬盘 IOPS 性能尤为关键,建议账户数据和账本数据分盘存储。

测试网和主网验证节点有何区别?

测试网用于测试和资格获取(如 SFDP),使用无价值的测试币。主网则处理真实资产和交易,对安全性和稳定性要求更高,需更谨慎的密钥管理和监控。

如何选择验证节点的佣金比例?

私有节点可设 100% 佣金。若想吸引外部质押,需设置更具竞争力的佣金(如 5-10%)。佣金比例影响委托者收益,是吸引质押的重要因素之一。

验证节点的主要收入来源是什么?

收入主要来自区块奖励和交易费用分红。若使用 Jito 等 MEV 方案,还可通过处理 MEV 交易捆绑包获得额外小费。投票本身有成本,需确保收入覆盖支出。

如何监控验证节点的健康状况?

可通过 Solana 看门狗工具、第三方监控服务(如 Stakewiz)、自定义脚本轮询 getHealth RPC 方法或商用 SaaS 方案(如 Datadog)实现多层次监控。


结语

恭喜!如果你已跟随指南完成所有步骤,现在应该已成功搭建并运行着自己的 Solana 验证节点。欢迎加入 Solana 验证节点社区!

更多资源