System Requirements
Index
- Overview
- Operating System
- Docker Compose Requirements
- Kubernetes Requirements
- Storage Breakdown
- Network Configuration
- Important Notes
Overview
This document outlines the system requirements for running Teranode. Requirements differ based on:
- Network: Mainnet vs Testnet
- Deployment type: Docker Compose (single-node) vs Kubernetes (multi-node)
All specifications assume a seeded, pruned node with default retention settings. Requirements may increase if:
- Performing full blockchain sync from genesis (instead of seeding)
- Increasing data retention values
- Running additional services or replicas
Operating System
Recommended: Ubuntu 24.04 LTS
Both Docker and Kubernetes deployments should work on other Linux distributions, but this is untested. Ubuntu 24.04 LTS is the recommended and tested platform.
Docker Compose Requirements
Docker Compose deployments run all services on a single node. This is suitable for production workloads but you lose the ability to scale individual services independently. For horizontal scaling of specific services, use Kubernetes.
Mainnet
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 8 cores | 16 cores |
| RAM | 128 GB | 256 GB |
| Storage | 1 TB | 2 TB |
| Storage Type | NVMe SSD | NVMe SSD |
Note: NVMe SSD storage is strongly recommended for mainnet. Spinning disks (HDD) are not supported due to IOPS requirements from Aerospike and blob storage.
Testnet
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores | 8 cores |
| RAM | 16 GB | 32 GB |
| Storage | 64 GB | 128 GB |
| Storage Type | SSD | NVMe SSD |
Kubernetes Requirements
Kubernetes deployments allow horizontal scaling of individual services. External dependencies (Aerospike, PostgreSQL, Kafka) should be deployed separately or use managed services.
Kubernetes Mainnet
Teranode Services (per pod):
Service names match those used in teranode-operator managed CRs. CPU and memory requirements should be monitored and adjusted based on network activity. These values are highly dependent on transaction volume and block sizes on the blockchain network.
| Service | CPU Request | Memory Request |
|---|---|---|
| alertSystem | 1 | 1Gi |
| asset | 1 | 1Gi |
| blockAssembly | 1 | 4Gi |
| blockchain | 1 | 1Gi |
| blockValidator | 1 | 8Gi |
| legacy | 4 | 32Gi |
| peer | 1 | 1Gi |
| propagation | 1 | 1Gi |
| rpc | 1 | 1Gi |
| subtreeValidator | 1 | 16Gi |
Optional services such as validator, blockPersister, utxoPersister, and coinbase can be enabled with a baseline of 1 CPU / 1Gi memory.
External Dependencies:
| Component | CPU | Memory | Storage |
|---|---|---|---|
| Aerospike | 4 cores | 32 GB | 400 GB NVMe |
| PostgreSQL | 2 cores | 4 GB | 50 GB SSD |
| Kafka | 2 cores | 4 GB | 50 GB SSD |
Shared Storage (RWX): 1 TB
Kubernetes Testnet
Teranode Services (per pod):
A baseline of 100m CPU / 512Mi memory should be sufficient for all services on testnet.
External Dependencies:
| Component | CPU | Memory | Storage |
|---|---|---|---|
| Aerospike | 2 cores | 8 GB | 50 GB NVMe |
| PostgreSQL | 1 core | 2 GB | 20 GB SSD |
| Kafka | 1 core | 2 GB | 20 GB SSD |
Shared Storage (RWX): 50 GB
Storage Breakdown
Understanding where storage is consumed helps with capacity planning.
Mainnet reference (seeded, pruned, default retention):
| Component | Storage Used | Description |
|---|---|---|
| Aerospike | ~400 GB | UTXO set (~340M records) |
| Blob Storage | ~600 GB | Transactions and subtrees |
| PostgreSQL | < 1 GB | Block headers and chain state |
| Prometheus | ~1 GB | Metrics (varies with retention) |
| Total | ~1 TB |
Storage type requirements:
- Aerospike: NVMe SSD required. High random IOPS for UTXO lookups.
- Blob Storage: SSD recommended. Sequential read/write for transaction data.
- PostgreSQL: SSD recommended. Standard database workload.
Network Configuration
UDP Buffer Sizes (Required for QUIC)
Teranode's P2P service uses QUIC transport via libp2p, which requires increased UDP buffer sizes for stable operation. The default Linux kernel buffer limits are too small for high-bandwidth QUIC transfers, causing packet drops and connection instability.
Apply these settings on all hosts running Teranode:
# Create a dedicated sysctl configuration file
cat << 'EOF' | sudo tee /etc/sysctl.d/99-teranode.conf
net.core.rmem_max=7500000
net.core.wmem_max=7500000
EOF
# Apply immediately
sudo sysctl --system
For Docker deployments: These settings must be applied on the host machine, not inside containers. Containers inherit the host's kernel limits.
For Kubernetes deployments: Apply these settings to all worker nodes in your cluster, or configure via a DaemonSet that runs a privileged init container.
| Parameter | Value | Description |
|---|---|---|
net.core.rmem_max |
7500000 | Maximum UDP receive buffer size (~7.5 MB) |
net.core.wmem_max |
7500000 | Maximum UDP send buffer size (~7.5 MB) |
Why this is needed: QUIC is a UDP-based protocol. When the receive buffer fills up, the kernel drops incoming packets. The quic-go library attempts to request larger buffers but is constrained by the kernel maximum. Without this configuration, you may see warnings like: failed to sufficiently increase receive buffer size.
Important Notes
-
Seeding vs Full Sync: These requirements assume a seeded node. Full blockchain sync from genesis requires additional temporary storage and significantly more time. See the Blockchain Synchronization Guide.
-
Pruning: Teranode prunes old transaction data by default. Disabling pruning or increasing retention will require proportionally more blob storage.
-
Scaling: These are baseline requirements. High-throughput deployments targeting 1M+ tps require significantly more resources and horizontal scaling via Kubernetes.
-
Aerospike Memory: Aerospike stores its primary index in memory. The ~20 GB RAM requirement for mainnet UTXO index will grow as the UTXO set grows.
-
Docker Compose vs Kubernetes: Docker Compose runs all services on a single node and is suitable for production workloads at current mainnet transaction volumes. However, you cannot scale individual services independently. For horizontal scaling or high-availability deployments, use Kubernetes.