一、高可用集群基礎
核心概念與指標
集群類型:
- LB(負載均衡):如 LVS、HAProxy、Nginx,提升吞吐量;
- HA(高可用):保障核心服務(數據庫、Redis)連續性;
- SPoF(單點故障):需通過冗余設計消除的風險點。
可用性指標:
- 計算公式:
A = MTBF / (MTBF + MTTR)
(MTBF 為平均無故障時間,MTTR 為平均修復時間); - 常見標準:99.9%(年停機≤8.76 小時)、99.99%(≤52.56 分鐘)、99.999%(≤5.26 分鐘)。
- 計算公式:
故障應對思路:
- 縮短 MTTR(故障恢復時間);
- 冗余機制:主備(active/passive)或雙主(active/active)模式。
二、VRRP 協議與 Keepalived
VRRP 核心機制
- 作用:將多節點虛擬為單一 "虛擬路由器",解決網關單點故障;
- 關鍵術語:
- VRID(0-255):虛擬路由器唯一標識;
- VIP(虛擬 IP):對外服務的 IP;
- 角色:master(主節點,提供服務)、backup(備節點,待機接管);
- 優先級:決定主備切換的權重(0-255)。
- 工作方式:主節點廣播心跳,備節點監聽,故障時自動切換。
Keepalived 功能
- VRRP 協議的軟件實現,核心功能包括:
- VIP 地址漂移管理;
- 后端服務器健康檢查;
- 自動生成 IPVS 負載均衡規則;
- 支持 Nginx、HAProxy 等高可用切換。
三、實戰部署
環境與基礎配置
節點信息:
主機名 IP 地址 角色 KA1 172.25.254.50 Keepalived 主節點 KA2 172.25.254.60 Keepalived 備節點 rs11/22 172.25.254.10/20 后端 Web 服務器 部署步驟:
- 后端服務器安裝 httpd 并啟動;
- KA1/KA2 安裝 Keepalived:
dnf install keepalived -y
; - 配置主節點(KA1):設置 MASTER 角色、VRID、優先級及 VIP;
- 配置備節點(KA2):角色設為 BACKUP,優先級低于主節點;
- 啟動服務:
systemctl enable --now keepalived
。
四、Keepalived 實戰部署:從單主到雙主
4.1 環境準備
本次實戰涉及 4 臺主機,網絡配置如下:
主機名 | IP 地址 | 角色 |
---|---|---|
KA1 | 172.25.254.50 | Keepalived 主節點 |
KA2 | 172.25.254.60 | Keepalived 備節點 |
rs11 | 172.25.254.10 | 后端 Web 服務器(httpd) |
rs22 | 172.25.254.20 | 后端 Web 服務器(httpd) |
4.2 基礎部署步驟
部署后端服務:在 rs11 和 rs22 安裝 httpd 并啟動:
bash
dnf install httpd -y systemctl enable --now httpd
安裝 Keepalived:在 KA1 和 KA2 執行:
bash
dnf install keepalived -y
配置主節點(KA1):編輯
/etc/keepalived/keepalived.conf
:conf
global_defs {notification_email { 3036573531@qq.com } # 通知郵箱notification_email_from 3036573431@qq.comsmtp_server 127.0.0.1router_id LVS_DEVEL # 節點標識 }# 健康檢查腳本(以HAProxy為例) vrrp_script CHECK_HAPROXY {script "/etc/keepalived/scripts/haproxy.sh" # 檢查腳本路徑interval 1 # 檢查間隔(秒)weight -30 # 檢查失敗時優先級降低值fall 2 # 連續失敗次數閾值rise 2 # 恢復成功次數閾值 }vrrp_instance WEB_VIP {state MASTER # 角色:主節點interface eth0 # 綁定網卡virtual_router_id 51 # VRID(需與備節點一致)priority 100 # 優先級(高于備節點)advert_int 1 # 心跳間隔(秒)authentication {auth_type PASS # 認證方式auth_pass 1111 # 認證密碼}track_script { CHECK_HAPROXY } # 關聯健康檢查virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0 # VIP配置} }
配置備節點(KA2):與主節點類似,僅需修改
state BACKUP
和priority 80
。啟動服務:
bash
systemctl enable --now keepalived.service
4.3 核心功能配置
日志分離:通過修改啟動參數將日志獨立存儲:
bash
# 在/etc/sysconfig/keepalived中添加 KEEPALIVED_OPTIONS="-D -S 6" # 日志設備號6 # 在/etc/rsyslog.conf中添加 local6.* /var/log/keepalived.log # 日志路徑 systemctl restart rsyslog keepalived
非搶占模式:避免主節點恢復后頻繁切換,在配置中添加:
conf
vrrp_instance WEB_VIP {...nopreempt # 開啟非搶占 }
單播模式:適用于跨網段部署,指定通信節點:
conf
vrrp_instance WEB_VIP {...unicast_src_ip 172.25.254.50 # 本地IPunicast_peer { 172.25.254.60 } # 對端IP }
郵件通知:故障時發送告警,配置腳本與觸發機制:
bash
# 編輯通知腳本/etc/keepalived/mail.sh #!/bin/bash mail_dest='3036573431@qq.com' mail_subj="$HOSTNAME 狀態切換為 $1" echo "時間: $(date) 節點 $HOSTNAME 狀態變為 $1" | mail -s "$mail_subj" $mail_dest# 在vrrp_instance中關聯腳本 notify_master "/etc/keepalived/mail.sh master" notify_backup "/etc/keepalived/mail.sh backup"
4.4 雙主架構實現
單主架構中備節點長期閑置,雙主架構通過兩個 VRID 實現資源利用率最大化:
KA1 配置:
conf
# 虛擬路由器1(主節點) vrrp_instance WEB_VIP {state MASTERvirtual_router_id 51priority 100virtual_ipaddress { 172.25.254.100/24 } }# 虛擬路由器2(備節點) vrrp_instance DB_VIP {state BACKUPvirtual_router_id 52priority 80virtual_ipaddress { 172.25.254.200/24 } }
KA2 配置:
conf
# 虛擬路由器1(備節點) vrrp_instance WEB_VIP {state BACKUPvirtual_router_id 51priority 80virtual_ipaddress { 172.25.254.100/24 } }# 虛擬路由器2(主節點) vrrp_instance DB_VIP {state MASTERvirtual_router_id 52priority 100virtual_ipaddress { 172.25.254.200/24 } }
測試驗證:
- 正常狀態:KA1 持有 172.25.254.100,KA2 持有 172.25.254.200;
- 故障模擬:關閉 KA2 的 keepalived,KA1 會自動接管 172.25.254.200;
- 恢復驗證:重啟 KA2 的 keepalived,VIP 會自動回切。