多雲與負載均衡 DNS
當業務規模增長,單台服務器不夠用,就需要 DNS 層面的負載均衡和高可用架構。
DNS 負載均衡原理
多個 A 記錄指向不同服務器:
A example.com 192.0.2.1 (服務器 1)
A example.com 192.0.2.2 (服務器 2)
A example.com 192.0.2.3 (服務器 3)
DNS 循環返回(Round Robin):
用戶 1 的查詢 → 返回 192.0.2.1
用戶 2 的查詢 → 返回 192.0.2.2
用戶 3 的查詢 → 返回 192.0.2.3
用戶 4 的查詢 → 返回 192.0.2.1(循環)
優點: 簡單,不需要專用設備 缺點: 不感知服務器健康狀態(即使服務器宕機,仍可能被分配)
帶健康檢查的 DNS 負載均衡
更高級的 DNS 服務(Cloudflare、Route 53、NS1)支持健康檢查:
正常狀態:
A example.com 192.0.2.1 (健康 ✅)
A example.com 192.0.2.2 (健康 ✅)
服務器 1 宕機後:
DNS 服務商的健康檢查發現 192.0.2.1 無響應
自動從 DNS 響應中移除這條記錄
所有流量自動切換到 192.0.2.2
Cloudflare Load Balancing
費用: $5/月起(需要付費計劃)
路徑: Traffic → Load Balancing → Create Load Balancer
設置步驟: 1. 創建 Origin Pool(服務器組) 2. 為每個服務器設置健康檢查(HTTP/HTTPS 端點) 3. 創建 Load Balancer,指向 Origin Pool 4. 設置故障切換規則(當主要 Pool 不健康時,切換到備用 Pool)
AWS Route 53 路由策略
Route 53 提供多種路由策略:
| 策略 | 說明 | 用途 |
|---|---|---|
| Simple | 固定 IP | 單服務器 |
| Weighted | 按權重分配流量 | A/B 測試、灰度發布 |
| Failover | 主備切換 | 高可用 |
| Latency | 路由到延遲最低的區域 | 全球部署 |
| Geolocation | 按用戶地理位置路由 | 內容本地化 |
| Multivalue | 多個健康的 IP | 基礎負載均衡 |
Weighted Routing 用於灰度發布:
A example.com Weight=90 192.0.2.1 (舊版本,90% 流量)
A example.com Weight=10 192.0.2.2 (新版本,10% 流量)
驗證新版本沒問題後,逐步調整比例:
70/30 → 50/50 → 10/90 → 0/100
主備切換(Failover)
設置一個主服務器和一個備用服務器,主服務器宕機時自動切換:
Cloudflare 設置方法:
- 創建 Origin Pool 1(主):服務器 A
- 創建 Origin Pool 2(備):服務器 B 或靜態頁面
- Load Balancer 設置: - Priority 1:Pool 1(主) - Priority 2:Pool 2(備,只在主不健康時啟用)
最簡單的備用方案:
主服務器宕機時,顯示一個靜態的維護頁面(存放在 Cloudflare Pages 或 S3),而非直接報錯。
TTL 策略對切換速度的影響
| TTL 設置 | DNS 緩存時間 | 故障後恢復時間 |
|---|---|---|
| 86400(24h) | 最多 24 小時 | 很慢,不適合需要快速切換的場景 |
| 3600(1h) | 最多 1 小時 | 一般 |
| 300(5min) | 最多 5 分鐘 | 適合需要快速響應的服務 |
| 60(1min) | 最多 1 分鐘 | 接近實時切換 |
代價: TTL 越低,DNS 服務器收到的查詢越多(無法從緩存返回),對 DNS 服務器負載更高。
建議: - 生產環境穩定記錄:TTL = 3600 - 需要快速切換的記錄:TTL = 300 - 計劃維護前降低:TTL = 60
下一節:地理路由與多區域部署——讓全球用戶都連接到最近的服務器。