chatbot.zuola.com 高可用機制
目前狀態:自動切換已啟用
Worker 是主站與備援站的獨立仲裁者,只保存切換狀態與失敗次數,不保存聊天內容。
正常運作
- 主站提供服務並執行 11:00、16:00 的 Telegram 聊天概況。
- 備援站每分鐘接收經完整性檢查的 SQLite 快照,但不執行背景排程。
- 只有取得唯一主站租約的一方能執行背景工作。
- Worker 每分鐘檢查兩站,結果記錄在 D1。
自動切換條件
- 主站連續 5 次檢查失敗(約 5 分鐘)。
- 備援站健康,資料快照不超過 180 秒。
- D1 無其他切換進行中,且自動切換已啟用。
切換順序
- D1 以原子更新鎖定切換。
- 提升備援站、停止其快照覆寫,再盡力降低原主站角色。
- 獨立仲裁者自動切換 DNS 和備援站。
- D1 記錄新主站並發送一次 Telegram 通知。
安全與復原
- 控制介面需要加密 Secret;本頁不顯示任何密鑰。
- 切換後不自動切回,避免反覆切換。
人工切回操作方法
- 確認原主站已修復並連續通過健康檢查,先不要改 DNS。
- 安排短暫維護時段,從目前服務中的備援站建立一致性快照,反向同步至原主站,並通過 SQLite 完整性檢查。
- 將原主站設為 primary,再把 D1 的 active_node 更新為 primary 並清除失敗計數;唯一租約會撤銷目前備援站的背景工作權。
- 把 chatbot.zuola.com DNS 指回原主站,確認網站、Webhook、11:00/16:00 排程與 Telegram 通知正常。
- 將另一台主機設回 standby,恢復由主站向備援站的單向快照同步,再結束維護。
注意:不可先切 DNS;必須先同步資料、驗證資料庫與唯一租約,避免遺失訊息或重複通知。
>核心原則:單一仲裁狀態、單一背景工作主站、資料新鮮度門檻、原子切換、不自動切回。