Skip to content

1. Solana验证节点部署

基于centos,官方推荐使用ubuntu20.x

Solana 基于1.18.26

1.1 系统要求

官方最低要求

performance testing.

ComponentValidator RequirementsAdditional RPC Node Requirements
CPU- 2.8GHz base clock speed, or faster - SHA extensions instruction support - AMD Gen 3 or newer - Intel Ice Lake or newer - Higher clock speed is preferable over more cores - AVX2 instruction support (to use official release binaries, self-compile otherwise) - Support for AVX512f is helpful
12 cores / 24 threads, or more16 cores / 32 threads, or more
RAMError Correction Code (ECC) memory is suggested Motherboard with 512GB capacity suggested
256GB or more512 GB or more for all account indexes
DiskPCIe Gen3 x4 NVME SSD, or better, on each of: - Accounts: 500GB, or larger. High TBW (Total Bytes Written) - Ledger: 1TB or larger. High TBW suggested - Snapshots: 250GB or larger. High TBW suggested - OS: (Optional) 500GB, or larger. SATA OK The OS may be installed on the ledger disk, though testing has shown better performance with the ledger on its own disk Accounts and ledger can be stored on the same disk, however due to high IOPS, this is not recommended The Samsung 970 and 980 Pro series SSDs are popular with the validator communityConsider a larger ledger disk if longer transaction history is required Accounts and ledger should not be stored on the same disk
GPUsNot necessary at this time Operators in the validator community do not use GPUs currently
NetworkInternet service should be at least 1GBbit/s symmetric, commercial. 10GBit/s preferred (especially for mainnet-beta).
CPU:16 核以上。
RAM:128 GB
存储:2TB NVMe SSD 或更大
网络:1Gbps 带宽

如果只是拉块,可以采用16x32g
CPU:16 核以上。
RAM:128 GB
存储:2TB NVMe SSD 或更大
网络:1Gbps 带宽

如果只是拉块,可以采用16x32g

1.2 官当

https://explorer.solana.com/

或者

https://solanabeach.io/

更多地址请看,https://solana.com/zh/docs/core/clusters

1.2 安装依赖

bash
yum install -y build-essential pkg-config libssl-dev llvm libclang-dev protobuf-compiler bzip2
yum install -y build-essential pkg-config libssl-dev llvm libclang-dev protobuf-compiler bzip2

解释:

  • Build essential 构建必备
  • Package config 包配置
  • Udev & LLM & libclang
  • Protocol buffers 协议缓冲区

1.3 安装Solana

官方共有三种方式安装:

  • 通过 Solana 安装Solana工具包
  • 通过源代码安装
  • 下载预置二进制文件

本次采用二进制安装,方便

1.下载

https://github.com/solana-labs/solana/releases/latest

bash
wget https://github.com/solana-labs/solana/releases/download/v1.18.26/solana-release-x86_64-unknown-linux-gnu.tar.bz2
wget https://github.com/solana-labs/solana/releases/download/v1.18.26/solana-release-x86_64-unknown-linux-gnu.tar.bz2

2.创建目录

bash
#命令目录
mkdir -p /data/apps/solana

#数据目录
mkdir -p /data/solana
#命令目录
mkdir -p /data/apps/solana

#数据目录
mkdir -p /data/solana

3.解压

bash
tar jxvf solana-release-x86_64-unknown-linux-gnu.tar.bz2 --strip-components=1 -C  /data/apps/solana/
tar jxvf solana-release-x86_64-unknown-linux-gnu.tar.bz2 --strip-components=1 -C  /data/apps/solana/
  • 查看目录结构
