90 lines
2.5 KiB
Bash
90 lines
2.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
|
||
|
|
# Backup chaindata script for Besu nodes
|
||
|
|
# This script creates backups of chaindata volumes
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
|
|
|
||
|
|
# Configuration
|
||
|
|
NAMESPACE="${NAMESPACE:-besu-network}"
|
||
|
|
BACKUP_DIR="${BACKUP_DIR:-/backup/chaindata}"
|
||
|
|
RETENTION_DAYS="${RETENTION_DAYS:-30}"
|
||
|
|
DATE=$(date +%Y%m%d-%H%M%S)
|
||
|
|
|
||
|
|
|
||
|
|
log_success "Starting chaindata backup"
|
||
|
|
|
||
|
|
# Create backup directory
|
||
|
|
mkdir -p "$BACKUP_DIR"
|
||
|
|
|
||
|
|
# Backup validators
|
||
|
|
log_warn "Backing up validator chaindata..."
|
||
|
|
VALIDATOR_PODS=$(kubectl get pods -n "$NAMESPACE" -l component=validator -o jsonpath='{.items[*].metadata.name}')
|
||
|
|
|
||
|
|
for pod in $VALIDATOR_PODS; do
|
||
|
|
log_warn "Backing up $pod..."
|
||
|
|
|
||
|
|
# Create snapshot
|
||
|
|
kubectl exec -n "$NAMESPACE" "$pod" -- tar czf - /data/besu > "$BACKUP_DIR/validator-$pod-$DATE.tar.gz"
|
||
|
|
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
log_success "✓ Backup created: validator-$pod-$DATE.tar.gz"
|
||
|
|
else
|
||
|
|
log_error "✗ Backup failed for $pod"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Backup RPC nodes (optional - only if using full sync)
|
||
|
|
log_warn "Backing up RPC chaindata..."
|
||
|
|
RPC_PODS=$(kubectl get pods -n "$NAMESPACE" -l component=rpc -o jsonpath='{.items[*].metadata.name}')
|
||
|
|
|
||
|
|
for pod in $RPC_PODS; do
|
||
|
|
log_warn "Backing up $pod..."
|
||
|
|
|
||
|
|
# Create snapshot
|
||
|
|
kubectl exec -n "$NAMESPACE" "$pod" -- tar czf - /data/besu > "$BACKUP_DIR/rpc-$pod-$DATE.tar.gz"
|
||
|
|
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
log_success "✓ Backup created: rpc-$pod-$DATE.tar.gz"
|
||
|
|
else
|
||
|
|
log_error "✗ Backup failed for $pod"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Clean up old backups
|
||
|
|
log_warn "Cleaning up old backups (older than $RETENTION_DAYS days)..."
|
||
|
|
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
||
|
|
|
||
|
|
log_success "Backup completed"
|
||
|
|
|
||
|
|
# Upload to Azure Blob Storage (optional)
|
||
|
|
if [ -n "$AZURE_STORAGE_ACCOUNT" ] && [ -n "$AZURE_STORAGE_CONTAINER" ]; then
|
||
|
|
log_warn "Uploading backups to Azure Blob Storage..."
|
||
|
|
|
||
|
|
# Install azure-cli if not present
|
||
|
|
if ! command -v az &> /dev/null; then
|
||
|
|
log_error "Azure CLI not found. Install it to upload backups."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Upload backups
|
||
|
|
az storage blob upload-batch \
|
||
|
|
--account-name "$AZURE_STORAGE_ACCOUNT" \
|
||
|
|
--destination "$AZURE_STORAGE_CONTAINER" \
|
||
|
|
--source "$BACKUP_DIR" \
|
||
|
|
--pattern "*-$DATE.tar.gz"
|
||
|
|
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
log_success "✓ Backups uploaded to Azure Blob Storage"
|
||
|
|
else
|
||
|
|
log_error "✗ Upload failed"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_success "Backup process completed"
|
||
|
|
|