Skip to content
Skillv1.0.0

disaster-recovery

灾难恢复

by chaterm(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from chaterm/terminal-skills (backup/disaster-recovery/SKILL.md). Install upstream with npx skills add chaterm/terminal-skills --skill disaster-recovery. Copyright stays with the author.

灾难恢复

概述

灾难恢复计划、RTO/RPO、故障切换技能。

核心概念

RTO 与 RPO

RPO (Recovery Point Objective)
- 可接受的数据丢失量
- 决定备份频率

RTO (Recovery Time Objective)  
- 可接受的恢复时间
- 决定恢复策略

示例:
- RPO = 1小时 → 每小时备份
- RTO = 4小时 → 需要热备或快速恢复

恢复策略

冷备 (Cold)
- 最低成本
- 最长 RTO
- 适合非关键系统

温备 (Warm)
- 中等成本
- 中等 RTO
- 定期同步数据

热备 (Hot)
- 最高成本
- 最短 RTO
- 实时同步

数据库恢复

MySQL 恢复

# 从备份恢复
mysql -u root -p < full_backup.sql

# 应用 binlog
mysqlbinlog mysql-bin.000001 | mysql -u root -p

# 时间点恢复
mysqlbinlog --stop-datetime="2024-01-15 10:00:00" mysql-bin.* | mysql -u root -p

# 主从切换
# 在从库执行
STOP SLAVE;
RESET SLAVE ALL;
# 应用程序切换连接

PostgreSQL 恢复

# 从备份恢复
pg_restore -d database backup.dump

# PITR 恢复
# recovery.conf
restore_command = 'cp /archive/%f %p'
recovery_target_time = '2024-01-15 10:00:00'

# 主从切换
pg_ctl promote -D /var/lib/postgresql/data

Redis 恢复

# 从 RDB 恢复
cp backup.rdb /var/lib/redis/dump.rdb
systemctl restart redis

# 从 AOF 恢复
cp backup.aof /var/lib/redis/appendonly.aof
redis-check-aof --fix appendonly.aof
systemctl restart redis

系统恢复

文件系统恢复

# 从 tar 备份恢复
tar -xzvf /backup/system.tar.gz -C /

# 从 rsync 备份恢复
rsync -avz /backup/system/ /

# 恢复权限
restorecon -Rv /

引导修复

# 进入救援模式
# 挂载根分区
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

# 修复 GRUB
grub-install /dev/sda
update-grub

故障切换

Keepalived 切换

# 检查状态
systemctl status keepalived
ip addr show | grep -w inet

# 手动切换
# 降低主节点优先级
# /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    priority 50  # 降低
}
systemctl reload keepalived

DNS 切换

# 修改 DNS 记录
# 降低 TTL(提前)
# 切换 A 记录指向备用 IP

# 验证
dig +short example.com
nslookup example.com

常见场景

场景 1:完整恢复流程

#!/bin/bash
# 1. 评估损失
echo "检查系统状态..."

# 2. 通知相关人员
# send_alert "开始灾难恢复"

# 3. 恢复基础设施
echo "恢复网络配置..."

# 4. 恢复数据
echo "恢复数据库..."
mysql -u root -p < /backup/latest.sql

# 5. 恢复应用
echo "启动应用服务..."
systemctl start application

# 6. 验证
echo "验证服务状态..."
curl -s http://localhost/health

# 7. 通知恢复完成
# send_alert "灾难恢复完成"

场景 2:DR 演练

#!/bin/bash
# DR 演练脚本
LOG="/var/log/dr-drill.log"

echo "$(date): 开始 DR 演练" >> $LOG

# 1. 切换到备用站点
echo "切换 DNS..." >> $LOG

# 2. 验证服务
echo "验证服务可用性..." >> $LOG
curl -s http://dr-site/health >> $LOG

# 3. 测试数据一致性
echo "验证数据一致性..." >> $LOG

# 4. 记录 RTO
echo "实际 RTO: $(计算时间)" >> $LOG

# 5. 切回主站点
echo "切回主站点..." >> $LOG

场景 3:自动故障转移

# Keepalived 配置
vrrp_script chk_app {
    script "/usr/local/bin/check_app.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    
    track_script {
        chk_app
    }
    
    virtual_ipaddress {
        192.168.1.100
    }
}

DR 检查清单

项目 检查内容
备份 备份完整性、可恢复性
文档 恢复步骤、联系人
网络 DNS、IP、防火墙
数据 数据一致性、同步状态
应用 配置、依赖、证书

故障排查

# 检查备份状态
ls -la /backup/
md5sum /backup/latest.tar.gz

# 检查复制状态
# MySQL
SHOW SLAVE STATUS\G

# PostgreSQL
SELECT * FROM pg_stat_replication;

# 检查网络连通性
ping dr-site
traceroute dr-site

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/chaterm-terminal-skills-disaster-recovery/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

chaterm-terminal-skills-disaster-recovery.ocm.jsonjson
{
  "ocm": "1",
  "id": "chaterm-terminal-skills-disaster-recovery",
  "kind": "skill",
  "name": "disaster-recovery",
  "description": "灾难恢复",
  "publisher": "chaterm",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "general"
    ],
    "tags": [
      "skill-md",
      "backup",
      "disaster-recovery",
      "rto",
      "rpo",
      "failover",
      "ha",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "灾难恢复"
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/chaterm/terminal-skills",
      "path": "backup/disaster-recovery/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/chaterm/terminal-skills/blob/HEAD/backup/disaster-recovery/SKILL.md",
      "key": "chaterm/terminal-skills/backup/disaster-recovery/SKILL.md"
    }
  },
  "instructions": "# 灾难恢复\n\n## 概述\n灾难恢复计划、RTO/RPO、故障切换技能。\n\n## 核心概念\n\n### RTO 与 RPO\n```\nRPO (Recovery Point Objective)\n- 可接受的数据丢失量\n- 决定备份频率\n\nRTO (Recovery Time Objective)  \n- 可接受的恢复时间\n- 决定恢复策略\n\n示例:\n- RPO = 1小时 → 每小时备份\n- RTO = 4小时 → 需要热备或快速恢复\n```\n\n### 恢复策略\n```\n冷备 (Cold)\n- 最低成本\n- 最长 RTO\n- 适合非关键系统\n\n温备 (Warm)\n- 中等成本\n- 中等 RTO\n- 定期同步数据\n\n热备 (Hot)\n- 最高成本\n- 最短 RTO\n- 实时同步\n```\n\n## 数据库恢复\n\n### MySQL 恢复\n```bash\n# 从备份恢复\nmysql -u root -p < full_backup.sql\n\n# 应用 binlog\nmysqlbinlog mysql-bin.000001 | mysql -u root -p\n\n# 时间点恢复\nmysqlbinlog --stop-datetime=\"2024-01-15 10:00:00\" mysql-bin.* | mysql -u root -p\n\n# 主从切换\n# 在从库执行\nSTOP SLAVE;\n",
  "cost": {
    "context_tokens": 794
  }
}

Fetch it by URL: GET /api/v1/registry/chaterm-terminal-skills-disaster-recovery/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.