Files
proxmox/docs/04-configuration/BESU_ARCHIVE_NODES.md
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

459 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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