- CPU: AMD Ryzen 9 9950X
- RAM: 至少 192 GB
- 准备至少 3 个 NVMe 盘,一个系统盘(1T),一个存账户数据(至少2T),一个存账本数据(至少2T)。
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
sudo mkdir -p /root/sol/accounts
sudo mkdir -p /root/sol/ledger
sudo mkdir -p /root/sol/snapshot
sudo mkdir -p /root/sol/bin
sudo mkfs.ext4 /dev/nvme0n1
sudo mount /dev/nvme0n1 /root/sol/ledger
sudo mkfs.ext4 /dev/nvme1n1
sudo mount /dev/nvme1n1 /root/sol/accounts
vim /etc/fstab
# 增加下面两行
/dev/nvme0n1 /root/sol/ledger ext4 defaults 0 0
/dev/nvme1n1 /root/sol/accounts ext4 defaults 0 0
# 注释包含 none swap sw 0 0,并wq保存修改
UUID=xxxx-xxxx-xxxx-xxxx none swap sw 0 0
# 临时关闭swap
sudo swapoff -a
apt install linux-tools-common linux-tools-$(uname -r)
cpupower frequency-info
cpupower frequency-set --governor performance
watch "grep 'cpu MHz' /proc/cpuinfo"
sh -c "$(curl -sSfL https://release.anza.xyz/v2.2.16/install)"
vim /root/.bashrc
export PATH="/root/.local/share/solana/install/active_release/bin:$PATH"
source /root/.bashrc
solana --version
cd /root/sol/bin
solana-keygen new -o validator-keypair.json
vim /etc/sysctl.conf
# 添加下面的内容
# TCP Buffer Sizes (10k min, 87.38k default, 12M max)
net.ipv4.tcp_rmem=10240 87380 12582912
net.ipv4.tcp_wmem=10240 87380 12582912
# TCP Optimization
net.ipv4.tcp_congestion_control=westwood
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_sack=1
net.ipv4.tcp_low_latency=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_moderate_rcvbuf=1
# Kernel Optimization
kernel.timer_migration=0
kernel.hung_task_timeout_secs=30
kernel.pid_max=49152
# Virtual Memory Tuning
vm.swappiness=30
vm.max_map_count=2000000
vm.stat_interval=10
vm.dirty_ratio=40
vm.dirty_background_ratio=10
vm.min_free_kbytes=3000000
vm.dirty_expire_centisecs=36000
vm.dirty_writeback_centisecs=3000
vm.dirtytime_expire_seconds=43200
# Solana Specific Tuning
net.core.rmem_max=134217728
net.core.rmem_default=134217728
net.core.wmem_max=134217728
net.core.wmem_default=134217728
# Increase number of allowed open file descriptors
fs.nr_open = 1000000
# 重新加载配置生效
sysctl -p
vim /etc/systemd/system.conf
# 添加下面的内容
DefaultLimitNOFILE=1000000
# 重新加载配置
systemctl daemon-reload
vim /etc/security/limits.conf
# 添加下面的内容
# Increase process file descriptor count limit
* - nofile 1000000
# 手动设置一下,不然需要重启机器
ulimit -n 1000000
sudo ufw enable
sudo ufw allow 22
sudo ufw allow 8000:8020/tcp
sudo ufw allow 8000:8020/udp
sudo ufw allow 8899 # http 端口
sudo ufw allow 8900 # websocket 端口
sudo ufw allow 10900 # GRPC 端口
sudo ufw status
vim /root/sol/bin/validator.sh
# 添加下面的内容
#!/bin/bash
RUST_LOG=warn agave-validator \
--geyser-plugin-config /root/sol/bin/yellowstone-config.json \
--ledger /root/sol/ledger \
--accounts /root/sol/accounts \
--identity /root/sol/bin/validator-keypair.json \
--snapshots /root/sol/snapshot \
--log /root/solana-rpc.log \
--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 \
--known-validator Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24 \
--known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \
--known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \
--known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \
--known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \
--known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
--only-known-rpc \
--disable-banking-trace \
--rpc-bind-address 0.0.0.0 \
--rpc-port 8899 \
--full-rpc-api \
--private-rpc \
--no-voting \
--dynamic-port-range 8000-8020 \
--wal-recovery-mode skip_any_corrupted_record \
--limit-ledger-size 60000000 \
--no-port-check \
--no-snapshot-fetch \
--account-index-include-key AddressLookupTab1e1111111111111111111111111 \
--account-index program-id \
--rpc-bigtable-timeout 300 \
--full-snapshot-interval-slots 1577880000 \
--incremental-snapshot-interval-slots 788940000 \
--incremental-snapshot-archive-path /root/sol/snapshot
chmod +x /root/sol/bin/validator.sh
vim /etc/systemd/system/sol.service
# 添加下面的内容
[Unit]
Description=Solana Validator
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/bin:/usr/bin:/root/.local/share/solana/install/active_release/bin"
ExecStart=/root/sol/bin/validator.sh
[Install]
WantedBy=multi-user.target
# 安装解压缩包工具
sudo apt-get install bzip2
# 进入bin目录
cd /root/sol/bin
# 下载yellowstone-grpc压缩包
sudo wget https://github.com/rpcpool/yellowstone-grpc/releases/download/v7.0.0%2Bsolana.2.2.16/yellowstone-grpc-geyser-release22-x86_64-unknown-linux-gnu.tar.bz2
# 解压缩包
tar -xvjf yellowstone-grpc-geyser-release22-x86_64-unknown-linux-gnu.tar.bz2
# 下载yellowstone-config.json配置文件, 这里面配置的GRPC端口号是: 10900
sudo wget https://github.com/0xfnzero/solana-rpc-install/releases/download/v1.1/yellowstone-config.json
# 进入root目录
cd /root
# 下载重做节点脚本
sudo wget https://github.com/0xfnzero/solana-rpc-install/releases/download/v1.1/redo_node.sh
# 赋予脚本可执行权限
sudo chmod +x redo_node.sh
# 执行脚本,会自动下载快照,下载完成后启动RPC节点
sudo ./redo_node.sh
# 上面步骤执行完后, 通过下面命令可查看节点状态(需等待一些时间,大概1-2小时)
curl -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0", "id":1, "method":"getHealth"}' \
http://127.0.0.1:8899
# 系统服务相关命令
systemctl start sol
systemctl status sol
systemctl stop sol
systemctl restart sol
systemctl daemon-reload
# 查看服务是否正常运行
tail -f /root/solana-rpc.log
journalctl -u sol -f --no-hostname -o cat
ps aux | grep solana-validator
# 查看同步进度
solana-keygen pubkey /root/sol/bin/validator-keypair.json
solana gossip | grep {pubkey}
solana catchup {pubkey}