459 lines
10 KiB
Markdown
459 lines
10 KiB
Markdown
|
|
# Besu Archive Node Configuration Guide
|
|||
|
|
|
|||
|
|
**Last Updated:** 2026-01-31
|
|||
|
|
**Document Version:** 1.0
|
|||
|
|
**Status:** Active Documentation
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Date**: 2026-01-17
|
|||
|
|
**Purpose**: Guide for configuring and managing Besu archive nodes (sentry nodes)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Overview
|
|||
|
|
|
|||
|
|
Sentry nodes are configured as **full archive nodes** to maintain complete blockchain history for archival purposes. This guide documents archive node configuration, storage requirements, and management.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive Node Configuration
|
|||
|
|
|
|||
|
|
### Current Sentry Configuration
|
|||
|
|
|
|||
|
|
**Node Type**: Sentry (Full Archive)
|
|||
|
|
|
|||
|
|
**Key Configuration**:
|
|||
|
|
```toml
|
|||
|
|
# Archive node configuration
|
|||
|
|
sync-mode="FULL" # Full blockchain sync
|
|||
|
|
logging="INFO" # Detailed logs for archival
|
|||
|
|
|
|||
|
|
# RPC Configuration (internal only)
|
|||
|
|
rpc-http-enabled=true
|
|||
|
|
rpc-http-api=["ETH","NET","WEB3","ADMIN"]
|
|||
|
|
|
|||
|
|
# Network
|
|||
|
|
discovery-enabled=true # Open P2P discovery
|
|||
|
|
max-peers=25
|
|||
|
|
|
|||
|
|
# Permissioning
|
|||
|
|
permissions-nodes-config-file-enabled=true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**File**: `smom-dbis-138-proxmox/templates/besu-configs/config-sentry.toml`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive Node Requirements
|
|||
|
|
|
|||
|
|
### 1. Sync Mode: FULL
|
|||
|
|
|
|||
|
|
```toml
|
|||
|
|
sync-mode="FULL"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Verification**: ✅ All sentry configs use `sync-mode="FULL"`
|
|||
|
|
|
|||
|
|
**Purpose**:
|
|||
|
|
- Maintains complete blockchain history
|
|||
|
|
- Enables historical state queries
|
|||
|
|
- Required for full archive functionality
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. Logging: INFO
|
|||
|
|
|
|||
|
|
```toml
|
|||
|
|
logging="INFO"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Verification**: ✅ All sentry configs use `logging="INFO"`
|
|||
|
|
|
|||
|
|
**Rationale**:
|
|||
|
|
- Detailed logs for archival purposes
|
|||
|
|
- Better debugging for archive queries
|
|||
|
|
- Necessary for historical analysis
|
|||
|
|
|
|||
|
|
**Trade-off**: Higher I/O overhead (~10-20%) compared to WARN logging
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. No Pruning
|
|||
|
|
|
|||
|
|
**Current Configuration**: ✅ Pruning not enabled (default: full archive)
|
|||
|
|
|
|||
|
|
**Verification**: No `pruning-enabled` or `pruning-blocks-retained` options in sentry configs
|
|||
|
|
|
|||
|
|
**Purpose**:
|
|||
|
|
- Keep all historical data
|
|||
|
|
- Enable unlimited historical queries
|
|||
|
|
- Maintain complete blockchain archive
|
|||
|
|
|
|||
|
|
**Note**: If storage becomes an issue, consider enabling pruning with high retention, but this reduces archive completeness.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. RPC APIs for Archive Queries
|
|||
|
|
|
|||
|
|
**Current APIs**: `["ETH","NET","WEB3","ADMIN"]`
|
|||
|
|
|
|||
|
|
**Archive-Relevant APIs**:
|
|||
|
|
- `ETH`: Standard Ethereum APIs (including historical queries)
|
|||
|
|
- `ADMIN`: Administrative operations
|
|||
|
|
|
|||
|
|
**Verification**: ✅ Appropriate APIs enabled for archive access
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Storage Requirements
|
|||
|
|
|
|||
|
|
### Archive Database Growth
|
|||
|
|
|
|||
|
|
**Estimation** (per Besu documentation):
|
|||
|
|
- **Block data**: ~2-5 KB per block
|
|||
|
|
- **State data**: Variable (grows with contract storage)
|
|||
|
|
- **Transaction receipts**: ~500 bytes per transaction
|
|||
|
|
|
|||
|
|
**Growth Rate**:
|
|||
|
|
- **Current network**: ~20 blocks/minute = ~1,200 blocks/hour
|
|||
|
|
- **Block data growth**: ~2.4-6 MB/hour = ~58-144 MB/day
|
|||
|
|
- **With state data**: Significantly higher (contract storage)
|
|||
|
|
|
|||
|
|
**Storage Requirements**:
|
|||
|
|
|
|||
|
|
| Time Period | Estimated Storage | Notes |
|
|||
|
|
|-------------|-------------------|-------|
|
|||
|
|
| **1 month** | ~10-50 GB | Depends on transaction volume |
|
|||
|
|
| **3 months** | ~30-150 GB | Linear growth expected |
|
|||
|
|
| **1 year** | ~100-500 GB | State data may be higher |
|
|||
|
|
| **5 years** | ~500 GB - 2.5 TB | Long-term archival |
|
|||
|
|
|
|||
|
|
**Current Assessment**: Monitor storage usage and plan for growth
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Storage Planning
|
|||
|
|
|
|||
|
|
**Recommendations**:
|
|||
|
|
|
|||
|
|
1. **Initial Allocation**:
|
|||
|
|
- Minimum: 500 GB per archive node
|
|||
|
|
- Recommended: 1-2 TB per archive node
|
|||
|
|
|
|||
|
|
2. **Growth Planning**:
|
|||
|
|
- Monitor storage usage monthly
|
|||
|
|
- Plan expansion before reaching 80% capacity
|
|||
|
|
- Consider separate volumes for archive data
|
|||
|
|
|
|||
|
|
3. **Backup Strategy**:
|
|||
|
|
- Regular backups of archive database
|
|||
|
|
- Offsite backup for disaster recovery
|
|||
|
|
- Retention policy for backups
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive Node Verification
|
|||
|
|
|
|||
|
|
### Configuration Verification
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Verify sync mode is FULL
|
|||
|
|
grep "sync-mode" /etc/besu/config-sentry.toml
|
|||
|
|
# Expected: sync-mode="FULL"
|
|||
|
|
|
|||
|
|
# Verify logging is INFO
|
|||
|
|
grep "logging" /etc/besu/config-sentry.toml
|
|||
|
|
# Expected: logging="INFO"
|
|||
|
|
|
|||
|
|
# Verify no pruning options
|
|||
|
|
grep -i "pruning" /etc/besu/config-sentry.toml
|
|||
|
|
# Expected: No output (pruning not enabled = full archive)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Current Status**: ✅ All sentry configs verified as archive nodes
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Functional Verification
|
|||
|
|
|
|||
|
|
**Check Archive Status**:
|
|||
|
|
```bash
|
|||
|
|
# Check sync status
|
|||
|
|
curl -X POST http://localhost:8545 \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
|
|||
|
|
# Expected: false (fully synced)
|
|||
|
|
|
|||
|
|
# Check latest block
|
|||
|
|
curl -X POST http://localhost:8545 \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|||
|
|
|
|||
|
|
# Test historical query (verify archive capability)
|
|||
|
|
curl -X POST http://localhost:8545 \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x...","0x100"],"id":1}'
|
|||
|
|
# Should return historical balance (archive nodes only)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive Node Management
|
|||
|
|
|
|||
|
|
### Storage Management
|
|||
|
|
|
|||
|
|
**Monitor Storage Usage**:
|
|||
|
|
```bash
|
|||
|
|
# Check database size
|
|||
|
|
du -sh /data/besu/database/
|
|||
|
|
|
|||
|
|
# Check disk usage
|
|||
|
|
df -h /data/besu/
|
|||
|
|
|
|||
|
|
# Monitor growth over time
|
|||
|
|
# (set up monitoring alerts at 80% capacity)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Storage Expansion**:
|
|||
|
|
1. Plan expansion when approaching 80% capacity
|
|||
|
|
2. Backup archive data before expansion
|
|||
|
|
3. Expand volume or add storage
|
|||
|
|
4. Verify Besu continues operating
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Backup and Recovery
|
|||
|
|
|
|||
|
|
**Backup Strategy**:
|
|||
|
|
|
|||
|
|
1. **Database Backup**:
|
|||
|
|
- Full database backup weekly
|
|||
|
|
- Incremental backups daily
|
|||
|
|
- Offsite backup monthly
|
|||
|
|
|
|||
|
|
2. **Configuration Backup**:
|
|||
|
|
- Backup config files
|
|||
|
|
- Backup permission files
|
|||
|
|
- Backup node keys
|
|||
|
|
|
|||
|
|
3. **Recovery Procedures**:
|
|||
|
|
- Document recovery steps
|
|||
|
|
- Test recovery procedures
|
|||
|
|
- Maintain recovery runbook
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Performance Optimization
|
|||
|
|
|
|||
|
|
**Archive Node Performance**:
|
|||
|
|
|
|||
|
|
1. **Storage Performance**:
|
|||
|
|
- Use SSD for archive database (high read I/O)
|
|||
|
|
- Consider NVMe for high-performance requirements
|
|||
|
|
- Monitor I/O performance
|
|||
|
|
|
|||
|
|
2. **Memory Optimization**:
|
|||
|
|
- Higher heap size (8-12 GB) for archive nodes
|
|||
|
|
- Cache frequently accessed historical data
|
|||
|
|
- Monitor memory usage for historical queries
|
|||
|
|
|
|||
|
|
3. **Query Optimization**:
|
|||
|
|
- Index historical data appropriately
|
|||
|
|
- Monitor query performance
|
|||
|
|
- Optimize frequently used historical queries
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive vs. Pruned Nodes
|
|||
|
|
|
|||
|
|
### Full Archive (Current Configuration)
|
|||
|
|
|
|||
|
|
**Characteristics**:
|
|||
|
|
- ✅ Complete blockchain history
|
|||
|
|
- ✅ All historical state queries supported
|
|||
|
|
- ✅ Unlimited historical access
|
|||
|
|
- ⚠️ Higher storage requirements
|
|||
|
|
- ⚠️ Higher memory requirements
|
|||
|
|
|
|||
|
|
**Use Case**: ✅ Sentry nodes (archival purposes)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Pruned Nodes (Not Recommended for Sentries)
|
|||
|
|
|
|||
|
|
**Configuration**:
|
|||
|
|
```toml
|
|||
|
|
pruning-enabled=true
|
|||
|
|
pruning-blocks-retained=1024 # Keep last 1024 blocks
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Characteristics**:
|
|||
|
|
- ❌ Limited historical data
|
|||
|
|
- ❌ Historical queries may fail
|
|||
|
|
- ✅ Lower storage requirements
|
|||
|
|
- ✅ Lower memory requirements
|
|||
|
|
|
|||
|
|
**Use Case**: Non-archive RPC nodes (if storage is concern)
|
|||
|
|
|
|||
|
|
**Note**: **Do NOT enable pruning on sentry nodes** - they are archive nodes.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Alternative: Pruning Configuration (If Storage Becomes Issue)
|
|||
|
|
|
|||
|
|
**Only consider if storage is a critical constraint**:
|
|||
|
|
|
|||
|
|
```toml
|
|||
|
|
# Enable pruning with high retention (NOT RECOMMENDED for full archive)
|
|||
|
|
pruning-enabled=true
|
|||
|
|
pruning-blocks-retained=100000 # Keep last 100,000 blocks (~70 days at 2s/block)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Warning**: This reduces archive completeness. Prefer expanding storage instead.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Monitoring Archive Nodes
|
|||
|
|
|
|||
|
|
### Key Metrics
|
|||
|
|
|
|||
|
|
1. **Sync Status**:
|
|||
|
|
- Fully synced (archive complete)
|
|||
|
|
- Syncing (catching up)
|
|||
|
|
- Lag (blocks behind)
|
|||
|
|
|
|||
|
|
2. **Storage Usage**:
|
|||
|
|
- Database size
|
|||
|
|
- Disk usage
|
|||
|
|
- Growth rate
|
|||
|
|
|
|||
|
|
3. **Query Performance**:
|
|||
|
|
- Historical query latency
|
|||
|
|
- Query success rate
|
|||
|
|
- Archive query volume
|
|||
|
|
|
|||
|
|
4. **Resource Usage**:
|
|||
|
|
- Memory usage (historical queries)
|
|||
|
|
- Disk I/O (read-heavy)
|
|||
|
|
- CPU usage (query processing)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Archive Node Strategy
|
|||
|
|
|
|||
|
|
### Current Implementation
|
|||
|
|
|
|||
|
|
✅ **Sentry nodes = Full archive nodes**
|
|||
|
|
- Complete blockchain history
|
|||
|
|
- Detailed logs (INFO)
|
|||
|
|
- Full sync mode
|
|||
|
|
- No pruning
|
|||
|
|
|
|||
|
|
✅ **Validators = Non-archive**
|
|||
|
|
- Minimal logs (WARN)
|
|||
|
|
- Full sync (consensus requirement)
|
|||
|
|
- Not archive nodes (no historical queries)
|
|||
|
|
|
|||
|
|
✅ **RPC nodes = Non-archive (most)**
|
|||
|
|
- Minimal logs (WARN)
|
|||
|
|
- Full sync (currently)
|
|||
|
|
- Not archive nodes (API serving)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Archive Node Distribution
|
|||
|
|
|
|||
|
|
**Current**:
|
|||
|
|
- **Archive Nodes**: 4 sentries (VMIDs 1500-1503)
|
|||
|
|
- **Non-Archive Nodes**: Validators + RPC nodes
|
|||
|
|
|
|||
|
|
**Recommendation**: ✅ Appropriate distribution
|
|||
|
|
- Sentries handle archival
|
|||
|
|
- Other nodes run lean
|
|||
|
|
- Centralized archive management
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Storage Planning Example
|
|||
|
|
|
|||
|
|
### Example: 1 Year Archive Growth
|
|||
|
|
|
|||
|
|
**Assumptions**:
|
|||
|
|
- Block time: 2 seconds
|
|||
|
|
- Blocks per day: 43,200
|
|||
|
|
- Blocks per year: ~15.7 million
|
|||
|
|
- Block data: ~3 KB per block (average)
|
|||
|
|
- State data: Variable (depends on contracts)
|
|||
|
|
|
|||
|
|
**Estimation**:
|
|||
|
|
- Block data: 15.7M × 3 KB ≈ 47 GB/year
|
|||
|
|
- State data: 50-200 GB/year (varies widely)
|
|||
|
|
- **Total**: ~100-250 GB/year per archive node
|
|||
|
|
|
|||
|
|
**Planning**:
|
|||
|
|
- Initial: 1 TB allocation
|
|||
|
|
- Year 1: ~750 GB remaining
|
|||
|
|
- Year 2: ~500 GB remaining
|
|||
|
|
- Year 3: ~250 GB remaining
|
|||
|
|
- **Action**: Plan expansion by year 3
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Best Practices
|
|||
|
|
|
|||
|
|
### 1. Storage Monitoring
|
|||
|
|
- Monitor disk usage weekly
|
|||
|
|
- Set alerts at 80% capacity
|
|||
|
|
- Plan expansion proactively
|
|||
|
|
|
|||
|
|
### 2. Archive Verification
|
|||
|
|
- Verify archive queries work
|
|||
|
|
- Test historical state access
|
|||
|
|
- Confirm sync status regularly
|
|||
|
|
|
|||
|
|
### 3. Backup Strategy
|
|||
|
|
- Regular database backups
|
|||
|
|
- Test recovery procedures
|
|||
|
|
- Offsite backup for disaster recovery
|
|||
|
|
|
|||
|
|
### 4. Performance Monitoring
|
|||
|
|
- Monitor query performance
|
|||
|
|
- Track storage growth
|
|||
|
|
- Optimize if performance degrades
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Related Documentation
|
|||
|
|
|
|||
|
|
- `docs/04-configuration/BESU_CONFIGURATION_GUIDE.md` - Configuration reference
|
|||
|
|
- `docs/04-configuration/BESU_PERFORMANCE_TUNING.md` - Performance tuning
|
|||
|
|
- `docs/04-configuration/BESU_PATH_REFERENCE.md` - Path structure
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Summary
|
|||
|
|
|
|||
|
|
### Archive Node Status
|
|||
|
|
|
|||
|
|
✅ **Configuration Verified**:
|
|||
|
|
- All sentry nodes configured as full archive
|
|||
|
|
- `sync-mode="FULL"` ✅
|
|||
|
|
- `logging="INFO"` ✅
|
|||
|
|
- No pruning enabled ✅
|
|||
|
|
|
|||
|
|
✅ **Storage Planning**:
|
|||
|
|
- Monitor growth regularly
|
|||
|
|
- Plan expansion proactively
|
|||
|
|
- Maintain backup strategy
|
|||
|
|
|
|||
|
|
✅ **Performance**:
|
|||
|
|
- Appropriate memory allocation
|
|||
|
|
- SSD recommended for archive database
|
|||
|
|
- Monitor query performance
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Last Updated**: 2026-01-17
|
|||
|
|
**Status**: Archive Configuration Verified
|