disaster-recovery
8
总安装量
4
周安装量
#35024
全站排名
安装命令
npx skills add https://github.com/chaterm/terminal-skills --skill disaster-recovery
Agent 安装分布
claude-code
4
opencode
3
windsurf
2
codex
2
github-copilot
2
antigravity
2
Skill 文档
ç¾é¾æ¢å¤
æ¦è¿°
ç¾é¾æ¢å¤è®¡åã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