Files
awoooi/docs/runbooks/disaster-recovery/DR-Harbor.md
OG T 43edff184d feat(dr): Sprint C — Host rsync 備份 + DR SOP 文件
C-1 Velero: 已確認運作中(daily-awoooi-prod schedule, 13d, MinIO Available)

C-2 Host rsync 備份:
  scripts/ops/backup-from-110.sh — 188 每日凌晨 1:00 rsync 備份 110
    - Harbor registry data(最高優先)
    - Gitea repos
    - bitan-pharmacy.git(若存在)
    - 成功寫入 /var/run/backup-110.last_success 供 Prometheus 監控
    - 失敗時 Telegram 告警
  ops/monitoring/alerts-unified.yml — 新增 HostBackupFailed 告警規則

C-3 DR SOP 文件:
  docs/runbooks/disaster-recovery/DR-K8s-awoooi.md  (<15分鐘)
  docs/runbooks/disaster-recovery/DR-Nginx.md        (<5分鐘)
  docs/runbooks/disaster-recovery/DR-Harbor.md       (<30分鐘)
  docs/runbooks/disaster-recovery/DR-Bitan.md        (<5分鐘)
  docs/runbooks/disaster-recovery/DR-Stock.md        (<5分鐘)

部署備份腳本說明 (需手動執行):
  scp scripts/ops/backup-from-110.sh ollama@192.168.0.188:~/bin/backup-from-110.sh
  ssh ollama@192.168.0.188 "chmod +x ~/bin/backup-from-110.sh && mkdir -p /backup/110/{harbor,gitea}"
  ssh ollama@192.168.0.188 "echo '0 1 * * * /home/ollama/bin/backup-from-110.sh' | crontab -"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 03:04:18 +08:00

1.9 KiB
Raw Blame History

DR-Harbor — Harbor Registry 資料毀損還原 SOP

目標時間: < 30 分鐘
觸發場景: Harbor 資料毀損、container image 消失,或 harbor-data volume 損壞
工具: rsync, docker compose
最後更新: 2026-04-11 (Claude Sonnet 4.6 Asia/Taipei)


前提確認

# 確認 188 上的 rsync 備份存在
ls -lh /backup/110/harbor/
# 期望:有檔案,最近修改時間 < 25 小時

# 確認最後備份時間
cat /var/run/backup-110.last_success | xargs -I{} date -d @{}

步驟 1停止 Harbor2 分鐘)

ssh wooo@192.168.0.110 "cd /opt/harbor && docker compose down"

步驟 2備份現有損壞資料1 分鐘)

ssh wooo@192.168.0.110 \
  "sudo mv /var/lib/docker/volumes/harbor_harbor-data \
           /var/lib/docker/volumes/harbor_harbor-data.bak.$(date +%Y%m%d)"

步驟 3從 188 rsync 備份還原到 11015 分鐘)

# 在 188 執行rsync 方向188 備份 → 110
rsync -avz \
  /backup/110/harbor/ \
  wooo@192.168.0.110:/var/lib/docker/volumes/harbor_harbor-data/_data/

步驟 4重啟 Harbor5 分鐘)

ssh wooo@192.168.0.110 "cd /opt/harbor && docker compose up -d"

# 等待 Harbor 就緒
for i in $(seq 1 12); do
  CODE=$(curl -s -o /dev/null -w '%{http_code}' http://192.168.0.110:5000 2>/dev/null)
  [ "$CODE" = "200" ] || [ "$CODE" = "301" ] && echo "✅ Harbor ready" && break
  echo "⏳ 等待 Harbor... ($i/12)"; sleep 10
done

步驟 5驗收

# 確認 images 存在
curl -s http://192.168.0.110:5000/v2/_catalog | python3 -m json.tool

# 驗證 CD pipeline 可 pull下一次部署自動驗證
docker pull 192.168.0.110:5000/awoooi/api:latest

預防

  • scripts/ops/backup-from-110.sh 每天凌晨 1:00 在 188 執行
  • 備份失敗時觸發 Telegram 告警
  • 若 rsync 備份超過 25 小時未更新Prometheus BackupFailed 告警觸發