Solana Node Deployment
Solana is one of the most resource-demanding blockchain networks for node operators. Minimal system requirements here are not approximate guidelines but hard practical constraints: a node with insufficient hardware simply won't keep up with the network and will lag behind the tip.
Hardware Requirements
Official Solana Foundation requirements and real production minimum diverge. Here are practical figures for 2024–2025:
| Component | Minimum (RPC node) | Recommended | Validator |
|---|---|---|---|
| CPU | 12 cores / 24 threads (AMD EPYC/Threadripper) | 16+ cores | 24+ cores |
| RAM | 256 GB DDR4 | 512 GB | 512 GB+ |
| Storage OS | 500 GB NVMe | 1 TB NVMe | 1 TB NVMe |
| Storage Accounts | 2 TB NVMe (PCIe 4.0) | 4 TB NVMe | 4 TB NVMe |
| Storage Ledger | 8 TB+ HDD/NVMe | 12 TB | 12 TB+ |
| Network | 1 Gbps | 10 Gbps | 10 Gbps |
Why so much RAM: Solana stores account state in memory (accounts DB). With 1.8+ billion accounts on network — that's hundreds of gigabytes. A node with 128 GB RAM won't start stably.
Why NVMe is mandatory: I/O speed is critical. Node must process thousands of transactions per second, write ledger, answer RPC requests — all simultaneously. Rotational HDD for accounts/ledger — unacceptable.
Installation and Configuration
System Preparation
# Ubuntu 22.04 LTS — recommended OS
# Configure sysctl for high load
cat >> /etc/sysctl.conf << EOF
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 134217728
net.core.wmem_default = 134217728
net.core.optmem_max = 134217728
net.core.netdev_max_backlog = 65536
EOF
sysctl -p
# Limits for solana-validator process
cat >> /etc/security/limits.conf << EOF
solana soft nofile 1000000
solana hard nofile 1000000
solana soft memlock unlimited
solana hard memlock unlimited
EOF
# Hugepages for memory performance improvement
echo 'vm.nr_hugepages = 131072' >> /etc/sysctl.conf
Solana CLI Installation
# Install specific version — not latest in production
SOLANA_VERSION="v1.18.26"
sh -c "$(curl -sSfL https://release.solana.com/${SOLANA_VERSION}/install)"
export PATH="/home/solana/.local/share/solana/install/active_release/bin:$PATH"
solana --version
RPC Node Configuration
# /home/solana/start-validator.sh
#!/bin/bash
exec solana-validator \
--identity /home/solana/validator-keypair.json \
--known-validator 7Np41oeYqpe1GAUzqNoFdJ5SAAQhphFp8s6XAXFCLRiE \
--known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \
--known-validator DE1bawNcRJB9rVm3buyMVDbezCfKkKa3aTEnDqeS89UB \
--only-known-rpc \
--rpc-port 8899 \
--private-rpc \
--dynamic-port-range 8000-8020 \
--entrypoint mainnet-beta.solana.com:8001 \
--entrypoint entrypoint2.mainnet.solana.com:8001 \
--entrypoint entrypoint3.mainnet.solana.com:8001 \
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
--wal-recovery-mode skip_any_corrupted_record \
--ledger /mnt/ledger \
--accounts /mnt/accounts \
--snapshots /mnt/snapshots \
--log /home/solana/solana-validator.log \
--limit-ledger-size 50000000 \
--no-voting \
--enable-rpc-transaction-history \
--enable-extended-tx-metadata-storage \
--rpc-bind-address 0.0.0.0
Key flags:
-
--no-voting— RPC node, not validator (no stake needed) -
--limit-ledger-size 50000000— limit ledger size (~200 GB). Without this ledger grows unlimited -
--enable-rpc-transaction-history— store transaction history. Needed forgetTransactionRPC method -
--known-validator— trusted validators for initial sync. Mandatory for safety, else node can sync with fork
First Launch: Snapshot Sync
Sync from genesis takes weeks. Use snapshot:
# Download latest snapshot from official sources
# List of available snapshots: https://api.mainnet-beta.solana.com/
solana-validator \
--ledger /mnt/ledger \
download-latest-snapshot \
--snapshot-dir /mnt/snapshots \
--trusted-validators 7Np41oeYqpe1GAUzqNoFdJ5SAAQhphFp8s6XAXFCLRiE
After snapshot download (~100+ GB) node starts and catches up to tip in hours.
Node Monitoring
# Node status
solana-validator --ledger /mnt/ledger monitor
# Health information
curl -s http://localhost:8899 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}' | jq .
# Lag behind tip (should be < 100 slots normally)
solana catchup --our-localhost 8899
Critical metrics for monitoring: slot lag (lag behind tip), skipped slots, memory usage (should be < 90% RAM), I/O wait.
Prometheus + Grafana: solana-exporter exporter publishes metrics in Prometheus format. Dashboard available on Grafana Marketplace.
Typical Issues
Node lags and can't catch up: usually I/O problem — accounts base can't keep up. Check iostat -x 1, if await > 50ms — need faster NVMe.
OOM killer kills process: 256 GB RAM at limit. Solution: add swap on NVMe (not HDD), configure vm.swappiness=10.
Node forks: check --known-validator and --expected-genesis-hash. Node without trusted validators vulnerable to eclipse attacks.
What's Included
- Server preparation: sysctl, limits, hugepages, disk partitioning
- Installation and configuration of
solana-validator - Initial sync via snapshot
- systemd service setup and auto-restart
- Monitoring: Prometheus metrics, Grafana dashboard, slot lag alerts







