Розгортання ноди Solana
Solana — одна з найбільш вимогливих до ресурсів блокчейн-мереж для оператора ноди. Мінімальні системні вимоги тут — не приблизні орієнтири, а жорсткі практичні обмеження: нода з недостатнім залізом просто не встигає за мережею і відстає від tip.
Вимоги до залізо
Офіційні вимоги Solana Foundation і реальний production мінімум розходяться. Ось практичні цифри на 2024–2025:
| Компонент | Мінімум (RPC нода) | Рекомендується | 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 |
Чому так багато RAM: Solana зберігає account state в памяті (accounts DB). При 1,8+ мільярдів accounts у мережі — це сотні гігабайт. Нода з 128 GB RAM не запуститься стабільно.
Чому NVMe обов'язковий: швидкість I/O критична. Нода повинна обробляти тисячі транзакцій на секунду, писати ledger, відповідати на RPC запити — все одночасно. Rotational HDD для accounts/ledger — неприйнятно.
Установка і конфігурація
Підготовка системи
# Ubuntu 22.04 LTS — рекомендована OS
# Настройка sysctl для високої нагрузки
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
# Лімити для процесу solana-validator
cat >> /etc/security/limits.conf << EOF
solana soft nofile 1000000
solana hard nofile 1000000
solana soft memlock unlimited
solana hard memlock unlimited
EOF
# Hugepages для поліпшення продуктивності памяті
echo 'vm.nr_hugepages = 131072' >> /etc/sysctl.conf
Установка Solana CLI
# Встановлюємо конкретну версію — не latest у 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-ноди
# /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
Ключові флаги:
-
--no-voting— RPC-нода, не валідатор (не потрібен stake) -
--limit-ledger-size 50000000— обмеження розміру ledger (~200 GB). Без цього ledger росте необмежено -
--enable-rpc-transaction-history— зберігати історію транзакцій. Потрібно дляgetTransactionRPC методу -
--known-validator— довірені валідатори для initial sync. Обов'язково для безпеки, інакше нода може синхронізуватися з fork
Перший запуск: snapshot sync
Синхронізація з genesis займає тижні. Використовуємо snapshot:
# Скачуємо останній snapshot з офіційних джерел
# Список доступних snapshots: https://api.mainnet-beta.solana.com/
solana-validator \
--ledger /mnt/ledger \
download-latest-snapshot \
--snapshot-dir /mnt/snapshots \
--trusted-validators 7Np41oeYqpe1GAUzqNoFdJ5SAAQhphFp8s6XAXFCLRiE
Після скачування snapshot (~100+ GB) нода запускається і догоняє tip за годину.
Моніторинг ноди
# Статус ноди
solana-validator --ledger /mnt/ledger monitor
# Інформація про здоров'я
curl -s http://localhost:8899 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}' | jq .
# Відставання від tip (має бути < 100 слотів в нормі)
solana catchup --our-localhost 8899
Критичні метрики для моніторингу: slot lag (відставання від tip), skipped slots, memory usage (має бути < 90% RAM), I/O wait.
Prometheus + Grafana: експортер solana-exporter публікує метрики у форматі Prometheus. Dashboard доступен на Grafana Marketplace.
Типові проблеми
Нода відстає і не може догнати tip: зазвичай проблема в I/O — accounts база не встигає. Перевіряємо iostat -x 1, якщо await > 50ms — потрібен більш швидкий NVMe.
OOM killer убиває процес: 256 GB RAM на межі. Рішення: додаємо swap на NVMe (не HDD), налаштовуємо vm.swappiness=10.
Нода форкується: перевіряємо --known-validator і --expected-genesis-hash. Нода без trusted validators уразлива до eclipse атак.
Що входить в роботу
- Підготовка сервера: sysctl, limits, hugepages, розмітка дисків
- Установка і конфігурація
solana-validator - Початкова синхронізація через snapshot
- Настройка systemd сервісу і автоперезапуску
- Моніторинг: Prometheus метрики, Grafana дашборд, алерти на slot lag







