Keepalived + NGINX 高可用負載平衡架構實作手冊
一:方案概述
- 目標:建構一個具備自動故障切換能力的 L4/L7 負載平衡系統
- 工具:
- NGINX Open Source:提供 HTTP/TCP 負載平衡能力
- Keepalived:利用 VRRP 協定達成主備節點的自動切換
- 適用情境:
- 中小型內網服務
- 私有雲、API Gateway 前端
- 無需購買 F5 等昂貴設備但又需穩定性的場域
二:系統架構圖
- 包含:
- 用戶端 → VIP
- 主節點(Primary NGINX + Keepalived)
- 備節點(Backup NGINX + Keepalived)
- 後端伺服器群
- VIP(虛擬 IP)會在主機與備機之間切換,提供單一進入點
三:Keepalived 自動切換的原理說明
-
基於 VRRP 協定
- 主節點定時透過 LAN 廣播「我還在」的訊號(advertisement)
- 備節點監聽這些訊號
-
當主節點:
-
拔掉網路線
-
NGINX 異常並被
track_script
偵測 -
關機、系統異常
-
停止 keepalived
→ 備節點會在 3 秒內自動判斷主節點已失效,搶下 VIP
-
-
備節點會發送 gratuitous ARP 更新網段,客戶端會自動連到新的 VIP 位置
四:完整安裝與設定流程
✅ 1. 安裝元件(兩台都要)
sudo apt update
sudo apt install -y nginx keepalived
✅ 2. NGINX 設定範例(兩台相同)
upstream backend {
server 192.168.0.21;
server 192.168.0.22;
}
server {
listen 80;
location / {
proxy_pass <http://backend>;
}
}
✅ 3. Keepalived 設定(主 + 備)
主機:/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_nginx
}
}
備機:將 state
改為 BACKUP
、priority
調低,例如 90
五:NGINX 健康監控腳本(防止 NGINX 掛掉仍持有 VIP)
/etc/keepalived/check_nginx.sh
#!/bin/bash
curl -sf <http://localhost/> > /dev/null || exit 1
exit 0
加權腳本配置(加入於主備機 keepalived.conf
)
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
fall 2
rise 1
}
六:故障模擬與驗證
- 拔掉主機網路線 → VIP 轉移至備機
- 停止 nginx → VIP 被搶走
- 恢復主機 → VIP 是否搶回依
nopreempt
設定而定 - 使用
ip a
確認 VIP 是否切換 - 使用
journalctl -u keepalived
查看日誌紀錄
留言
張貼留言