Backup y recuperación

MPCIUM ofrece capacidades robustas de backup y recuperación para garantizar que los datos de tu clúster MPC distribuido estén protegidos contra pérdidas. El sistema de backup usa una estrategia de backup incremental con cifrado para almacenar y proteger de forma eficiente el estado de tu base de datos, minimizando el uso de recursos.

Backup incremental
Click to open the full-size diagram

Importante: prueba siempre tus procedimientos de backup y recuperación en un entorno que no sea de producción antes de implementarlos en producción.

Configuración de backups

MPCIUM admite una configuración de backups ajustable en tu archivo config.yaml:

Configuración de backups

config.yaml
# Backup Configuration
backup_enabled: true                    # Enable/disable automatic backups (default: true)
backup_period_seconds: 300              # How often to perform backups in seconds (default: 300)
backup_dir: "./backups"                 # Directory where encrypted backups are stored

Parámetros de configuración

backup_enabled (boolean)

Controla si se realizan backups automáticos. Configúralo en false para desactivar los backups por completo.

backup_period_seconds (integer)

Define el intervalo entre backups automáticos, en segundos. El valor predeterminado de 300 segundos (5 minutos) ofrece un buen equilibrio entre la protección de los datos y el rendimiento del sistema.

backup_dir (string)

Especifica el directorio donde se almacenan los archivos de backup cifrados. Asegúrate de que este directorio tenga los permisos adecuados y suficiente espacio en disco.

Estrategia de backup

MPCIUM implementa una estrategia de backup incremental que almacena de forma eficiente solo los cambios desde el último backup, lo que reduce los requisitos de almacenamiento y el tiempo de backup. Este enfoque garantiza que cada backup no sea un duplicado de los anteriores, lo que ahorra una cantidad significativa de espacio de almacenamiento y ancho de banda de red sin dejar de proteger completamente los datos.

Estructura de los archivos de backup

Los archivos de backup se almacenan en el directorio de backup configurado con la siguiente convención de nombres:

node0/
└── backups/
    ├── backup-node0-2025-07-28_20-46-39-1.enc
    ├── backup-node0-2025-07-28_20-48-39-2.enc
    ├── backup-node0-2025-07-28_20-49-39-3.enc
    └── latest.version

Formato de los archivos de backup

Cada archivo de backup contiene:

  • Cambios incrementales de la base de datos desde el último backup (no duplicados completos)
  • Estado cifrado de la base de datos con cifrado AES-256-GCM para mayor seguridad durante el tránsito y el almacenamiento
  • Metadatos, que incluyen la marca de tiempo de creación, los parámetros de cifrado y la información de versión
  • Cadena de actualizaciones incrementales que puede reconstruirse para restaurar el estado completo de la base de datos

Ejemplo de metadatos de backup

{
  "algo": "AES-256-GCM",
  "nonce_b64": "MgDMCSqKNujD+9na",
  "created_at": "2025-07-28T20:46:39+07:00",
  "since": 0,
  "next_since": 6,
  "encryption_key_id": "bd1937594bea2580"
}

Seguridad: los archivos de backup se cifran con la misma badger_password que se usa para cifrar la base de datos, lo que garantiza que tus datos de backup permanezcan seguros durante el tránsito y el almacenamiento. El enfoque incremental combinado con el cifrado ofrece tanto eficiencia de recursos como protección de los datos.

Procedimientos de recuperación

Usar mpcium-cli recover

Para recuperar tu base de datos de MPCIUM a partir de archivos de backup cifrados, usa el comando mpcium-cli recover:

Comando de recuperación

mpcium-cli
mpcium-cli recover --help

NAME:
   mpcium recover - Recover database from encrypted backup files

USAGE:
   mpcium recover [command [command options]]

OPTIONS:
   --backup-dir string, -b string             Directory containing encrypted backup files
   --recovery-path string, -r string          Target path for database recovery
   --backup-encryption-key string, -k string  Encryption key for backup files (will prompt if not provided)
   --force, -f                                Force overwrite if recovery path already exists (default: false)
   --help, -h                                 show help

Proceso de recuperación

  1. Detén el nodo de MPCIUM para asegurarte de que no haya operaciones activas en la base de datos
  2. Ejecuta el comando de recuperación con los parámetros adecuados
  3. Actualiza la configuración para que apunte a la base de datos recuperada
  4. Reinicia el nodo con los datos recuperados
Recuperación de backup

Ejemplo de recuperación

bash
# Step 1: Stop the MPCIUM node

