🛡 Mail Platform Disaster Recovery Drill Runbook

(Mailcow Multi‑Node Architecture)


1️⃣ 文件目的

本文件定義公司郵件平台(Mailcow 架構)的:

  • 災難復原流程
  • 定期演習標準
  • 目標恢復時間(RTO)
  • 操作步驟
  • 成功驗證標準

目標:

✅ 任何受訓工程師可在 45–60 分鐘內重建一台 mailcow 節點


2️⃣ 系統架構概覽

2.1 架構摘要

  • 4–5 台 Email Gateway(按 domain 分流)
  • 多台獨立 Mailcow Server
  • S3 Object Storage Snapshot 備份
  • Restic Snapshot
  • Rsync 冗餘備份
  • DB 同步機制

2.2 設計原則

  • Domain Sharding(每個 domain 固定歸屬)
  • 無 Shared Storage
  • 無跨節點強依賴
  • 可獨立重建

3️⃣ Recovery 目標定義

指標目標
RTO≤ 60 分鐘
RPO≤ 5 分鐘
MTTR每季統計

4️⃣ 演習類型分類


✅ Level 1:單節點完全損毀(每月)

模擬:

mailcow-3 完全不可用

目標:

  • 在新 VM 上重建 mailcow
  • 恢復資料
  • Gateway 切換
  • 完成收發測試

✅ Level 2:Gateway 故障(每季度)

模擬:

gateway-2 關閉

測試:

  • MX fallback
  • Queue retention
  • 是否有 mail drop

✅ Level 3:無預警 Chaos Drill(半年)

  • 隨機關閉一台 mailcow
  • 不通知工程師
  • 記錄反應時間

5️⃣ Level 1 演習完整流程(標準版)

以下為「單 mailcow 節點完全重建」標準操作流程。


✅ Step 1:宣告演習開始

  • 指定演習節點
  • 指定計時開始
  • 指定負責工程師
  • 指定觀察員

開始計時。


✅ Step 2:模擬節點失效

操作:

  • 關閉 VM
  • Block network

確認:

  • 無法 SSH
  • Gateway 出現 delivery defer

✅ Step 3:建立新 VM

標準規格:

  • CPU: ___
  • RAM: ___
  • Disk: ___
  • OS: Ubuntu ___

驗證:

ssh 正常

✅ Step 4:基礎環境準備

apt update
apt install docker docker-compose

Clone mailcow:

git clone https://github.com/mailcow/mailcow-dockerized

✅ Step 5:還原資料

5.1 還原 mail data volume

使用 restic:

restic restore latest --target /restore

或使用 S3 snapshot:

aws s3 sync ...

將:

/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data

恢復。


5.2 還原資料庫

方式:

  • restore SQL dump
  • 啟用 DB replication

確認:

mysql -u root -p
show databases;

✅ Step 6:啟動 mailcow

docker-compose up -d

確認:

docker ps

所有 container 正常。


✅ Step 7:健康檢查

檢查:

  • Postfix
  • Dovecot
  • Rspamd
  • Nginx

測試:

✅ IMAP login
✅ SMTP auth
✅ Webmail
✅ 外部寄信


✅ Step 8:Gateway 切換

在 gateway:

  • 更新 routing IP
  • 修改 upstream

Reload postfix。


✅ Step 9:功能驗證

發送測試信:

  • 外部 → 內部
  • 內部 → Gmail
  • 內部 → 同 server

確認:

  • 無 queue 堆積
  • DKIM 正常
  • SPF pass
  • TLS 正常

✅ Step 10:記錄時間

記錄:

  • 開始時間
  • 完成時間
  • 卡住時間點
  • 改進建議

停止計時。


6️⃣ 演習後檢討會議

每次演習必須:

  • 討論瓶頸
  • 是否文件不清晰
  • 是否需要自動化
  • 是否某步驟過慢

7️⃣ 自動化改進方向

✅ 建立:

  • 一鍵 restore script
  • 基礎 VM provisioning script
  • 自動 DB restore
  • 自動 health check script

目標:

人只需要輸入 domain 名稱
系統自動完成 80% 重建


8️⃣ 成功標準

演習成功必須符合:

  • 60 分鐘內恢復
  • 無資料遺失
  • 收發正常
  • 用戶無感

9️⃣ 進階目標(未來)

  • Immutable mailcow node
  • Blue/Green 切換
  • 完全自動 rebuild
  • 15 分鐘 RTO

🔟 核心文化

可靠性 ≠ 有備份
可靠性 = 定期還原


✅ 最終目標

當新人加入公司:

  • 給他這份文件
  • 不協助
  • 他能 45–60 分鐘內完成

你嘅郵件平台就真正成熟。