bash
$tree -L 2 /data/apps/solana/
/data/apps/solana/
├── bin
│   ├── cargo-build-bpf
│   ├── cargo-build-sbf
│   ├── cargo-test-bpf
│   ├── cargo-test-sbf
│   ├── deps -->dir
│   ├── perf-libs --->dir
│   ├── rbpf-cli
│   ├── sdk ---> dir
│   ├── solana
│   ├── solana-bench-tps
│   ├── solana-dos
│   ├── solana-faucet
│   ├── solana-genesis
│   ├── solana-gossip
│   ├── solana-install
│   ├── solana-install-init
│   ├── solana-keygen
│   ├── solana-ledger-tool
│   ├── solana-log-analyzer
│   ├── solana-net-shaper
│   ├── solana-stake-accounts
│   ├── solana-test-validator
│   ├── solana-tokens
│   ├── solana-validator
│   ├── solana-watchtower
│   ├── solang
│   └── spl-token
├── validator-keypair.json
└── version.yml
$tree -L 2 /data/apps/solana/
/data/apps/solana/
├── bin
│   ├── cargo-build-bpf
│   ├── cargo-build-sbf
│   ├── cargo-test-bpf
│   ├── cargo-test-sbf
│   ├── deps -->dir
│   ├── perf-libs --->dir
│   ├── rbpf-cli
│   ├── sdk ---> dir
│   ├── solana
│   ├── solana-bench-tps
│   ├── solana-dos
│   ├── solana-faucet
│   ├── solana-genesis
│   ├── solana-gossip
│   ├── solana-install
│   ├── solana-install-init
│   ├── solana-keygen
│   ├── solana-ledger-tool
│   ├── solana-log-analyzer
│   ├── solana-net-shaper
│   ├── solana-stake-accounts
│   ├── solana-test-validator
│   ├── solana-tokens
│   ├── solana-validator
│   ├── solana-watchtower
│   ├── solang
│   └── spl-token
├── validator-keypair.json
└── version.yml

4.设置环境变量

bash
cd /data/apps/solana/

#vim /etc/profile
export PATH=/data/apps/solana/bin:$PATH

#source /etc/profile
cd /data/apps/solana/

#vim /etc/profile
export PATH=/data/apps/solana/bin:$PATH

#source /etc/profile

5.查看版本

bash
$solana --version
solana-cli 1.18.26 (src:d9f20e95; feat:3241752014, client:SolanaLabs)
$solana --version
solana-cli 1.18.26 (src:d9f20e95; feat:3241752014, client:SolanaLabs)

1.4 连接Solana集群

Solana集群步骤

1.Mainnet Beta 群集

生产集群

bash
$solana config set --url https://api.mainnet-beta.solana.com
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /root/.config/solana/id.json
Commitment: confirmed


#查看新添加的地址
$solana config get
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /data/apps/solana/validator-keypair.json
Commitment: confirmed
$solana config set --url https://api.mainnet-beta.solana.com
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /root/.config/solana/id.json
Commitment: confirmed


#查看新添加的地址
$solana config get
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /data/apps/solana/validator-keypair.json
Commitment: confirmed

在成为一个验证器节点之前,通过获取事务计数来检查集群是否可以被你的机器访问到:

  • 验证是否能访问
bash
$solana transaction-count
358210243456
#返回数字说明可以连接集群
$solana transaction-count
358210243456
#返回数字说明可以连接集群

2.Devnet集群

开发者集群

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

3.Testnet集群

测试集群

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

1.5 配置Solana身份信息

  • 验证节点创建身份密钥
bash
# solana-keygen new -o /data/apps/solana/validator-keypair.json
输入密码
# solana-keygen new -o /data/apps/solana/validator-keypair.json
输入密码
  • 查看身份公钥
bash
$solana-keygen pubkey /data/apps/solana/validator-keypair.json
$solana-keygen pubkey /data/apps/solana/validator-keypair.json

❌ 注意

validator-keypair.json”文件也是您的 (ed25519) 私钥。需要将这个私钥备份好

  • 将solana配置设置为对以下所有命令使用验证节点密钥对
bash
$solana config set --keypair /data/apps/solana/validator-keypair.json
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /data/apps/solana/validator-keypair.json
Commitment: confirmed
$solana config set --keypair /data/apps/solana/validator-keypair.json
Config File: /root/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /data/apps/solana/validator-keypair.json
Commitment: confirmed

1.6 启动Solana验证器

官当

集群启动脚本

1.配置启动脚本

bash
#创建脚本
#touch  /data/apps/solana/validator.sh

