fix(infra): 根治 Harbor Exited(128) Race Condition + harbor-watchdog 常駐自愈
問題根因: awoooi-startup-110.sh 在 Harbor 啟動時,第一次 compose up -d 會同時 啟動所有容器。harbor-core/db/portal 嘗試連 syslog:1514(harbor-log 未就緒), 失敗後 exit(128),restart:always 重試直到 backoff 放棄。 即使後來 harbor-log healthy,其他容器已不再重試。 修復 1 — startup-110.sh Harbor 時序(4 Phase 策略): Phase 1: 清除所有 Exited Harbor 容器(打破 backoff 死鎖) Phase 2: 只啟動 harbor-log Phase 3: 等 harbor-log healthy(最多 90s) Phase 4: 啟動全組件 修復 2 — harbor-watchdog.service(常駐自愈): Type=simple 常駐進程,每 60s 輪詢 http://127.0.0.1:5000/v2/ 不健康 → 等 5s 再確認 → 執行 Phase 1-4 完整修復 修復重開機時序問題無法覆蓋的「運行中崩潰」場景 Bug Fix:curl -f 會把 HTTP 401 視為失敗(exit 22), Harbor /v2/ 正常回傳 401(需認證),改用 curl -s 不加 -f REBOOT-RECOVERY-SOP.md → v5.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# AWOOOI 重開機恢復 SOP
|
||||
|
||||
> **版本**: v4.0
|
||||
> **版本**: v5.0
|
||||
> **最後更新**: 2026-04-05 下午 (台北時間)
|
||||
> **更新者**: Claude Code (首席架構師)
|
||||
> **觸發事件**: Prometheus 規則統一部署 + Sentry 啟動自動化 + Sentry 損壞修復 SOP + 全系統自愈閉環
|
||||
> **觸發事件**: Harbor Exited(128) Race Condition 根治 + harbor-watchdog 常駐自愈
|
||||
|
||||
---
|
||||
|
||||
@@ -122,15 +122,36 @@ Git push → Gitea(110:3001)
|
||||
|
||||
### 已部署 (2026-04-05)
|
||||
|
||||
| 主機 | 腳本 | 部署位置 | systemd service | 狀態 |
|
||||
|------|------|---------|----------------|------|
|
||||
| **188** | `awoooi-startup.sh` | `/usr/local/bin/` | `awoooi-startup.service` | ✅ enabled |
|
||||
| **110** | `awoooi-startup-110.sh` | `/usr/local/bin/` | `awoooi-startup-110.service` | ✅ enabled |
|
||||
| **120** | K3s 原生 | 系統內建 | `k3s.service` | ✅ enabled |
|
||||
| **121** | K3s 原生 | 系統內建 | `k3s-agent.service` | ✅ enabled |
|
||||
| 主機 | 腳本 | 部署位置 | systemd service | 狀態 | 類型 |
|
||||
|------|------|---------|----------------|------|------|
|
||||
| **188** | `awoooi-startup.sh` | `/usr/local/bin/` | `awoooi-startup.service` | ✅ enabled | 重開機 oneshot |
|
||||
| **110** | `awoooi-startup-110.sh` | `/usr/local/bin/` | `awoooi-startup-110.service` | ✅ enabled | 重開機 oneshot |
|
||||
| **110** | `harbor-watchdog.sh` | `/usr/local/bin/` | `harbor-watchdog.service` | ✅ active | **常駐 watchdog** |
|
||||
| **120** | K3s 原生 | 系統內建 | `k3s.service` | ✅ enabled | 系統服務 |
|
||||
| **121** | K3s 原生 | 系統內建 | `k3s-agent.service` | ✅ enabled | 系統服務 |
|
||||
|
||||
**本地原始碼**: `scripts/reboot-recovery/`
|
||||
|
||||
### harbor-watchdog(2026-04-05 新增)
|
||||
|
||||
**問題背景**: Harbor 的 Exited (128) Race Condition
|
||||
- `restart: always` 在 harbor-log 未就緒時不斷重試,最終進入 backoff 放棄
|
||||
- 即使 harbor-log 後來 healthy,其他容器不會自動重試
|
||||
- 只靠 startup 腳本無法處理**運行中崩潰**的情況
|
||||
|
||||
**設計**:
|
||||
- `Type=simple` 常駐進程(不是 oneshot),systemd 永久監控
|
||||
- 每 60 秒輪詢 `http://127.0.0.1:5000/v2/`(401 = healthy)
|
||||
- 偵測到不健康 → 等 5 秒再確認(避免誤報)→ 執行完整時序修復
|
||||
- 修復邏輯:清除 Exited 容器 → 只啟動 harbor-log → 等 healthy → 啟動全部
|
||||
|
||||
**查看狀態**:
|
||||
```bash
|
||||
journalctl -u harbor-watchdog.service -f # 即時 log
|
||||
systemctl status harbor-watchdog.service # 服務狀態
|
||||
cat /var/log/harbor-watchdog.log # 持久化 log
|
||||
```
|
||||
|
||||
### 各腳本覆蓋清單
|
||||
|
||||
**188 (7 步驟)**:
|
||||
@@ -142,14 +163,15 @@ Git push → Gitea(110:3001)
|
||||
- Nginx 啟動
|
||||
- SignOz + MinIO + aiops-network + OpenClaw
|
||||
|
||||
**110 (7 步驟)**:
|
||||
**110 (7 步驟 + harbor-watchdog 常駐)**:
|
||||
- Docker BoltDB 損壞偵測與修復
|
||||
- 孤兒容器清除 (Exited 128)
|
||||
- Harbor (harbor-log healthy 後啟動全組件)
|
||||
- Harbor(harbor-log first 策略:Phase 1 清除 → Phase 2 只啟 harbor-log → Phase 3 等 healthy → Phase 4 啟全部)
|
||||
- Gitea + Langfuse + Monitoring (含 Alertmanager 健康驗證)
|
||||
- SignOz
|
||||
- **Gitea Act Runner** (自動清除過期 .runner 配置)
|
||||
- **Sentry** (/opt/sentry,含 PostgreSQL WAL + Redis RDB 損壞自動修復)
|
||||
- **harbor-watchdog.service** (常駐,每 60s 自動修復)
|
||||
|
||||
---
|
||||
|
||||
@@ -593,3 +615,4 @@ echo "=== 結果: ${PASS} 通過, ${FAIL} 失敗 ==="
|
||||
| v2.0 | 2026-04-05 上午 | 188 啟動腳本 + 110 啟動腳本 + Harbor race condition 修復 |
|
||||
| v3.0 | 2026-04-05 下午 | 完整架構重盤 + Gitea Runner 自動化 + 告警鏈路根因修復 + NetworkPolicy 修正 |
|
||||
| v4.0 | 2026-04-05 下午 | Prometheus 規則統一部署 (28條) + Sentry startup (Step 7) + Sentry損壞修復SOP + 規則未部署診斷樹 + E2E腳本加入Sentry/Prometheus驗證 |
|
||||
| v5.0 | 2026-04-05 下午 | Harbor Exited(128) Race Condition 根治:startup-110.sh 改用 harbor-log first 策略 + 新增 harbor-watchdog.service 常駐自愈(curl -f bug 修正)|
|
||||
|
||||
Reference in New Issue
Block a user