# Step 2: Recover the database
mpcium-cli recover \
  --backup-dir backups/ \
  --recovery-path restore_db/node0

# Step 3: Update config.yaml
# Change db_path to: db_path: "restore_db"

# Step 4: Restart the node

mpcium start -n node0

Integración con AWS S3

MPCIUM admite AWS S3 para el almacenamiento de backups en la nube, lo que aporta redundancia adicional y capacidades de recuperación ante desastres.

Configurar el backup en S3

1. Crea un bucket de S3

Crear un bucket de S3

bash
aws s3 mb s3://node0-backup --region ap-southeast-1

2. Configura los permisos de S3

Asegúrate de que tus credenciales de AWS tengan los permisos adecuados para las operaciones de S3:

Ejemplo de política de S3

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::node0-backup",
        "arn:aws:s3:::node0-backup/*"
      ]
    }
  ]
}

Operaciones de backup en S3

Sube los backups locales a S3

Subir a S3

bash
# Sync local backup folder to S3
aws s3 sync ./backups s3://node0-backup

Descarga los backups desde S3

Descargar desde S3

bash
# Sync from S3 to local folder
aws s3 sync s3://node0-backup ./backups

Verifica el backup en S3

Verificar el contenido de S3

bash
# List S3 backup contents
aws s3 ls s3://node0-backup --recursive

# Check backup file details
aws s3api head-object --bucket node0-backup --key backup-node0-2025-07-28_20-46-39-1.enc

Former: Product Manager at TomoChain labs

Backups automatizados

Configuración de cron jobs

Configura backups automatizados en S3 mediante cron jobs para garantizar una sincronización periódica con el almacenamiento en la nube:

Configuración de cron jobs

bash
# Edit crontab
crontab -e

# Add backup job (runs every hour)
0 * * * * /usr/local/bin/backup-mpcium.sh

# Add daily backup verification
0 2 * * * /usr/local/bin/verify-backup.sh

Ejemplo de script de backup

Crea un script de backup para automatizar el proceso de sincronización con S3:

Script de backup

bash
#!/bin/bash
# /usr/local/bin/backup-mpcium.sh

# Configuration
NODE_NAME="node0"
S3_BUCKET="node0-backup"
BACKUP_DIR="/opt/mpcium/node0/backups"
LOG_FILE="/var/log/mpcium-backup.log"

# Log function
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Start backup
log "Starting MPCIUM backup to S3"

# Sync local backups to S3
if aws s3 sync "$BACKUP_DIR" "s3://$S3_BUCKET" --delete; then
    log "Backup completed successfully"
else
    log "Backup failed"
    exit 1
fi

# Verify backup
if aws s3 ls "s3://$S3_BUCKET" | grep -q "backup-$NODE_NAME"; then
    log "Backup verification successful"
else
    log "Backup verification failed"
    exit 1
fi

Script de verificación

Crea un script para verificar la integridad de los backups:

Script de verificación

bash
#!/bin/bash
# /usr/local/bin/verify-backup.sh

# Configuration
S3_BUCKET="node0-backup"
LOG_FILE="/var/log/mpcium-backup-verify.log"

# Log function
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Check S3 bucket accessibility
if aws s3 ls "s3://$S3_BUCKET" > /dev/null 2>&1; then
    log "S3 bucket accessible"
else
    log "S3 bucket not accessible"
    exit 1
fi

# Count backup files
BACKUP_COUNT=$(aws s3 ls "s3://$S3_BUCKET" --recursive | grep -c "\.enc$")
log "Found $BACKUP_COUNT backup files in S3"

# Check for recent backups (within last 24 hours)
RECENT_BACKUPS=$(aws s3 ls "s3://$S3_BUCKET" --recursive | grep "$(date '+%Y-%m-%d')" | wc -l)
log "Found $RECENT_BACKUPS backups from today"

if [ "$RECENT_BACKUPS" -eq 0 ]; then
    log "WARNING: No recent backups found"
    exit 1
fi

Monitoreo y alertas

Configura el monitoreo de tus procesos de backup:

Configuración del monitoreo

bash
# Check backup script exit status
if [ $? -ne 0 ]; then
    # Send alert (example with curl to webhook)
    curl -X POST -H "Content-Type: application/json" \
         -d '{"text":"MPCIUM backup failed"}' \
         https://your-webhook-url.com/alert
fi

Buena práctica: prueba periódicamente tus procedimientos de backup y recuperación en un entorno de pruebas para asegurarte de que funcionen correctamente cuando los necesites.