Skip to main content

backup-recovery

Backup and disaster recovery planning and implementation for enterprise systems

معلومات المصدر

المستودع
ffsshhttiikk/opencode-agents-skills
آخر نشاط في المصدر
٢٨ فبراير ٢٠٢٦ في ٢٢:٥٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣
التفرعات
٢

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
backup-recovery
description
Backup and disaster recovery planning and implementation for enterprise systems
license
MIT
compatibility
opencode
metadata
{"audience":"system-administrators","category":"systems-administration"}
## What I do - Design backup strategies and policies - Implement backup solutions (Veeam, Bacula, rsync, Restic) - Create disaster recovery plans - Test backup restores regularly - Manage replication and snapshots - Coordinate failover procedures - Document recovery procedures - Optimize backup windows - Implement backup encryption - Monitor backup success and integrity ## When to use me When designing backup strategies, implementing disaster recovery procedures, or troubleshooting backup failures. ## Core Concepts - Backup types (full, incremental, differential) - RPO (Recovery Point Objective) and RTO (Recovery Time Objective) - Backup media and storage strategies - Replication and failover clustering - Snapshot management - Backup encryption and security - Disaster recovery testing - Cloud backup solutions - Database backup strategies - Bare-metal recovery procedures ## Code Examples ### Backup Scripts ```bash #!/bin/bash set -euo pipefail # Configuration readonly BACKUP_BASE="/backup" readonly RETENTION_DAYS=30 readonly ENCRYPTION_KEY_FILE="/etc/backup/encryption.key" readonly LOG_FILE="/var/log/backup.log" readonly NOTIFICATION_EMAIL="admin@example.com" # Logging log() { local level="$1" shift local message="$@" echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message" | tee -a "$LOG_FILE" } log "INFO" "=== Backup started ===" # Database backup function backup_database() { local db_type="$1" local db_host="$2" local db_name="$3" local backup_path="$4" local timestamp=$(date +%Y%m%d_%H%M%S) log "INFO" "Backing up database: $db_name" case "$db_type" in postgresql) local backup_file="${backup_path}/${db_name}_${timestamp}.sql.gz.enc" # Create backup with compression and encryption PGPASSWORD="${DB_PASSWORD}" pg_dump -h "$db_host" -U "${DB_USER}" "$db_name" | \ gzip | \ openssl enc -aes-256-cbc -salt -pbkdf2 \ -pass file:"$ENCRYPTION_KEY_FILE" \ -out "$backup_file" # Verify backup if openssl enc -d -aes-256-cbc -pbkdf2 \ -pass file:"$ENCRYPTION_KEY_FILE" \ -in "$backup_file" | gzip -d > /dev/null; then local size=$(du -h "$backup_file" | cut -f1) log "INFO" "Backup verified: $backup_file ($size)" # Calculate checksum sha256sum "$backup_file" > "${backup_file}.sha256" log "INFO" "Checksum created for $backup_file" else log "ERROR" "Backup verification failed for $db_name" return 1 fi ;; mysql) local backup_file="${backup_path}/${db_name}_${timestamp}.sql.gz.enc" mysqldump -h "$db_host" -u "${DB_USER}" -p"${DB_PASSWORD}" \ --single-transaction --quick "$ \ gzip |db_name" | \ openssl enc -aes-256-cbc -salt -pbkdf2 \ -pass file:"$ENCRYPTION_KEY_FILE" \ -out "$backup_file" ;; esac # Set permissions chmod 600 "$backup_file" } # File system backup with rsync backup_filesystem() { local source_path="$1" local dest_path="$2" local backup_name="$3" local timestamp=$(date +%Y%m%d_%H%M%S) log "INFO" "Backing up filesystem: $source_path" # Create directory structure mkdir -p "${dest_path}/${backup_name}/${timestamp}" # Perform rsync backup with hard links for efficiency rsync -av --delete \ --link-dest="${dest_path}/${backup_name}/current" \ "$source_path/" \ "${dest_path}/${backup_name}/${timestamp}/" # Update current symlink rm -f "${dest_path}/${backup_name}/current" ln -s "${dest_path}/${backup_name}/${timestamp}" "${dest_path}/${backup_name}/current" log "INFO" "Filesystem backup completed: ${dest_path}/${backup_name}/${timestamp}" } # Kubernetes backup with Velero backup_kubernetes() { local backup_name="$1" local included_namespaces="${2:-*}" local excluded_namespaces="${3:-kube-system,kube-public}" log "INFO" "Creating Kubernetes backup: $backup_name" # Create Velero backup velero backup create "$backup_name" \ --include-namespaces "$included_namespaces" \ --exclude-namespaces "$excluded_namespaces" \ --snapshot-volumes \ --wait # Verify backup status velero backup describe "$backup_name" --details velero backup logs "$backup_name" | tail -20 } # Retention policy enforcement enforce_retention() { local backup_path="$1" local max_age_days="${2:-$RETENTION_DAYS}" log "INFO" "Enforcing retention policy (${max_age_days} days)" # Find and remove old backups local deleted=0 while IFS= read -r -d '' backup; do rm -rf "$backup" ((deleted++)) log "INFO" "Removed old backup: $backup" done < <(find "$backup_path" -maxdepth 1 -type d -name "??????_??_??_??_??_??" -mtime +$max_age_days -print0) log "INFO" "Removed $deleted old backup directories" } # Health check backup_health_check() { log "INFO" "Running backup health check" local checks_passed=0 local checks_failed=0 # Check backup directory exists if [ -d "$BACKUP_BASE" ]; then log "INFO" "Backup directory exists: $BACKUP_BASE" ((checks_passed++)) else log "ERROR" "Backup directory missing: $BACKUP_BASE" ((checks_failed++)) fi # Check latest backup age local latest_backup=$(find "$BACKUP_BASE" -maxdepth 2 -type d -name "??????_??_??_??_??_??" -printf '%T+ %p\n' 2>/dev/null | sort -r | head -1 | cut -d' ' -f2-) if [ -n "$latest_backup" ]; then local backup_age=$(find "$latest_backup" -maxdepth 1 -type f -printf '%T+\n' 2>/dev/null | head -1) log "INFO" "Latest backup: $backup_name ($backup_age)" ((checks_passed++)) else log "ERROR" "No backups found" ((checks_failed++)) fi # Check encryption key exists if [ -f "$ENCRYPTION_KEY_FILE" ]; then ((checks_passed++)) else log "ERROR" "Encryption key missing" ((checks_failed++)) fi # Summary log "INFO" "Health check: $checks_passed passed, $checks_failed failed" if [ $checks_failed -gt 0 ]; then echo "Backup health check FAILED" | mail -s "Backup Alert" "$NOTIFICATION_EMAIL" return 1 fi } # Main execution main() { local action="${1:-all}" case "$action" in database) backup_database "postgresql" "db.example.com" "app_production" "/backup/databases" ;; filesystem) backup_filesystem "/var/www" "/backup/filesystems" "www" ;; kubernetes) backup_kubernetes "daily-$(date +%Y%m%d)" ;; retention) enforce_retention "/backup" ;; health) backup_health_check ;; all|*) backup_database "postgresql" "db.example.com" "app_production" "/backup/databases" backup_filesystem "/var/www" "/backup/filesystems" "www" backup_kubernetes "daily-$(date +%Y%m%d)" enforce_retention "/backup" backup_health_check ;; esac log "INFO" "=== Backup completed ===" } main "$@" ``` ### Disaster Recovery Plan ```markdown # Disaster Recovery Plan ## Executive Summary - **RPO**: 4 hours (max data loss) - **RTO**: 8 hours (max downtime) - **Recovery Sites**: Primary (AWS us-east-1), DR (AWS us-west-2) ## Critical Systems | System | RTO | RPO | Priority | |--------|-----|-----|----------| | Database | 2h | 15min | P0 | | Application | 4h | 1h | P1 | | File Storage | 8h | 4h | P2 | ## Recovery Procedures ### 1. Database Recovery (PostgreSQL) ```bash #!/bin/bash # Emergency DB recovery script # Variables BACKUP_PATH="/dr-backup/postgresql" LATEST_BACKUP=$(ls -td "$BACKUP_PATH"/*/ | head -1) TARGET_HOST="dr-db.example.com" # Stop application kubectl scale deployment/app --replicas=0 -n production # Restore database ssh "$TARGET_HOST" "sudo systemctl stop postgresql" scp "$LATEST_BACKUP"/*.enc "$TARGET_HOST:/tmp/" ssh "$TARGET_HOST" " cd /tmp for file in *.enc; do openssl enc -d -aes-256-cbc -pbkdf2 \ -pass file:/etc/backup/encryption.key \ -in \"\$file\" -out \"\${file%.enc}\" 2>/dev/null || true done find /tmp -name '*.sql' -exec psql -U postgres -d app_production {} \; " ssh "$TARGET_HOST" "sudo systemctl start postgresql" # Verify psql -h "$TARGET_HOST" -U postgres -d app_production -c \"SELECT COUNT(*) FROM users;\" ``` ### 2. Application Recovery ```bash #!/bin/bash # Emergency application recovery # Update kubeconfig to DR cluster export KUBECONFIG=/etc/kubernetes/dr-kubeconfig # Verify cluster health kubectl get nodes kubectl get pods -n production # Restore ConfigMaps and Secrets kubectl apply -f /dr-backup/k8s/configmaps/ kubectl apply -f /dr-backup/k8s/secrets/ # Deploy applications kubectl apply -f /dr-backup/k8s/deployments/ # Scale up kubectl scale deployment/app --replicas=3 -n production # Verify kubectl rollout status deployment/app -n production kubectl get svc -n production ``` ### 3. DNS Failover ```bash #!/bin/bash # Update DNS for failover # Get DR site IPs DR_LB=$(aws elb describe-load-balancers \ --load-balancer-names app-dr \ --query 'LoadBalancers[0].DNSName' \ --output text) # Update Route53 aws route53 change-resource-record-sets \ --hosted-zone-id ZXXXXXXXXXXXXX \ --change-batch file://<(cat <<EOF { "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "app.example.com", "Type": "CNAME", "TTL": 60, "ResourceRecords": [{ "Value": "$DR_LB" }] } }] } EOF ) echo "DNS updated to point to DR site" ``` ## Testing Schedule - **Weekly**: Backup verification - **Monthly**: Database restore test - **Quarterly**: Full DR simulation ## Contacts | Role | Name | Phone | Email | |------|------|-------|-------| | DR Coordinator | John Smith | +1-555-0100 | john.smith@example.com | | DBA | Jane Doe | +1-555-0101 | jane.doe@example.com | ``` ## Best Practices - Follow 3-2-1 backup rule: 3 copies, 2 media types, 1 offsite
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub