在分佈式架構中,NGINX 作為流量入口,其單點故障會直接導致服務不可用。Keepalived 基於 VRRP(虛擬路由冗餘協議)可實現 NGINX 主從節點的自動切換,二者組合是構建高可用流量入口的經典方案。本文將拆解 Keepalived+NGINX 高可用架構的核心實現,聚焦主從切換機制與腦裂問題防護,提供可落地的設計思路與實操要點。

一、核心架構邏輯:主從節點與虛擬 IP 聯動

Keepalived+NGINX 高可用架構的核心是“虛擬 IP(VIP)漂移”機制。架構由兩台 NGINX 服務器組成:一台主節點(MASTER)、一台從節點(BACKUP),Keepalived 進程在兩台節點上均運行。正常情況下,主節點搶佔 VIP 並對外提供服務,客户端通過 VIP 訪問 NGINX;當主節點故障(如 NGINX 進程異常、服務器宕機)時,從節點通過 VRRP 協議檢測到主節點失效,自動搶佔 VIP 成為新主節點,實現流量無縫切換,整個過程無需人工干預。

二、主從切換實現:關鍵配置與健康檢查

主從切換的可靠性依賴 Keepalived 的合理配置與精準的健康檢查,核心配置要點如下:

1. VRRP 實例配置:主從節點需配置相同的 VRRP 實例名、虛擬路由 ID(VRID)和虛擬 IP。主節點優先級設為較高值(如 100),從節點設為較低值(如 90),優先級決定搶佔權。同時開啓 nopreempt 選項(僅在從節點配置),避免主節點恢復後主動搶佔 VIP 導致流量抖動。

2. 核心健康檢查:僅檢測服務器存活不足以保障服務可用,需通過 Keepalived 腳本檢查 NGINX 進程狀態。編寫腳本定期執行 `ps -ef | grep nginx` 檢測進程,若 NGINX 停止則自動重啓,重啓失敗則執行 `systemctl stop keepalived` 釋放 VIP,觸發從節點切換。腳本需配置為可執行,並在 Keepalived 配置中通過 vrrp_script 和 track_script 指令關聯。

3. 切換時機:當主節點出現服務器宕機、網絡中斷、Keepalived 進程異常或 NGINX 進程無法恢復等情況時,從節點在檢測間隔(默認 2 秒)後未收到主節點的 VRRP 通告,即判定主節點失效,觸發 VIP 漂移與角色切換。

三、腦裂防護:規避雙主節點衝突

腦裂是高可用架構的致命問題,指主從節點因網絡分區(如心跳線中斷)均認為對方失效,同時搶佔 VIP 成為主節點,導致流量分流、數據不一致等問題。需從多維度構建防護體系:

1. 多路徑心跳檢測:除默認的 VRRP 通告心跳外,新增獨立心跳線(如交叉網線)或通過 HTTP/SSH 協議進行跨節點健康檢查,避免單一網絡故障導致心跳誤判。

2. 資源搶佔限制:開啓 VRRP 認證(配置 auth_type 和 auth_pass),只有通過認證的節點才能參與 VIP 搶佔,防止非法節點干擾。同時在從節點堅持 nopreempt 配置,減少搶佔衝突概率。

3. 腦裂檢測與兜底:編寫監控腳本定期檢查是否存在雙 VIP 節點,若檢測到腦裂則通過郵件/短信告警,並自動停止其中一台節點的 Keepalived 進程。高併發場景可結合負載均衡器(如 LVS)進一步管控流量入口。

總結:Keepalived+NGINX 架構通過“VIP 漂移+健康檢查”實現高可用主從切換,而腦裂防護需從心跳檢測、資源搶佔、監控兜底多維度協同。合理配置核心參數、完善健康檢查腳本、構建多重防護機制,才能確保架構在各類故障場景下穩定運行,保障服務連續性。