# vim  /data/apps/solana/validator.sh
#!/bin/bash
solana-validator \
 --identity /data/apps/solana/validator-keypair.json \
 --known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \
 --known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \
 --known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \
 --known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \
 --only-known-rpc \
 --ledger /data/solana/validator-ledger \
 --rpc-port 8899 \
 --bind-address 127.0.0.1 \
 --private-rpc \
 --dynamic-port-range 8000-8020 \
 --entrypoint entrypoint.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \
 --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
 --wal-recovery-mode skip_any_corrupted_record \
 --limit-ledger-size \
 --enable-rpc-transaction-history \
 --account-index spl-token-mint program-id spl-token-owner \
 --log /data/solana/solana-validator.log
#创建脚本
#touch  /data/apps/solana/validator.sh

# vim  /data/apps/solana/validator.sh
#!/bin/bash
solana-validator \
 --identity /data/apps/solana/validator-keypair.json \
 --known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \
 --known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \
 --known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \
 --known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \
 --only-known-rpc \
 --ledger /data/solana/validator-ledger \
 --rpc-port 8899 \
 --bind-address 127.0.0.1 \
 --private-rpc \
 --dynamic-port-range 8000-8020 \
 --entrypoint entrypoint.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \
 --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \
 --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
 --wal-recovery-mode skip_any_corrupted_record \
 --limit-ledger-size \
 --enable-rpc-transaction-history \
 --account-index spl-token-mint program-id spl-token-owner \
 --log /data/solana/solana-validator.log

注意修改ip

  • 脚本授权
bash
chmod +x /data/apps/solana/validator.sh
chmod +x /data/apps/solana/validator.sh

2.配置systemd

  • 创建sol用户
bash
useradd -rs /bin/false sol

chown -R sol. /data/apps/solana

chown -R sol. /data/solana
useradd -rs /bin/false sol

chown -R sol. /data/apps/solana

chown -R sol. /data/solana
  • 创建配置文件
bash
cat > /etc/systemd/system/sol.service <<EOF
[Unit]
Description=Solana Validator
Documentation=https://solana.com/zh
After=network.target
Wants=solana-sys-tuner.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/data/apps/solana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/data/apps/solana/validator.sh
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/sol.service <<EOF
[Unit]
Description=Solana Validator
Documentation=https://solana.com/zh
After=network.target
Wants=solana-sys-tuner.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/data/apps/solana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/data/apps/solana/validator.sh
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
  • 启动
bash
systemctl daemon-reload
systemctl enable --now sol
systemctl daemon-reload
systemctl enable --now sol

❌ 注意

节点启动之后会下载snapshot,等下载之后再解压,之后才会启动8899端口,需要一段时间才能进行验证

3.验证节点

  • 查看端口
bash
netstat -lnptu |grep 8899
netstat -lnptu |grep 8899
  • 查看mainnet集群信息
bash
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.mainnet-beta.solana.com
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.mainnet-beta.solana.com

输出信息中会包含我们自己的节点信息

  • 列出了所有已在协议中注册的验证者
bash
#查看pubkey
solana-keygen pubkey /data/apps/solana/validator-keypair.json

$solana gossip | grep <pubkey>
139.178.68.207  | 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on | 8001   | 8004  | 139.178.68.207:80     | 1.14.17 | 3488713414
#查看pubkey
solana-keygen pubkey /data/apps/solana/validator-keypair.json

$solana gossip | grep <pubkey>
139.178.68.207  | 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on | 8001   | 8004  | 139.178.68.207:80     | 1.14.17 | 3488713414

4.配置日志切换

  • 创建配置
bash
cat > /etc/logrotate.d/logrotate.sol <<EOF
/data/solana/solana-validator.log {
  rotate 7
  daily
  missingok
  postrotate
    systemctl kill -s USR1 sol.service
  endscript
}
EOF
cat > /etc/logrotate.d/logrotate.sol <<EOF
/data/solana/solana-validator.log {
  rotate 7
  daily
  missingok
  postrotate
    systemctl kill -s USR1 sol.service
  endscript
}
EOF
  • 重启服务
bash
systemctl restart logrotate.service
systemctl restart logrotate.service