Sao lưu và khôi phục

MPCIUM cung cấp khả năng sao lưu và khôi phục mạnh mẽ để đảm bảo dữ liệu của cụm MPC phân tán được bảo vệ khỏi mất mát. Hệ thống sao lưu sử dụng chiến lược sao lưu gia tăng kết hợp mã hóa để lưu trữ và bảo vệ trạng thái cơ sở dữ liệu một cách hiệu quả, đồng thời giảm thiểu việc sử dụng tài nguyên.

Sao lưu gia tăng
Click to open the full-size diagram

Quan trọng: Luôn kiểm thử quy trình sao lưu và khôi phục trong môi trường không phải production trước khi triển khai chúng trên production.

Cấu hình sao lưu

MPCIUM hỗ trợ các cài đặt sao lưu có thể điều chỉnh trong file config.yaml:

Cấu hình sao lưu

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

Tham số cấu hình

backup_enabled (boolean)

Kiểm soát việc có thực hiện sao lưu tự động hay không. Đặt thành false để tắt hoàn toàn việc sao lưu.

backup_period_seconds (integer)

Xác định khoảng thời gian giữa các lần sao lưu tự động, tính bằng giây. Giá trị mặc định 300 giây (5 phút) mang lại sự cân bằng tốt giữa bảo vệ dữ liệu và hiệu năng hệ thống.

backup_dir (string)

Chỉ định thư mục lưu trữ các file sao lưu đã mã hóa. Hãy đảm bảo thư mục này có quyền truy cập phù hợp và đủ dung lượng đĩa.

Chiến lược sao lưu

MPCIUM triển khai chiến lược sao lưu gia tăng, chỉ lưu trữ những thay đổi kể từ lần sao lưu trước, giúp giảm dung lượng lưu trữ và thời gian sao lưu. Cách tiếp cận này đảm bảo mỗi bản sao lưu không trùng lặp với các bản trước đó, tiết kiệm đáng kể dung lượng lưu trữ và băng thông mạng trong khi vẫn bảo vệ dữ liệu đầy đủ.

Cấu trúc file sao lưu

Các file sao lưu được lưu trong thư mục sao lưu đã cấu hình với quy ước đặt tên như sau:

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

Định dạng file sao lưu

Mỗi file sao lưu chứa:

  • Các thay đổi gia tăng của cơ sở dữ liệu kể từ lần sao lưu trước (không phải bản sao đầy đủ)
  • Trạng thái cơ sở dữ liệu đã mã hóa bằng AES-256-GCM để bảo mật khi truyền tải và lưu trữ
  • Metadata bao gồm thời điểm tạo, tham số mã hóa và thông tin phiên bản
  • Chuỗi các bản cập nhật gia tăng có thể được tái dựng để khôi phục trạng thái đầy đủ của cơ sở dữ liệu

Ví dụ metadata sao lưu

{
  "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"
}

Bảo mật: Các file sao lưu được mã hóa bằng chính badger_password dùng để mã hóa cơ sở dữ liệu, đảm bảo dữ liệu sao lưu luôn an toàn khi truyền tải và lưu trữ. Cách tiếp cận gia tăng kết hợp với mã hóa mang lại cả hiệu quả về tài nguyên lẫn khả năng bảo vệ dữ liệu.

Quy trình khôi phục

Sử dụng mpcium-cli recover

Để khôi phục cơ sở dữ liệu MPCIUM từ các file sao lưu đã mã hóa, hãy dùng lệnh mpcium-cli recover:

Lệnh khôi phục

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

Quy trình khôi phục

  1. Dừng node MPCIUM để đảm bảo không có thao tác cơ sở dữ liệu nào đang diễn ra
  2. Chạy lệnh khôi phục với các tham số phù hợp
  3. Cập nhật cấu hình để trỏ tới cơ sở dữ liệu đã khôi phục
  4. Khởi động lại node với dữ liệu đã khôi phục
Khôi phục từ bản sao lưu

Ví dụ khôi phục

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

Tích hợp AWS S3

MPCIUM hỗ trợ AWS S3 để lưu trữ bản sao lưu trên cloud, mang lại khả năng dự phòng bổ sung và khôi phục sau thảm họa.

Thiết lập sao lưu S3

1. Tạo S3 bucket

Tạo S3 bucket

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

2. Cấu hình quyền S3

Hãy đảm bảo thông tin xác thực AWS của bạn có quyền phù hợp cho các thao tác S3:

Ví dụ chính sách 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/*"
      ]
    }
  ]
}

Thao tác sao lưu S3

Tải bản sao lưu cục bộ lên S3

Tải lên S3

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

Tải bản sao lưu từ S3 về

Tải về từ S3

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

Xác minh bản sao lưu S3

Xác minh nội dung 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

Sao lưu tự động

Thiết lập cron job

Thiết lập sao lưu S3 tự động bằng cron job để đảm bảo đồng bộ thường xuyên với kho lưu trữ cloud:

Cấu hình cron job

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

Ví dụ script sao lưu

Tạo một script sao lưu để tự động hóa quá trình đồng bộ S3:

Script sao lưu

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 xác minh

Tạo một script để xác minh tính toàn vẹn của bản sao lưu:

Script xác minh

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

Giám sát và cảnh báo

Thiết lập giám sát cho các quy trình sao lưu:

Thiết lập giám sát

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

Thực tiễn tốt nhất: Thường xuyên kiểm thử quy trình sao lưu và khôi phục trong môi trường thử nghiệm để đảm bảo chúng hoạt động đúng khi cần.