chatbot.zuola.com 高可用機制

目前狀態:自動切換已啟用

Worker 是主站與備援站的獨立仲裁者,只保存切換狀態與失敗次數,不保存聊天內容。

正常運作

  1. 主站提供服務並執行 11:00、16:00 的 Telegram 聊天概況。
  2. 備援站每分鐘接收經完整性檢查的 SQLite 快照,但不執行背景排程。
  3. 只有取得唯一主站租約的一方能執行背景工作。
  4. Worker 每分鐘檢查兩站,結果記錄在 D1。

自動切換條件

切換順序

  1. D1 以原子更新鎖定切換。
  2. 提升備援站、停止其快照覆寫,再盡力降低原主站角色。
  3. 獨立仲裁者自動切換 DNS 和備援站。
  4. D1 記錄新主站並發送一次 Telegram 通知。

安全與復原

人工切回操作方法

  1. 確認原主站已修復並連續通過健康檢查,先不要改 DNS。
  2. 安排短暫維護時段,從目前服務中的備援站建立一致性快照,反向同步至原主站,並通過 SQLite 完整性檢查。
  3. 將原主站設為 primary,再把 D1 的 active_node 更新為 primary 並清除失敗計數;唯一租約會撤銷目前備援站的背景工作權。
  4. 把 chatbot.zuola.com DNS 指回原主站,確認網站、Webhook、11:00/16:00 排程與 Telegram 通知正常。
  5. 將另一台主機設回 standby,恢復由主站向備援站的單向快照同步,再結束維護。

注意:不可先切 DNS;必須先同步資料、驗證資料庫與唯一租約,避免遺失訊息或重複通知。

>

核心原則:單一仲裁狀態、單一背景工作主站、資料新鮮度門檻、原子切換、不自動切回。